Patchwork PATCH: allow inode_readahead_blks=0

login
register
mail settings
Submitter Alexander V. Lukyanov
Date Nov. 16, 2010, 8:05 a.m.
Message ID <20101116080546.GA7949@proxy>
Download mbox | patch
Permalink /patch/71365/
State New
Headers show

Comments

Alexander V. Lukyanov - Nov. 16, 2010, 8:05 a.m.
Hello!

Currently the value 0 is disallowed, as it is not a power of 2.

This obvious patch fixes the problem.
Alexander V. Lukyanov - Nov. 17, 2010, 7:48 a.m.
On Tue, Nov 16, 2010 at 11:05:46AM +0300, Alexander V. Lukyanov wrote:
> Currently the value 0 is disallowed, as it is not a power of 2.

BTW, the default value inode_readahead_blks=32 gives me troubles: it raises
load average and increases request latency on a busy squid server. I
explain it by random access to large number of files which are present in
the squid cache.

BTW2: the value of 0 should be allowed, it is explicitly used by the code:
                /*
                 * If we need to do any I/O, try to pre-readahead extra
                 * blocks from the inode table.
                 */
                if (EXT4_SB(sb)->s_inode_readahead_blks) {
			...
		}

Patch

--- linux-2.6.35/fs/ext4/super.c.0	2010-11-16 10:48:33.418629215 +0300
+++ linux-2.6.35/fs/ext4/super.c	2010-11-16 10:46:07.739753246 +0300
@@ -1657,7 +1657,7 @@ 
 				return 0;
 			if (option < 0 || option > (1 << 30))
 				return 0;
-			if (!is_power_of_2(option)) {
+			if (option && !is_power_of_2(option)) {
 				ext4_msg(sb, KERN_ERR,
 					 "EXT4-fs: inode_readahead_blks"
 					 " must be a power of 2");
@@ -2274,7 +2274,7 @@ 
 	if (parse_strtoul(buf, 0x40000000, &t))
 		return -EINVAL;
 
-	if (!is_power_of_2(t))
+	if (t && !is_power_of_2(t))
 		return -EINVAL;
 
 	sbi->s_inode_readahead_blks = t;