Messages in this thread | | | Subject | [UPDATE][0/24]extend file size and filesystem size | From | sho@tnes ... | Date | Thu, 25 May 2006 21:39:06 +0900 |
| |
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 majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |