btrfs: only enable extent map shrinker for DEBUG builds
authorQu Wenruo <wqu@suse.com>
Fri, 16 Aug 2024 01:10:38 +0000 (10:40 +0930)
committerDavid Sterba <dsterba@suse.com>
Fri, 16 Aug 2024 19:22:39 +0000 (21:22 +0200)
Although there are several patches improving the extent map shrinker,
there are still reports of too frequent shrinker behavior, taking too
much CPU for the kswapd process.

So let's only enable extent shrinker for now, until we got more
comprehensive understanding and a better solution.

Link: https://lore.kernel.org/linux-btrfs/3df4acd616a07ef4d2dc6bad668701504b412ffc.camel@intelfx.name/
Link: https://lore.kernel.org/linux-btrfs/c30fd6b3-ca7a-4759-8a53-d42878bf84f7@gmail.com/
Fixes: 956a17d9d050 ("btrfs: add a shrinker for extent maps")
CC: stable@vger.kernel.org # 6.10+
Signed-off-by: Qu Wenruo <wqu@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/super.c

index 11044e9e2cb11022adaca78be5779aa452346c40..98fa0f382480a2a51420d586b1e2a2fa6c58d025 100644 (file)
@@ -2402,7 +2402,13 @@ static long btrfs_nr_cached_objects(struct super_block *sb, struct shrink_contro
 
        trace_btrfs_extent_map_shrinker_count(fs_info, nr);
 
-       return nr;
+       /*
+        * Only report the real number for DEBUG builds, as there are reports of
+        * serious performance degradation caused by too frequent shrinks.
+        */
+       if (IS_ENABLED(CONFIG_BTRFS_DEBUG))
+               return nr;
+       return 0;
 }
 
 static long btrfs_free_cached_objects(struct super_block *sb, struct shrink_control *sc)