diff options
author | David Howells <dhowells@redhat.com> | 2018-04-06 16:17:24 +0300 |
---|---|---|
committer | David Howells <dhowells@redhat.com> | 2018-04-09 23:53:54 +0300 |
commit | d55b4da4331efdfe2be1bcc7bc217bd3f7c47870 (patch) | |
tree | 05318157503c9621feda308c0ef95bc2ffce36f7 /fs/afs/proc.c | |
parent | 888b33846111927d94dee6d8187c72515160edd3 (diff) | |
download | linux-d55b4da4331efdfe2be1bcc7bc217bd3f7c47870.tar.xz |
afs: Introduce a statistics proc file
Introduce a proc file that displays a bunch of statistics for the AFS
filesystem in the current network namespace.
Signed-off-by: David Howells <dhowells@redhat.com>
Diffstat (limited to 'fs/afs/proc.c')
-rw-r--r-- | fs/afs/proc.c | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/fs/afs/proc.c b/fs/afs/proc.c index 76f6df32cde0..8bffb17f9728 100644 --- a/fs/afs/proc.c +++ b/fs/afs/proc.c @@ -152,6 +152,8 @@ static const struct file_operations afs_proc_sysname_fops = { .write = afs_proc_sysname_write, }; +static const struct file_operations afs_proc_stats_fops; + /* * initialise the /proc/fs/afs/ directory */ @@ -166,6 +168,7 @@ int afs_proc_init(struct afs_net *net) if (!proc_create("cells", 0644, net->proc_afs, &afs_proc_cells_fops) || !proc_create("rootcell", 0644, net->proc_afs, &afs_proc_rootcell_fops) || !proc_create("servers", 0644, net->proc_afs, &afs_proc_servers_fops) || + !proc_create("stats", 0644, net->proc_afs, &afs_proc_stats_fops) || !proc_create("sysname", 0644, net->proc_afs, &afs_proc_sysname_fops)) goto error_tree; @@ -897,3 +900,37 @@ static int afs_proc_sysname_show(struct seq_file *m, void *v) seq_printf(m, "%s\n", sysnames->subs[i]); return 0; } + +/* + * Display general per-net namespace statistics + */ +static int afs_proc_stats_show(struct seq_file *m, void *v) +{ + struct afs_net *net = afs_seq2net(m); + + seq_puts(m, "kAFS statistics\n"); + + seq_printf(m, "dir-mgmt: look=%u reval=%u inval=%u\n", + atomic_read(&net->n_lookup), + atomic_read(&net->n_reval), + atomic_read(&net->n_inval)); + + seq_printf(m, "dir-data: rdpg=%u\n", + atomic_read(&net->n_read_dir)); + return 0; +} + +/* + * Open "/proc/fs/afs/stats" to allow reading of the stat counters. + */ +static int afs_proc_stats_open(struct inode *inode, struct file *file) +{ + return single_open(file, afs_proc_stats_show, NULL); +} + +static const struct file_operations afs_proc_stats_fops = { + .open = afs_proc_stats_open, + .read = seq_read, + .llseek = seq_lseek, + .release = single_release, +}; |