lkml.org 
[lkml]   [1999]   [Apr]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
Subject2.2.5 ext2 bug
The check to enforce the 2GB file size on 32 architectures in 
ext2_file_write (fs/ext2/file.c) looks like a bug to me:

#if BITS_PER_LONG < 64
if (pos > (__u32) (pos + count)) {
count = ~pos; /* == 0xFFFFFFFF - pos */
if (!count)
return -EFBIG;
}
#else

This should probably something along:

#if BITS_PER_LONG < 64
if (pos > (__s32) (pos + count)) {
count = 0x7FFFFFFF - pos;
if (!count)
return -EFBIG;
}
#else

Another interesting bit is in ext2_file_lseek:

if (((unsigned long long) offset >> 32) != 0) {
#if BITS_PER_LONG < 64
return -EINVAL;
#else

Since the max. file size is to be checked against 2 GB shouldn't
this be

if (((unsigned long long) offset >> 31) != 0) {


Background:

I created a file with 2G-8k (using 8K writes) but the last write
succeeded only partially:

write() failed: size=8192, returned 7168
write() failed: size=8192, returned 7168

Afterwards i saved it to tape but tar failed to restore the file:

tar: data2/db/db01.vol: Could only write 8192 of 10240 bytes

And the consequently the file got truncated to
-rw------- 1 eloq eloq 2147479552 Apr 24 15:31
/data2/db/db01.vol

tar tv reports
-rw------- eloq/eloq 2147482624 1999-04-24 15:31 data2/db/db01.vol


Michael

--
Michael Marxmeier Marxmeier Software GmbH
E-Mail: mike@msede.com Besenbruchstrasse 9
Voice : +49 202 2431440 42285 Wuppertal, Germany
Fax : +49 202 2431420 http://www.msede.com/

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 13:51    [from the cache]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and my Meterkast|Read the blog