diff options
author | Takashi Sato <sho@tnes.nec.co.jp> | 2008-01-28 23:58:27 -0500 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2008-01-28 23:58:27 -0500 |
commit | afc7cbca5bfd556c3e12d3acefbee5ab0cbd4670 (patch) | |
tree | 90e6daf4a3f41433221d9cb8d7ce909cde0d62d1 /fs | |
parent | 8561b089afbaed2651591e5a4574fdca451d82f2 (diff) |
ext4: Support large blocksize up to PAGESIZE
This patch set supports large block size(>4k, <=64k) in ext4,
just enlarging the block size limit. But it is NOT possible to have 64kB
blocksize on ext4 without some changes to the directory handling
code. The reason is that an empty 64kB directory block would have a
rec_len == (__u16)2^16 == 0, and this would cause an error to be hit in
the filesystem. The proposed solution is treat 64k rec_len
with a an impossible value like rec_len = 0xffff to handle this.
The Patch-set consists of the following 2 patches.
[1/2] ext4: enlarge blocksize
- Allow blocksize up to pagesize
[2/2] ext4: fix rec_len overflow
- prevent rec_len from overflow with 64KB blocksize
Now on 64k page ppc64 box runs with this patch set we could create a 64k
block size ext4dev, and able to handle empty directory block.
Signed-off-by: Takashi Sato <sho@tnes.nec.co.jp>
Signed-off-by: Mingming Cao <cmm@us.ibm.com>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/ext4/super.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/fs/ext4/super.c b/fs/ext4/super.c index 1ca0f546c466..ab7010dde1b5 100644 --- a/fs/ext4/super.c +++ b/fs/ext4/super.c | |||
@@ -1624,6 +1624,11 @@ static int ext4_fill_super (struct super_block *sb, void *data, int silent) | |||
1624 | goto out_fail; | 1624 | goto out_fail; |
1625 | } | 1625 | } |
1626 | 1626 | ||
1627 | if (!sb_set_blocksize(sb, blocksize)) { | ||
1628 | printk(KERN_ERR "EXT4-fs: bad blocksize %d.\n", blocksize); | ||
1629 | goto out_fail; | ||
1630 | } | ||
1631 | |||
1627 | /* | 1632 | /* |
1628 | * The ext4 superblock will not be buffer aligned for other than 1kB | 1633 | * The ext4 superblock will not be buffer aligned for other than 1kB |
1629 | * block sizes. We need to calculate the offset from buffer start. | 1634 | * block sizes. We need to calculate the offset from buffer start. |