Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=afc7cbca5bfd556c3e12d3acefbee5ab0cbd4670
Commit:     afc7cbca5bfd556c3e12d3acefbee5ab0cbd4670
Parent:     8561b089afbaed2651591e5a4574fdca451d82f2
Author:     Takashi Sato <[EMAIL PROTECTED]>
AuthorDate: Mon Jan 28 23:58:27 2008 -0500
Committer:  Theodore Ts'o <[EMAIL PROTECTED]>
CommitDate: Mon Jan 28 23:58:27 2008 -0500

    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 <[EMAIL PROTECTED]>
    Signed-off-by: Mingming Cao <[EMAIL PROTECTED]>
---
 fs/ext4/super.c         |    5 +++++
 include/linux/ext4_fs.h |    4 ++--
 2 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/fs/ext4/super.c b/fs/ext4/super.c
index 1ca0f54..ab7010d 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)
                goto out_fail;
        }
 
+       if (!sb_set_blocksize(sb, blocksize)) {
+               printk(KERN_ERR "EXT4-fs: bad blocksize %d.\n", blocksize);
+               goto out_fail;
+       }
+
        /*
         * The ext4 superblock will not be buffer aligned for other than 1kB
         * block sizes.  We need to calculate the offset from buffer start.
diff --git a/include/linux/ext4_fs.h b/include/linux/ext4_fs.h
index 97dd409..dfe4487 100644
--- a/include/linux/ext4_fs.h
+++ b/include/linux/ext4_fs.h
@@ -73,8 +73,8 @@
  * Macro-instructions used to manage several block sizes
  */
 #define EXT4_MIN_BLOCK_SIZE            1024
-#define        EXT4_MAX_BLOCK_SIZE             4096
-#define EXT4_MIN_BLOCK_LOG_SIZE                  10
+#define        EXT4_MAX_BLOCK_SIZE             65536
+#define EXT4_MIN_BLOCK_LOG_SIZE                10
 #ifdef __KERNEL__
 # define EXT4_BLOCK_SIZE(s)            ((s)->s_blocksize)
 #else
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to