xref: /OK3568_Linux_fs/kernel/include/linux/task_io_accounting_ops.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Task I/O accounting operations
4*4882a593Smuzhiyun  */
5*4882a593Smuzhiyun #ifndef __TASK_IO_ACCOUNTING_OPS_INCLUDED
6*4882a593Smuzhiyun #define __TASK_IO_ACCOUNTING_OPS_INCLUDED
7*4882a593Smuzhiyun 
8*4882a593Smuzhiyun #include <linux/sched.h>
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun #ifdef CONFIG_TASK_IO_ACCOUNTING
task_io_account_read(size_t bytes)11*4882a593Smuzhiyun static inline void task_io_account_read(size_t bytes)
12*4882a593Smuzhiyun {
13*4882a593Smuzhiyun 	current->ioac.read_bytes += bytes;
14*4882a593Smuzhiyun }
15*4882a593Smuzhiyun 
16*4882a593Smuzhiyun /*
17*4882a593Smuzhiyun  * We approximate number of blocks, because we account bytes only.
18*4882a593Smuzhiyun  * A 'block' is 512 bytes
19*4882a593Smuzhiyun  */
task_io_get_inblock(const struct task_struct * p)20*4882a593Smuzhiyun static inline unsigned long task_io_get_inblock(const struct task_struct *p)
21*4882a593Smuzhiyun {
22*4882a593Smuzhiyun 	return p->ioac.read_bytes >> 9;
23*4882a593Smuzhiyun }
24*4882a593Smuzhiyun 
task_io_account_write(size_t bytes)25*4882a593Smuzhiyun static inline void task_io_account_write(size_t bytes)
26*4882a593Smuzhiyun {
27*4882a593Smuzhiyun 	current->ioac.write_bytes += bytes;
28*4882a593Smuzhiyun }
29*4882a593Smuzhiyun 
30*4882a593Smuzhiyun /*
31*4882a593Smuzhiyun  * We approximate number of blocks, because we account bytes only.
32*4882a593Smuzhiyun  * A 'block' is 512 bytes
33*4882a593Smuzhiyun  */
task_io_get_oublock(const struct task_struct * p)34*4882a593Smuzhiyun static inline unsigned long task_io_get_oublock(const struct task_struct *p)
35*4882a593Smuzhiyun {
36*4882a593Smuzhiyun 	return p->ioac.write_bytes >> 9;
37*4882a593Smuzhiyun }
38*4882a593Smuzhiyun 
task_io_account_cancelled_write(size_t bytes)39*4882a593Smuzhiyun static inline void task_io_account_cancelled_write(size_t bytes)
40*4882a593Smuzhiyun {
41*4882a593Smuzhiyun 	current->ioac.cancelled_write_bytes += bytes;
42*4882a593Smuzhiyun }
43*4882a593Smuzhiyun 
task_io_accounting_init(struct task_io_accounting * ioac)44*4882a593Smuzhiyun static inline void task_io_accounting_init(struct task_io_accounting *ioac)
45*4882a593Smuzhiyun {
46*4882a593Smuzhiyun 	memset(ioac, 0, sizeof(*ioac));
47*4882a593Smuzhiyun }
48*4882a593Smuzhiyun 
task_blk_io_accounting_add(struct task_io_accounting * dst,struct task_io_accounting * src)49*4882a593Smuzhiyun static inline void task_blk_io_accounting_add(struct task_io_accounting *dst,
50*4882a593Smuzhiyun 						struct task_io_accounting *src)
51*4882a593Smuzhiyun {
52*4882a593Smuzhiyun 	dst->read_bytes += src->read_bytes;
53*4882a593Smuzhiyun 	dst->write_bytes += src->write_bytes;
54*4882a593Smuzhiyun 	dst->cancelled_write_bytes += src->cancelled_write_bytes;
55*4882a593Smuzhiyun }
56*4882a593Smuzhiyun 
57*4882a593Smuzhiyun #else
58*4882a593Smuzhiyun 
task_io_account_read(size_t bytes)59*4882a593Smuzhiyun static inline void task_io_account_read(size_t bytes)
60*4882a593Smuzhiyun {
61*4882a593Smuzhiyun }
62*4882a593Smuzhiyun 
task_io_get_inblock(const struct task_struct * p)63*4882a593Smuzhiyun static inline unsigned long task_io_get_inblock(const struct task_struct *p)
64*4882a593Smuzhiyun {
65*4882a593Smuzhiyun 	return 0;
66*4882a593Smuzhiyun }
67*4882a593Smuzhiyun 
task_io_account_write(size_t bytes)68*4882a593Smuzhiyun static inline void task_io_account_write(size_t bytes)
69*4882a593Smuzhiyun {
70*4882a593Smuzhiyun }
71*4882a593Smuzhiyun 
task_io_get_oublock(const struct task_struct * p)72*4882a593Smuzhiyun static inline unsigned long task_io_get_oublock(const struct task_struct *p)
73*4882a593Smuzhiyun {
74*4882a593Smuzhiyun 	return 0;
75*4882a593Smuzhiyun }
76*4882a593Smuzhiyun 
task_io_account_cancelled_write(size_t bytes)77*4882a593Smuzhiyun static inline void task_io_account_cancelled_write(size_t bytes)
78*4882a593Smuzhiyun {
79*4882a593Smuzhiyun }
80*4882a593Smuzhiyun 
task_io_accounting_init(struct task_io_accounting * ioac)81*4882a593Smuzhiyun static inline void task_io_accounting_init(struct task_io_accounting *ioac)
82*4882a593Smuzhiyun {
83*4882a593Smuzhiyun }
84*4882a593Smuzhiyun 
task_blk_io_accounting_add(struct task_io_accounting * dst,struct task_io_accounting * src)85*4882a593Smuzhiyun static inline void task_blk_io_accounting_add(struct task_io_accounting *dst,
86*4882a593Smuzhiyun 						struct task_io_accounting *src)
87*4882a593Smuzhiyun {
88*4882a593Smuzhiyun }
89*4882a593Smuzhiyun 
90*4882a593Smuzhiyun #endif /* CONFIG_TASK_IO_ACCOUNTING */
91*4882a593Smuzhiyun 
92*4882a593Smuzhiyun #ifdef CONFIG_TASK_XACCT
task_chr_io_accounting_add(struct task_io_accounting * dst,struct task_io_accounting * src)93*4882a593Smuzhiyun static inline void task_chr_io_accounting_add(struct task_io_accounting *dst,
94*4882a593Smuzhiyun 						struct task_io_accounting *src)
95*4882a593Smuzhiyun {
96*4882a593Smuzhiyun 	dst->rchar += src->rchar;
97*4882a593Smuzhiyun 	dst->wchar += src->wchar;
98*4882a593Smuzhiyun 	dst->syscr += src->syscr;
99*4882a593Smuzhiyun 	dst->syscw += src->syscw;
100*4882a593Smuzhiyun 	dst->syscfs += src->syscfs;
101*4882a593Smuzhiyun }
102*4882a593Smuzhiyun #else
task_chr_io_accounting_add(struct task_io_accounting * dst,struct task_io_accounting * src)103*4882a593Smuzhiyun static inline void task_chr_io_accounting_add(struct task_io_accounting *dst,
104*4882a593Smuzhiyun 						struct task_io_accounting *src)
105*4882a593Smuzhiyun {
106*4882a593Smuzhiyun }
107*4882a593Smuzhiyun #endif /* CONFIG_TASK_XACCT */
108*4882a593Smuzhiyun 
task_io_accounting_add(struct task_io_accounting * dst,struct task_io_accounting * src)109*4882a593Smuzhiyun static inline void task_io_accounting_add(struct task_io_accounting *dst,
110*4882a593Smuzhiyun 						struct task_io_accounting *src)
111*4882a593Smuzhiyun {
112*4882a593Smuzhiyun 	task_chr_io_accounting_add(dst, src);
113*4882a593Smuzhiyun 	task_blk_io_accounting_add(dst, src);
114*4882a593Smuzhiyun }
115*4882a593Smuzhiyun #endif /* __TASK_IO_ACCOUNTING_OPS_INCLUDED */
116