Add a stat counter of culling events whereby the cache backend culls a file to make space (when asked by cachefilesd in this case) and display in /proc/fs/fscache/stats. Signed-off-by: David Howells <dhowells@xxxxxxxxxx> cc: linux-cachefs@xxxxxxxxxx --- fs/cachefiles/namei.c | 1 + fs/fscache/stats.c | 7 +++++-- include/linux/fscache-cache.h | 4 +++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/fs/cachefiles/namei.c b/fs/cachefiles/namei.c index 9b0a14e37cfa..a118074826cd 100644 --- a/fs/cachefiles/namei.c +++ b/fs/cachefiles/namei.c @@ -661,6 +661,7 @@ int cachefiles_cull(struct cachefiles_cache *cache, struct dentry *dir, goto error_unlock; /* actually remove the victim (drops the dir mutex) */ + fscache_count_culled(); _debug("bury"); ret = cachefiles_bury_object(cache, NULL, dir, victim, diff --git a/fs/fscache/stats.c b/fs/fscache/stats.c index d34fb6e91d57..ee1b611e365d 100644 --- a/fs/fscache/stats.c +++ b/fs/fscache/stats.c @@ -48,6 +48,8 @@ atomic_t fscache_n_no_write_space; EXPORT_SYMBOL(fscache_n_no_write_space); atomic_t fscache_n_no_create_space; EXPORT_SYMBOL(fscache_n_no_create_space); +atomic_t fscache_n_culled; +EXPORT_SYMBOL(fscache_n_culled); /* * display the general statistics @@ -90,9 +92,10 @@ int fscache_stats_show(struct seq_file *m, void *v) atomic_read(&fscache_n_relinquishes_retire), atomic_read(&fscache_n_relinquishes_dropped)); - seq_printf(m, "NoSpace: nwr=%u ncr=%u\n", + seq_printf(m, "NoSpace: nwr=%u ncr=%u cull=%u\n", atomic_read(&fscache_n_no_write_space), - atomic_read(&fscache_n_no_create_space)); + atomic_read(&fscache_n_no_create_space), + atomic_read(&fscache_n_culled)); seq_printf(m, "IO : rd=%u wr=%u\n", atomic_read(&fscache_n_read), diff --git a/include/linux/fscache-cache.h b/include/linux/fscache-cache.h index 7b3225c6c22f..e12f4163af61 100644 --- a/include/linux/fscache-cache.h +++ b/include/linux/fscache-cache.h @@ -181,15 +181,17 @@ extern atomic_t fscache_n_read; extern atomic_t fscache_n_write; extern atomic_t fscache_n_no_write_space; extern atomic_t fscache_n_no_create_space; +extern atomic_t fscache_n_culled; #define fscache_count_read() atomic_inc(&fscache_n_read) #define fscache_count_write() atomic_inc(&fscache_n_write) #define fscache_count_no_write_space() atomic_inc(&fscache_n_no_write_space) #define fscache_count_no_create_space() atomic_inc(&fscache_n_no_create_space) +#define fscache_count_culled() atomic_inc(&fscache_n_culled) #else #define fscache_count_read() do {} while(0) #define fscache_count_write() do {} while(0) #define fscache_count_no_write_space() do {} while(0) -#define fscache_count_no_create_space() do {} while(0) +#define fscache_count_culled() do {} while(0) #endif extern struct workqueue_struct *fscache_wq;