From: Mingming Cao <cmm@us.ibm.com>
To: clameter@sgi.com, linux-fsdevel@vger.kernel.org
Cc: adilger@clusterfs.com, sho@tnes.nec.co.jp,
ext4 development <linux-ext4@vger.kernel.org>,
linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [RFC 1/4] Large Blocksize support for Ext2/3/4
Date: Wed, 29 Aug 2007 17:47:37 -0700 [thread overview]
Message-ID: <1188434857.3799.76.camel@localhost.localdomain> (raw)
In-Reply-To: <1188432669.3799.35.camel@localhost.localdomain>
The next 4 patches support large block size (up to PAGESIZE, max 64KB)
for ext2/3/4, originally from Takashi Sato.
http://marc.info/?l=linux-ext4&m=115768873518400&w=2
It's quite simple to support large block size in ext2/3/4, mostly just
enlarge the block size limit. But it is NOT possible to have 64kB
blocksize on ext2/3/4 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 to put 2 empty records in such
a directory, or to special-case an impossible value like rec_len =
0xffff to handle this.
The Patch-set consists of the following 4 patches.
[1/4] ext2/3/4: enlarge blocksize
- Allow blocksize up to pagesize
[2/4] ext2: fix rec_len overflow
- prevent rec_len from overflow with 64KB blocksize
[3/4] ext3: fix rec_len overflow
- prevent rec_len from overflow with 64KB blocksize
[4/4] ext4: fix rec_len overflow
- prevent rec_len from overflow with 64KB blocksize
Just rebase to 2.6.23-rc4 and against the ext4 patch queue. Compile tested only.
Next steps:
Need a e2fsprogs changes to able test this feature. As mkfs needs to be
educated not assuming rec_len to be blocksize all the time.
Will try it with Christoph Lameter's large block patch next.
Signed-off-by: Takashi Sato <sho@tnes.nec.co.jp>
Signed-off-by: Mingming Cao <cmm@us.ibm.com>
---
---
fs/ext2/super.c | 2 +-
fs/ext3/super.c | 5 ++++-
fs/ext4/super.c | 5 +++++
include/linux/ext2_fs.h | 4 ++--
include/linux/ext3_fs.h | 4 ++--
include/linux/ext4_fs.h | 4 ++--
6 files changed, 16 insertions(+), 8 deletions(-)
Index: linux-2.6.23-rc3/fs/ext2/super.c
===================================================================
--- linux-2.6.23-rc3.orig/fs/ext2/super.c 2007-08-12 21:25:24.000000000 -0700
+++ linux-2.6.23-rc3/fs/ext2/super.c 2007-08-29 15:22:29.000000000 -0700
@@ -775,7 +775,7 @@ static int ext2_fill_super(struct super_
brelse(bh);
if (!sb_set_blocksize(sb, blocksize)) {
- printk(KERN_ERR "EXT2-fs: blocksize too small for device.\n");
+ printk(KERN_ERR "EXT2-fs: bad blocksize %d.\n", blocksize);
goto failed_sbi;
}
Index: linux-2.6.23-rc3/fs/ext3/super.c
===================================================================
--- linux-2.6.23-rc3.orig/fs/ext3/super.c 2007-08-12 21:25:24.000000000 -0700
+++ linux-2.6.23-rc3/fs/ext3/super.c 2007-08-29 15:22:29.000000000 -0700
@@ -1549,7 +1549,10 @@ static int ext3_fill_super (struct super
}
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);
Index: linux-2.6.23-rc3/fs/ext4/super.c
===================================================================
--- linux-2.6.23-rc3.orig/fs/ext4/super.c 2007-08-28 11:09:40.000000000 -0700
+++ linux-2.6.23-rc3/fs/ext4/super.c 2007-08-29 15:24:08.000000000 -0700
@@ -1626,6 +1626,11 @@ static int ext4_fill_super (struct super
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.
Index: linux-2.6.23-rc3/include/linux/ext2_fs.h
===================================================================
--- linux-2.6.23-rc3.orig/include/linux/ext2_fs.h 2007-08-12 21:25:24.000000000 -0700
+++ linux-2.6.23-rc3/include/linux/ext2_fs.h 2007-08-29 15:22:29.000000000 -0700
@@ -86,8 +86,8 @@ static inline struct ext2_sb_info *EXT2_
* Macro-instructions used to manage several block sizes
*/
#define EXT2_MIN_BLOCK_SIZE 1024
-#define EXT2_MAX_BLOCK_SIZE 4096
-#define EXT2_MIN_BLOCK_LOG_SIZE 10
+#define EXT2_MAX_BLOCK_SIZE 65536
+#define EXT2_MIN_BLOCK_LOG_SIZE 10
#ifdef __KERNEL__
# define EXT2_BLOCK_SIZE(s) ((s)->s_blocksize)
#else
Index: linux-2.6.23-rc3/include/linux/ext3_fs.h
===================================================================
--- linux-2.6.23-rc3.orig/include/linux/ext3_fs.h 2007-08-12 21:25:24.000000000 -0700
+++ linux-2.6.23-rc3/include/linux/ext3_fs.h 2007-08-29 15:22:29.000000000 -0700
@@ -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)
#else
Index: linux-2.6.23-rc3/include/linux/ext4_fs.h
===================================================================
--- linux-2.6.23-rc3.orig/include/linux/ext4_fs.h 2007-08-28 11:09:40.000000000 -0700
+++ linux-2.6.23-rc3/include/linux/ext4_fs.h 2007-08-29 15:22:29.000000000 -0700
@@ -104,8 +104,8 @@ struct ext4_allocation_request {
* 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
next prev parent reply other threads:[~2007-08-30 0:47 UTC|newest]
Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20070828190551.415127746@sgi.com>
[not found] ` <20070828190735.292638294@sgi.com>
2007-08-30 0:11 ` [31/36] Large Blocksize: Core piece Mingming Cao
2007-08-30 0:12 ` Christoph Lameter
2007-08-30 0:47 ` Mingming Cao [this message]
2007-08-30 0:59 ` [RFC 1/4] Large Blocksize support for Ext2/3/4 Christoph Lameter
2007-09-01 0:01 ` Mingming Cao
2007-09-01 0:12 ` [RFC 1/2] JBD: slab management support for large block(>8k) Mingming Cao
2007-09-01 18:39 ` Christoph Hellwig
2007-09-02 11:40 ` Christoph Lameter
2007-09-02 15:28 ` Christoph Hellwig
2007-09-03 7:55 ` Christoph Lameter
2007-09-03 13:40 ` Christoph Hellwig
2007-09-03 19:31 ` Christoph Lameter
2007-09-03 19:33 ` Christoph Hellwig
2007-09-14 18:53 ` [PATCH] JBD slab cleanups Mingming Cao
2007-09-14 18:58 ` Christoph Lameter
2007-09-17 19:29 ` Mingming Cao
2007-09-17 19:34 ` Christoph Hellwig
2007-09-17 22:01 ` Badari Pulavarty
2007-09-17 22:57 ` Mingming Cao
2007-09-18 9:04 ` Christoph Hellwig
2007-09-18 16:35 ` Mingming Cao
2007-09-18 18:04 ` Dave Kleikamp
2007-09-19 1:00 ` Mingming Cao
2007-09-19 2:19 ` Andrew Morton
2007-09-19 19:15 ` Mingming Cao
2007-09-19 19:22 ` [PATCH] JBD: use GFP_NOFS in kmalloc Mingming Cao
2007-09-19 21:34 ` Andrew Morton
2007-09-19 21:55 ` Mingming Cao
2007-09-20 4:25 ` Andreas Dilger
2007-09-19 19:26 ` [PATCH] JBD slab cleanups Dave Kleikamp
2007-09-19 19:28 ` Dave Kleikamp
2007-09-19 20:47 ` Mingming Cao
2007-09-19 19:48 ` Andreas Dilger
2007-09-19 22:03 ` Mingming Cao
2007-09-01 0:12 ` [RFC 2/2] JBD: blocks reservation fix for large block support Mingming Cao
2007-08-30 0:47 ` [RFC 2/4]ext2: fix rec_len overflow with 64KB block size Mingming Cao
[not found] ` <20070828190730.220393749@sgi.com>
2007-08-30 9:20 ` [11/36] Use page_cache_xxx in fs/buffer.c Dmitry Monakhov
2007-08-30 18:14 ` Christoph Lameter
2007-08-31 1:47 ` Christoph Lameter
2007-08-31 6:56 ` Jens Axboe
2007-08-31 7:03 ` Christoph Lameter
2007-08-31 7:11 ` Jens Axboe
2007-08-31 7:17 ` Christoph Lameter
2007-08-31 7:26 ` Jens Axboe
2007-08-31 7:33 ` Christoph Lameter
2007-08-31 7:43 ` Jens Axboe
2007-08-31 7:52 ` Christoph Lameter
2007-08-31 8:12 ` Jens Axboe
2007-08-31 15:22 ` Christoph Lameter
2007-08-31 16:35 ` Jörn Engel
2007-08-31 19:00 ` Jens Axboe
2007-08-31 8:36 ` Dmitry Monakhov
2007-08-31 15:28 ` Christoph Lameter
[not found] ` <20070828192034.GA13883@lst.de>
[not found] ` <Pine.LNX.4.64.0708281254070.16473@schroedinger.engr.sgi.com>
2007-09-01 1:11 ` [00/36] Large Blocksize Support V6 Christoph Lameter
2007-09-01 19:17 ` Peter Zijlstra
2007-09-02 11:44 ` Christoph Lameter
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1188434857.3799.76.camel@localhost.localdomain \
--to=cmm@us.ibm.com \
--cc=adilger@clusterfs.com \
--cc=clameter@sgi.com \
--cc=linux-ext4@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=sho@tnes.nec.co.jp \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).