summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@linux.dev>2023-11-28 21:04:59 -0500
committerKent Overstreet <kent.overstreet@linux.dev>2024-08-22 02:07:28 -0400
commitbec00a83a13ed9fe2c701d055166844d3e228283 (patch)
tree57ac0eeddaa534614b9c06ec05e317a1f0186d28
parentd3268a05095537146d2e98353f3bc090b1cd2ed1 (diff)
fs: super_cache_to_text()
Implement shrinker.to_text() for the superblock shrinker: print out nr of dentries and inodes, total and shrinkable. Cc: Alexander Viro <viro@zeniv.linux.org.uk> Cc: Christian Brauner <brauner@kernel.org> Cc: Dave Chinner <david@fromorbit.com> Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
-rw-r--r--fs/super.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/fs/super.c b/fs/super.c
index 5b0fea6ff1cd..d3e43127e311 100644
--- a/fs/super.c
+++ b/fs/super.c
@@ -36,6 +36,7 @@
#include <linux/lockdep.h>
#include <linux/user_namespace.h>
#include <linux/fs_context.h>
+#include <linux/seq_buf.h>
#include <uapi/linux/mount.h>
#include "internal.h"
@@ -270,6 +271,16 @@ static unsigned long super_cache_count(struct shrinker *shrink,
return total_objects;
}
+static void super_cache_to_text(struct seq_buf *out, struct shrinker *shrink)
+{
+ struct super_block *sb = shrink->private_data;
+
+ seq_buf_printf(out, "inodes: total %zu shrinkable %lu\n",
+ per_cpu_sum(sb->s_inodes_nr), list_lru_count(&sb->s_inode_lru));
+ seq_buf_printf(out, "dentries: toal %zu shrinkbale %lu\n",
+ per_cpu_sum(sb->s_dentry_nr), list_lru_count(&sb->s_dentry_lru));
+}
+
static void destroy_super_work(struct work_struct *work)
{
struct super_block *s = container_of(work, struct super_block,
@@ -394,6 +405,7 @@ static struct super_block *alloc_super(struct file_system_type *type, int flags,
s->s_shrink->scan_objects = super_cache_scan;
s->s_shrink->count_objects = super_cache_count;
+ s->s_shrink->to_text = super_cache_to_text;
s->s_shrink->batch = 1024;
s->s_shrink->private_data = s;