aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ext4/extents.c
diff options
context:
space:
mode:
authorTheodore Ts'o <tytso@mit.edu>2013-07-16 10:28:47 -0400
committerTheodore Ts'o <tytso@mit.edu>2013-07-16 10:28:47 -0400
commit63b999685cb372e24eb73f255cd73547026370fd (patch)
tree92053ac3ca2fa7ba351fce31d558ba13cc37926d /fs/ext4/extents.c
parent76828c882630ced08b5ddce22cc0095b05de9bc5 (diff)
ext4: call ext4_es_lru_add() after handling cache miss
If there are no items in the extent status tree, ext4_es_lru_add() is a no-op. So it is not sufficient to call ext4_es_lru_add() before we try to lookup an entry in the extent status tree. We also need to call it at the end of ext4_ext_map_blocks(), after items have been added to the extent status tree. This could lead to inodes with that have extent status trees but which are not in the LRU list, which means they won't get considered for eviction by the es_shrinker. Signed-off-by: "Theodore Ts'o" <tytso@mit.edu> Cc: Zheng Liu <wenqing.lz@taobao.com> Cc: stable@vger.kernel.org
Diffstat (limited to 'fs/ext4/extents.c')
-rw-r--r--fs/ext4/extents.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
index cfdc51e30257..a61873808f76 100644
--- a/fs/ext4/extents.c
+++ b/fs/ext4/extents.c
@@ -4385,8 +4385,9 @@ out2:
4385 } 4385 }
4386 4386
4387out3: 4387out3:
4388 trace_ext4_ext_map_blocks_exit(inode, flags, map, err ? err : allocated); 4388 trace_ext4_ext_map_blocks_exit(inode, flags, map,
4389 4389 err ? err : allocated);
4390 ext4_es_lru_add(inode);
4390 return err ? err : allocated; 4391 return err ? err : allocated;
4391} 4392}
4392 4393