]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
nfsd: count nfsd_file allocations
authorJeff Layton <jlayton@kernel.org>
Wed, 10 Jul 2024 13:05:33 +0000 (09:05 -0400)
committerChuck Lever <chuck.lever@oracle.com>
Sun, 1 Sep 2024 14:04:54 +0000 (10:04 -0400)
We already count the frees (via nfsd_file_releases). Count the
allocations as well. Also switch the direct call to nfsd_file_slab_free
in nfsd_file_do_acquire to nfsd_file_free, so that the allocs and
releases match up.

Signed-off-by: Jeff Layton <jlayton@kernel.org>
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
fs/nfsd/filecache.c

index 6af4e6027227f902cbdeeb6574b28fc1630d6297..93e2ffa5eae6dab770584bafe9af609ae2f76800 100644 (file)
@@ -56,6 +56,7 @@
 
 static DEFINE_PER_CPU(unsigned long, nfsd_file_cache_hits);
 static DEFINE_PER_CPU(unsigned long, nfsd_file_acquisitions);
+static DEFINE_PER_CPU(unsigned long, nfsd_file_allocations);
 static DEFINE_PER_CPU(unsigned long, nfsd_file_releases);
 static DEFINE_PER_CPU(unsigned long, nfsd_file_total_age);
 static DEFINE_PER_CPU(unsigned long, nfsd_file_evictions);
@@ -215,6 +216,7 @@ nfsd_file_alloc(struct net *net, struct inode *inode, unsigned char need,
        if (unlikely(!nf))
                return NULL;
 
+       this_cpu_inc(nfsd_file_allocations);
        INIT_LIST_HEAD(&nf->nf_lru);
        INIT_LIST_HEAD(&nf->nf_gc);
        nf->nf_birthtime = ktime_get();
@@ -911,6 +913,7 @@ nfsd_file_cache_shutdown(void)
        for_each_possible_cpu(i) {
                per_cpu(nfsd_file_cache_hits, i) = 0;
                per_cpu(nfsd_file_acquisitions, i) = 0;
+               per_cpu(nfsd_file_allocations, i) = 0;
                per_cpu(nfsd_file_releases, i) = 0;
                per_cpu(nfsd_file_total_age, i) = 0;
                per_cpu(nfsd_file_evictions, i) = 0;
@@ -1026,7 +1029,7 @@ retry:
        if (unlikely(nf)) {
                spin_unlock(&inode->i_lock);
                rcu_read_unlock();
-               nfsd_file_slab_free(&new->nf_rcu);
+               nfsd_file_free(new);
                goto wait_for_construction;
        }
        nf = new;
@@ -1200,7 +1203,7 @@ nfsd_file_acquire_opened(struct svc_rqst *rqstp, struct svc_fh *fhp,
  */
 int nfsd_file_cache_stats_show(struct seq_file *m, void *v)
 {
-       unsigned long releases = 0, evictions = 0;
+       unsigned long allocations = 0, releases = 0, evictions = 0;
        unsigned long hits = 0, acquisitions = 0;
        unsigned int i, count = 0, buckets = 0;
        unsigned long lru = 0, total_age = 0;
@@ -1225,6 +1228,7 @@ int nfsd_file_cache_stats_show(struct seq_file *m, void *v)
        for_each_possible_cpu(i) {
                hits += per_cpu(nfsd_file_cache_hits, i);
                acquisitions += per_cpu(nfsd_file_acquisitions, i);
+               allocations += per_cpu(nfsd_file_allocations, i);
                releases += per_cpu(nfsd_file_releases, i);
                total_age += per_cpu(nfsd_file_total_age, i);
                evictions += per_cpu(nfsd_file_evictions, i);
@@ -1235,6 +1239,7 @@ int nfsd_file_cache_stats_show(struct seq_file *m, void *v)
        seq_printf(m, "lru entries:   %lu\n", lru);
        seq_printf(m, "cache hits:    %lu\n", hits);
        seq_printf(m, "acquisitions:  %lu\n", acquisitions);
+       seq_printf(m, "allocations:   %lu\n", allocations);
        seq_printf(m, "releases:      %lu\n", releases);
        seq_printf(m, "evictions:     %lu\n", evictions);
        if (releases)