]> www.infradead.org Git - linux-platform-drivers-x86.git/commitdiff
afs: Add stats for data transfer operations
authorDavid Howells <dhowells@redhat.com>
Fri, 6 Apr 2018 13:17:26 +0000 (14:17 +0100)
committerDavid Howells <dhowells@redhat.com>
Mon, 9 Apr 2018 20:54:48 +0000 (21:54 +0100)
Add statistics to /proc/fs/afs/stats for data transfer RPC operations.  New
lines are added that look like:

file-rd : n=55794 nb=10252282150
file-wr : n=9789 nb=3247763645

where n= indicates the number of ops completed and nb= indicates the number
of bytes successfully transferred.  file-rd is the counts for read/fetch
operations and file-wr the counts for write/store operations.

Note that directory and symlink downloading are included in the file-rd
stats at the moment.

Signed-off-by: David Howells <dhowells@redhat.com>
fs/afs/file.c
fs/afs/internal.h
fs/afs/proc.c
fs/afs/write.c

index 91ff1335fd33360547a0b87a57aede40ce3346ca..e5cac1bc3cf0b07d85a620976f144dede454e6af 100644 (file)
@@ -242,6 +242,12 @@ int afs_fetch_data(struct afs_vnode *vnode, struct key *key, struct afs_read *de
                ret = afs_end_vnode_operation(&fc);
        }
 
+       if (ret == 0) {
+               afs_stat_v(vnode, n_fetches);
+               atomic_long_add(desc->actual_len,
+                               &afs_v2net(vnode)->n_fetch_bytes);
+       }
+
        _leave(" = %d", ret);
        return ret;
 }
index 6ae023cbf00eb27c1d17eabbd08c86cb9e287819..f6b44f47732d23dd4dd62aaeaf7d72be3a46d65d 100644 (file)
@@ -273,6 +273,10 @@ struct afs_net {
        atomic_t                n_read_dir;     /* Number of directory pages read */
        atomic_t                n_dir_cr;       /* Number of directory entry creation edits */
        atomic_t                n_dir_rm;       /* Number of directory entry removal edits */
+       atomic_t                n_stores;       /* Number of store ops */
+       atomic_long_t           n_store_bytes;  /* Number of bytes stored */
+       atomic_long_t           n_fetch_bytes;  /* Number of bytes fetched */
+       atomic_t                n_fetches;      /* Number of data fetch ops */
 };
 
 extern const char afs_init_sysname[];
index 3212bce0d4fb32a6c8a6322f27adc0112a1d7cc0..839a22280606e9472e8b237853fb232577685652 100644 (file)
@@ -922,6 +922,13 @@ static int afs_proc_stats_show(struct seq_file *m, void *v)
        seq_printf(m, "dir-edit: cr=%u rm=%u\n",
                   atomic_read(&net->n_dir_cr),
                   atomic_read(&net->n_dir_rm));
+
+       seq_printf(m, "file-rd : n=%u nb=%lu\n",
+                  atomic_read(&net->n_fetches),
+                  atomic_long_read(&net->n_fetch_bytes));
+       seq_printf(m, "file-wr : n=%u nb=%lu\n",
+                  atomic_read(&net->n_stores),
+                  atomic_long_read(&net->n_store_bytes));
        return 0;
 }
 
index 70a563c14e6f3393d7b963aff6d6b779a225739a..eccc16198f68363f738c89ce58c4c5880f3c1524 100644 (file)
@@ -356,6 +356,12 @@ found_key:
        }
 
        switch (ret) {
+       case 0:
+               afs_stat_v(vnode, n_stores);
+               atomic_long_add((last * PAGE_SIZE + to) -
+                               (first * PAGE_SIZE + offset),
+                               &afs_v2net(vnode)->n_store_bytes);
+               break;
        case -EACCES:
        case -EPERM:
        case -ENOKEY: