[Devel] [PATCH rh7] fs/superblock: apply d23da150a37c correctly
Andrey Ryabinin
aryabinin at virtuozzo.com
Tue Dec 29 03:28:24 PST 2015
It seems that commit d23da150a37c ("fs/superblock: avoid locking
counting inodes and dentries before reclaiming them")
wasn't applied correctly durring rebase to RHEL 7.2.
Fix this up.
https://bugs.openvz.org/browse/OVZ-6646
Signed-off-by: Andrey Ryabinin <aryabinin at virtuozzo.com>
---
fs/super.c | 14 +++++++++++---
1 file changed, 11 insertions(+), 3 deletions(-)
diff --git a/fs/super.c b/fs/super.c
index 909d943..d09e15a 100644
--- a/fs/super.c
+++ b/fs/super.c
@@ -73,6 +73,9 @@ static unsigned long super_cache_scan(struct shrinker *shrink,
if (!(sc->gfp_mask & __GFP_FS))
return SHRINK_STOP;
+ if (!grab_super_passive(sb))
+ return SHRINK_STOP;
+
if (sb->s_op && sb->s_op->nr_cached_objects)
fs_objects = sb->s_op->nr_cached_objects(sb, sc);
@@ -111,9 +114,14 @@ static unsigned long super_cache_count(struct shrinker *shrink,
sb = container_of(shrink, struct super_block, s_shrink);
- if (!grab_super_passive(sb))
- return 0;
-
+ /*
+ * Don't call grab_super_passive as it is a potential
+ * scalability bottleneck. The counts could get updated
+ * between super_cache_count and super_cache_scan anyway.
+ * Call to super_cache_count with shrinker_rwsem held
+ * ensures the safety of call to list_lru_count_node() and
+ * s_op->nr_cached_objects().
+ */
if (sb->s_op && sb->s_op->nr_cached_objects)
total_objects = sb->s_op->nr_cached_objects(sb, sc);
--
2.4.10
More information about the Devel
mailing list