[lkml]   [2007]   [Oct]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Patch in this message
    Subject[PATCH 1/2] ext3: Support large blocksize up to PAGESIZE
    Support large blocksize up to PAGESIZE (max 64KB) for ext3

    From: Takashi Sato <>

    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 <>
    Signed-off-by: Mingming Cao <>

    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 9537316..b4bfd36 100644
    --- a/fs/ext3/super.c
    +++ b/fs/ext3/super.c
    @@ -1549,7 +1549,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 ece49a8..7aa5556 100644
    --- a/include/linux/ext3_fs.h
    +++ b/include/linux/ext3_fs.h
    @@ -76,8 +76,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 linux-kernel" in
    the body of a message to
    More majordomo info at
    Please read the FAQ at

     \ /
      Last update: 2007-10-02 02:57    [W:0.037 / U:28.568 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site