xref: /linux/fs/smb/server/stats.h (revision c17ee635fd3a482b2ad2bf5e269755c2eae5f25e)
1*b38f99c1SBahubali B Gumaji /* SPDX-License-Identifier: GPL-2.0-or-later */
2*b38f99c1SBahubali B Gumaji /*
3*b38f99c1SBahubali B Gumaji  *   Copyright (C) 2025, LG Electronics.
4*b38f99c1SBahubali B Gumaji  *   Author(s): Hyunchul Lee <hyc.lee@gmail.com>
5*b38f99c1SBahubali B Gumaji  *   Copyright (C) 2025, Samsung Electronics.
6*b38f99c1SBahubali B Gumaji  *   Author(s): Vedansh Bhardwaj <v.bhardwaj@samsung.com>
7*b38f99c1SBahubali B Gumaji  */
8*b38f99c1SBahubali B Gumaji 
9*b38f99c1SBahubali B Gumaji #ifndef __KSMBD_STATS_H__
10*b38f99c1SBahubali B Gumaji #define __KSMBD_STATS_H__
11*b38f99c1SBahubali B Gumaji 
12*b38f99c1SBahubali B Gumaji #define KSMBD_COUNTER_MAX_REQS	19
13*b38f99c1SBahubali B Gumaji 
14*b38f99c1SBahubali B Gumaji enum {
15*b38f99c1SBahubali B Gumaji 	KSMBD_COUNTER_SESSIONS = 0,
16*b38f99c1SBahubali B Gumaji 	KSMBD_COUNTER_TREE_CONNS,
17*b38f99c1SBahubali B Gumaji 	KSMBD_COUNTER_REQUESTS,
18*b38f99c1SBahubali B Gumaji 	KSMBD_COUNTER_READ_BYTES,
19*b38f99c1SBahubali B Gumaji 	KSMBD_COUNTER_WRITE_BYTES,
20*b38f99c1SBahubali B Gumaji 	KSMBD_COUNTER_FIRST_REQ,
21*b38f99c1SBahubali B Gumaji 	KSMBD_COUNTER_LAST_REQ = KSMBD_COUNTER_FIRST_REQ +
22*b38f99c1SBahubali B Gumaji 				KSMBD_COUNTER_MAX_REQS - 1,
23*b38f99c1SBahubali B Gumaji 	KSMBD_COUNTER_MAX,
24*b38f99c1SBahubali B Gumaji };
25*b38f99c1SBahubali B Gumaji 
26*b38f99c1SBahubali B Gumaji #ifdef CONFIG_PROC_FS
27*b38f99c1SBahubali B Gumaji extern struct ksmbd_counters ksmbd_counters;
28*b38f99c1SBahubali B Gumaji 
29*b38f99c1SBahubali B Gumaji struct ksmbd_counters {
30*b38f99c1SBahubali B Gumaji 	struct percpu_counter	counters[KSMBD_COUNTER_MAX];
31*b38f99c1SBahubali B Gumaji };
32*b38f99c1SBahubali B Gumaji 
33*b38f99c1SBahubali B Gumaji static inline void ksmbd_counter_inc(int type)
34*b38f99c1SBahubali B Gumaji {
35*b38f99c1SBahubali B Gumaji 	percpu_counter_inc(&ksmbd_counters.counters[type]);
36*b38f99c1SBahubali B Gumaji }
37*b38f99c1SBahubali B Gumaji 
38*b38f99c1SBahubali B Gumaji static inline void ksmbd_counter_dec(int type)
39*b38f99c1SBahubali B Gumaji {
40*b38f99c1SBahubali B Gumaji 	percpu_counter_dec(&ksmbd_counters.counters[type]);
41*b38f99c1SBahubali B Gumaji }
42*b38f99c1SBahubali B Gumaji 
43*b38f99c1SBahubali B Gumaji static inline void ksmbd_counter_add(int type, s64 value)
44*b38f99c1SBahubali B Gumaji {
45*b38f99c1SBahubali B Gumaji 	percpu_counter_add(&ksmbd_counters.counters[type], value);
46*b38f99c1SBahubali B Gumaji }
47*b38f99c1SBahubali B Gumaji 
48*b38f99c1SBahubali B Gumaji static inline void ksmbd_counter_sub(int type, s64 value)
49*b38f99c1SBahubali B Gumaji {
50*b38f99c1SBahubali B Gumaji 	percpu_counter_sub(&ksmbd_counters.counters[type], value);
51*b38f99c1SBahubali B Gumaji }
52*b38f99c1SBahubali B Gumaji 
53*b38f99c1SBahubali B Gumaji static inline void ksmbd_counter_inc_reqs(unsigned int cmd)
54*b38f99c1SBahubali B Gumaji {
55*b38f99c1SBahubali B Gumaji 	if (cmd < KSMBD_COUNTER_MAX_REQS)
56*b38f99c1SBahubali B Gumaji 		percpu_counter_inc(&ksmbd_counters.counters[KSMBD_COUNTER_FIRST_REQ + cmd]);
57*b38f99c1SBahubali B Gumaji }
58*b38f99c1SBahubali B Gumaji 
59*b38f99c1SBahubali B Gumaji static inline s64 ksmbd_counter_sum(int type)
60*b38f99c1SBahubali B Gumaji {
61*b38f99c1SBahubali B Gumaji 	return percpu_counter_sum_positive(&ksmbd_counters.counters[type]);
62*b38f99c1SBahubali B Gumaji }
63*b38f99c1SBahubali B Gumaji #else
64*b38f99c1SBahubali B Gumaji 
65*b38f99c1SBahubali B Gumaji static inline void ksmbd_counter_inc(int type) {}
66*b38f99c1SBahubali B Gumaji static inline void ksmbd_counter_dec(int type) {}
67*b38f99c1SBahubali B Gumaji static inline void ksmbd_counter_add(int type, s64 value) {}
68*b38f99c1SBahubali B Gumaji static inline void ksmbd_counter_sub(int type, s64 value) {}
69*b38f99c1SBahubali B Gumaji static inline void ksmbd_counter_inc_reqs(unsigned int cmd) {}
70*b38f99c1SBahubali B Gumaji static inline s64 ksmbd_counter_sum(int type) { return 0; }
71*b38f99c1SBahubali B Gumaji #endif
72*b38f99c1SBahubali B Gumaji 
73*b38f99c1SBahubali B Gumaji #endif
74