Hi Andreas, all,
On Apr 27, 2006, Andreas wrote:
>> [11/21] enlarge file size(ext3)
>> - If the flag is set to super block, i_blocks of disk
>> inode (ext3_inode) is filesystem-block unit, and
>> i_blocks of VFS inode is sector unit.
>> - If the flag is set to super block, max file size is set
>> to (FS blocksize) * (2^32 -1).
>
>I like this patch, but prefer if we maintain as much compatibility as
>possible. There is not really a reason to make a filesystem
>incompatible unless there are actually files > 2TB stored in it (just
>like we didn't make filesystems incompatible for large_file unless
>there were files over 2GB in the filesystem).
I updated my "i_blocks patch set" to keep as much compatibility as
possible.
Overview:
- In case of writing an inode of >2TB file to the disk,
o set EXT2/3_HUGE_FILE_FL to inode.i_flags.
o set EXT2_FEATURE_RO_COMPAT_HUGE_FILE to super block.
o set blocks count to i_blocks of disk inode(ext3_inode) by
filesystem-block unit.
- In case of reading an inode of >2TB file from the disk,
if EXT2/3_HUGE_FILE_FL is set, i_blocks of disk inode(ext3_inode)
is converted from filesystem-block unit to sector unit, and set to
i_blocks of VFS inode.
- Once a >2TB file is created, super block flag(EXT2_FEATURE_RO_COMPAT_
HUGE_FILE) is never unset even if every >2TB files are deleted.
- A filesystem with EXT2_FEATURE_RO_COMPAT_HUGE_FILE is allowed to be
mounted read-only on existing kernel.
- In order to make filesystem with >2^31 blocks, execute mke2fs with
"-O huge_fs". Then super block flag(EXT2/3_FEATURE_
INCOMPAT_HUGE_FS) is set. Without this INCOMPAT flag, old kernel may
mount huge filesystem and treat >2^31 block number as negative value.
This reform consists of the following 23 patches.
Five of them([12/24], [13/24], [14/24], [18/24], [22/24]) are the
patches I modified this time,
two of them([1/24], [2/24]) are the update of Minming Cao's patches
linked from the following URL,
http://marc.theaimsgroup.com/?l=ext2-devel&m=114368281629281&w=2
one of them([19/24]) is the update of Jitendra Pawar's patch linked
from the following URL,
http://marc.theaimsgroup.com/?l=ext2-devel&m=114734611020743&w=2
and the others are just the same as before except for version.
Minming, Jitendra, thanks for your help.
I'm working on typedef, but haven't merged yet.
----------------------
Summary Of Patches
----------------------
The following is the patches for applying to linux-2.6.17-rc4.
[1/24] modify around the block allocation code(ext3)
- Modify around the ext3 block allocation code to replace
"int" type filesystem block number with "unsigned long".
[2/24] modify non block allocation code(ext3)
- Same fix as above.
[3/24] add percpu_llcounter for ext3
- The number of blocks and inodes are counted using
percpu_counter whose entry for counter is long type, so it
can only have less than 2G-1. Then I add percpu_llcounter
whose entry for counter is long long type in ext3.
[4/24] add percpu_llcounter for ext2
- Same fix as ext3 described above [3/23].
[5/24] modify format strings in print(ext3)
- The part which prints the signed value, related to a block
and an inode, in decimal is corrected so that it can print
unsigned one.
[6/24] modify format strings in print(ext2)
- Same fix as ext3 described above [5/23].
[7/24] modify format strings in print(bfs)
- As i_blocks of VFS inode gets 8 byte variable, change its
string format to %lld.
[8/24] modify format strings in print(efs)
- Same fix as bfs described above [7/23].
[9/24] modify format strings in print(jbd)
- Same fix as ext3 described above [5/23].
[10/24] change the type of variables manipulating a block or an
inode(ext3)
- Change the type of 4byte variables manipulating a block or
an inode from signed to unsigned.
- Where an overflow occurs in process of operation, casting
it to long long.
[11/24] change the type of variables manipulating a block or an
inode(ext2)
- Same fix as ext3 described above [10/23].
[12/24] enlarge block size(ext3)
- Add an incompat flag "EXT3_FEATURE_INCOMPAT_LARGE_BLOCK"
which indicates that the filesystem is extended.
- Allow block size till pagesize in ext3.
[13/24] extend file size(ext3)
- If the flag is set to super block, i_blocks of disk inode
(ext3_inode) is filesystem-block unit, and i_blocks of VFS
inode is sector unit.
- If the flag is set to super block, max file size is set to
(FS blocksize) * (2^32 -1).
[14/24] extend file size(ext2)
- Same fix as ext3 described above [13/23].
The following is the patches for applying to e2fsprogs-1.39-WIP-2006-04-09.
[15/24] modify format strings in print
- The part which prints the signed value, related to a block
and an inode, in decimal is corrected so that it can print
unsigned one.
[16/24] change the type of variables manipulating a block and an
inode
- Change the type of 4byte variables manipulating a block or
an inode from signed to unsigned.
- Where an overflow occurs in process of operation, casting
it to long long.
[17/24] change the type of variables which manipulate bitmap
- Change the type of 4byte variables manipulating bitmap
from signed to unsigned.
[18/24] enlarge file size and filesystem size
- Add an option "-O large_block" in mke2fs.
- With this option, the maximum size of a file is (blocksize)
* (2^32-1) bytes, and of a filesystem is (pagesize) *
(2^32-1).
[19/24] large files and filesystem support
- This fixes what remains unmodified.
The following is the patches for applying to ext2resize-1.1.19.
[20/24] fix the bug related to the option "resize_inode"
- A format of resize-inode in ext2prepare is different from
the one in mke2fs, so ext2prepare fails. Then I adapt
ext2prepare's to mke2fs's.
[21/24] fix the bug that an offset of an inode table is erroneously
calculated
- Running ext2resize results in failure due to an erroneous
offset of an inode table, then I fix how to calculate it.
[22/24] enlarge file size and filesystem size
- With "-O large_block" option in mke2fs, the maximum size of
a file is (blocksize) * (2^32-1) bytes, and of a filesystem
is (pagesize) * (2^32-1).
[23/24] change the type of variables manipulating a block or an inode
- Change the type of 4byte variables manipulating a block or
an inode from signed to unsigned.
- Where an overflow occurs in process of operation, casting
it to long long.
[24/24] modify format strings in print
- The part which prints the signed value, related to a block
and an inode, in decimal is corrected so that it can print
unsigned one.
Andreas, does this fix meet your demand?
Cheers, sho
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[Index of Archives]
[Kernel Newbies]
[Netfilter]
[Bugtraq]
[Photo]
[Stuff]
[Gimp]
[Yosemite News]
[MIPS Linux]
[ARM Linux]
[Linux Security]
[Linux RAID]
[Video 4 Linux]
[Linux for the blind]
[Linux Resources]