aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/inode.c
diff options
context:
space:
mode:
authorJosef Bacik <josef@redhat.com>2011-05-13 10:32:11 -0400
committerJosef Bacik <josef@redhat.com>2011-05-23 13:03:14 -0400
commit026fd317828500524cdc7e5ff9e8e7923abb2868 (patch)
treed303bffbd895c307f49286cd90186cf58223dde2 /fs/btrfs/inode.c
parent589d8ade83f07c0f11c8191c0ca309f34d7a2c14 (diff)
Btrfs: don't always do readahead
Our readahead is sort of sloppy, and really isn't always needed. For example if ls is doing a stating ls (which is the default) it's going to stat in non-disk order, so if say you have a directory with a stupid amount of files, readahead is going to do nothing but waste time in the case of doing the stat. Taking the unconditional readahead out made my test go from 57 minutes to 36 minutes. This means that everywhere we do loop through the tree we want to make sure we do set path->reada properly, so I went through and found all of the places where we loop through the path and set reada to 1. Thanks, Signed-off-by: Josef Bacik <josef@redhat.com>
Diffstat (limited to 'fs/btrfs/inode.c')
-rw-r--r--fs/btrfs/inode.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index dd5938a7de21..6228a304b547 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -4242,7 +4242,9 @@ static int btrfs_real_readdir(struct file *filp, void *dirent,
4242 filp->f_pos = 2; 4242 filp->f_pos = 2;
4243 } 4243 }
4244 path = btrfs_alloc_path(); 4244 path = btrfs_alloc_path();
4245 path->reada = 2; 4245 if (!path)
4246 return -ENOMEM;
4247 path->reada = 1;
4246 4248
4247 btrfs_set_key_type(&key, key_type); 4249 btrfs_set_key_type(&key, key_type);
4248 key.offset = filp->f_pos; 4250 key.offset = filp->f_pos;
@@ -5043,7 +5045,15 @@ again:
5043 5045
5044 if (!path) { 5046 if (!path) {
5045 path = btrfs_alloc_path(); 5047 path = btrfs_alloc_path();
5046 BUG_ON(!path); 5048 if (!path) {
5049 err = -ENOMEM;
5050 goto out;
5051 }
5052 /*
5053 * Chances are we'll be called again, so go ahead and do
5054 * readahead
5055 */
5056 path->reada = 1;
5047 } 5057 }
5048 5058
5049 ret = btrfs_lookup_file_extent(trans, root, path, 5059 ret = btrfs_lookup_file_extent(trans, root, path,