Merge tag 'soc-ep93xx-dt-6.12' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc
[linux-2.6-block.git] / fs / nfs / iostat.h
CommitLineData
b2441318 1/* SPDX-License-Identifier: GPL-2.0 */
d9ef5a8c
CL
2/*
3 * linux/fs/nfs/iostat.h
4 *
5 * Declarations for NFS client per-mount statistics
6 *
7 * Copyright (C) 2005, 2006 Chuck Lever <cel@netapp.com>
8 *
d9ef5a8c
CL
9 */
10
11#ifndef _NFS_IOSTAT
12#define _NFS_IOSTAT
13
d9ef5a8c
CL
14#include <linux/percpu.h>
15#include <linux/cache.h>
34e8f928 16#include <linux/nfs_iostat.h>
d9ef5a8c
CL
17
18struct nfs_iostats {
19 unsigned long long bytes[__NFSIOS_BYTESMAX];
20 unsigned long events[__NFSIOS_COUNTSMAX];
21} ____cacheline_aligned;
22
2e96d286 23static inline void nfs_inc_server_stats(const struct nfs_server *server,
34e8f928 24 enum nfs_stat_eventcounters stat)
d9ef5a8c 25{
fce22848 26 this_cpu_inc(server->io_stats->events[stat]);
d9ef5a8c
CL
27}
28
2e96d286 29static inline void nfs_inc_stats(const struct inode *inode,
34e8f928 30 enum nfs_stat_eventcounters stat)
006ea73e
CL
31{
32 nfs_inc_server_stats(NFS_SERVER(inode), stat);
33}
34
2e96d286 35static inline void nfs_add_server_stats(const struct nfs_server *server,
34e8f928 36 enum nfs_stat_bytecounters stat,
dfe52c04 37 long addend)
d9ef5a8c 38{
fce22848 39 this_cpu_add(server->io_stats->bytes[stat], addend);
d9ef5a8c
CL
40}
41
2e96d286 42static inline void nfs_add_stats(const struct inode *inode,
34e8f928 43 enum nfs_stat_bytecounters stat,
dfe52c04 44 long addend)
006ea73e
CL
45{
46 nfs_add_server_stats(NFS_SERVER(inode), stat, addend);
47}
48
3b0ba54d
SB
49/*
50 * This specialized allocator has to be a macro for its allocations to be
51 * accounted separately (to have a separate alloc_tag).
52 */
2c321f3f 53#define nfs_alloc_iostats() alloc_percpu(struct nfs_iostats)
d9ef5a8c 54
003cb608 55static inline void nfs_free_iostats(struct nfs_iostats __percpu *stats)
d9ef5a8c 56{
01d0ae8b
TM
57 if (stats != NULL)
58 free_percpu(stats);
d9ef5a8c
CL
59}
60
34e8f928 61#endif /* _NFS_IOSTAT */