Ver Fonte

ext4: allow inode_readahead_blks=0 (linux-2.6.37)

I cannot disable inode-read-ahead feature of ext4 (on 2.6.37):

# echo 0 > /sys/fs/ext4/sda2/inode_readahead_blks 
bash: echo: write error: Invalid argument

On a server with lots of small files and random access this read-ahead makes
performance worse, and I'd like to disable it. I work around this problem
by using value of 1, but it still reads an extra block.

This patch fixes the problem by checking for zero explicitly.

Signed-off-by: Alexander V. Lukyanov <lav@netis.ru>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Alexander V. Lukyanov há 14 anos atrás
pai
commit
5dbd571d87
1 ficheiros alterados com 2 adições e 2 exclusões
  1. 2 2
      fs/ext4/super.c

+ 2 - 2
fs/ext4/super.c

@@ -1771,7 +1771,7 @@ set_qf_format:
 				return 0;
 				return 0;
 			if (option < 0 || option > (1 << 30))
 			if (option < 0 || option > (1 << 30))
 				return 0;
 				return 0;
-			if (!is_power_of_2(option)) {
+			if (option && !is_power_of_2(option)) {
 				ext4_msg(sb, KERN_ERR,
 				ext4_msg(sb, KERN_ERR,
 					 "EXT4-fs: inode_readahead_blks"
 					 "EXT4-fs: inode_readahead_blks"
 					 " must be a power of 2");
 					 " must be a power of 2");
@@ -2412,7 +2412,7 @@ static ssize_t inode_readahead_blks_store(struct ext4_attr *a,
 	if (parse_strtoul(buf, 0x40000000, &t))
 	if (parse_strtoul(buf, 0x40000000, &t))
 		return -EINVAL;
 		return -EINVAL;
 
 
-	if (!is_power_of_2(t))
+	if (t && !is_power_of_2(t))
 		return -EINVAL;
 		return -EINVAL;
 
 
 	sbi->s_inode_readahead_blks = t;
 	sbi->s_inode_readahead_blks = t;