Commit:     0f0a89ebe1ccf7c280534f69577cdd182941eb6a
Parent:     4176ed593866b5e4bcf86896e0734315ad46661b
Author:     Takashi Sato <[EMAIL PROTECTED]>
AuthorDate: Thu Oct 18 03:06:56 2007 -0700
Committer:  Linus Torvalds <[EMAIL PROTECTED]>
CommitDate: Thu Oct 18 14:37:29 2007 -0700

    ext3: support large blocksize up to PAGESIZE
    This patch set supports large block size(>4k, <=64k) in ext3 just enlarging
    the block size limit.  But it is NOT possible to have 64kB blocksize on
    ext3 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]  ext3: enlarge blocksize
             - Allow blocksize up to pagesize
      [2/2]  ext3: 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 ext3, and able to handle empty directory block.
    Signed-off-by: Takashi Sato <[EMAIL PROTECTED]>
    Signed-off-by: Mingming Cao <[EMAIL PROTECTED]>
    Acked-by: Christoph Lameter <[EMAIL PROTECTED]>
    Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
    Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>
 fs/ext3/super.c         |    6 +++++-
 include/linux/ext3_fs.h |    4 ++--
 2 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/fs/ext3/super.c b/fs/ext3/super.c
index 141573d..81868c0 100644
--- a/fs/ext3/super.c
+++ b/fs/ext3/super.c
@@ -1620,7 +1620,11 @@ static int ext3_fill_super (struct super_block *sb, void 
*data, int silent)
                brelse (bh);
-               sb_set_blocksize(sb, blocksize);
+               if (!sb_set_blocksize(sb, blocksize)) {
+                       printk(KERN_ERR "EXT3-fs: bad blocksize %d.\n",
+                               blocksize);
+                       goto out_fail;
+               }
                logic_sb_block = (sb_block * EXT3_MIN_BLOCK_SIZE) / blocksize;
                offset = (sb_block * EXT3_MIN_BLOCK_SIZE) % blocksize;
                bh = sb_bread(sb, logic_sb_block);
diff --git a/include/linux/ext3_fs.h b/include/linux/ext3_fs.h
index 589b0b3..6413445 100644
--- a/include/linux/ext3_fs.h
+++ b/include/linux/ext3_fs.h
@@ -72,8 +72,8 @@
  * Macro-instructions used to manage several block sizes
 #define EXT3_MIN_BLOCK_SIZE            1024
-#define        EXT3_MAX_BLOCK_SIZE             4096
-#define EXT3_MIN_BLOCK_LOG_SIZE                  10
+#define        EXT3_MAX_BLOCK_SIZE             65536
+#define EXT3_MIN_BLOCK_LOG_SIZE                10
 #ifdef __KERNEL__
 # define EXT3_BLOCK_SIZE(s)            ((s)->s_blocksize)
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

Reply via email to