1/*
2 * Task I/O accounting operations
3 */
4#ifndef __TASK_IO_ACCOUNTING_OPS_INCLUDED
5#define __TASK_IO_ACCOUNTING_OPS_INCLUDED
6
7#include <linux/sched.h>
8
9#ifdef CONFIG_TASK_IO_ACCOUNTING
10static inline void task_io_account_read(size_t bytes)
11{
12	current->ioac.read_bytes += bytes;
13}
14
15/*
16 * We approximate number of blocks, because we account bytes only.
17 * A 'block' is 512 bytes
18 */
19static inline unsigned long task_io_get_inblock(const struct task_struct *p)
20{
21	return p->ioac.read_bytes >> 9;
22}
23
24static inline void task_io_account_write(size_t bytes)
25{
26	current->ioac.write_bytes += bytes;
27}
28
29/*
30 * We approximate number of blocks, because we account bytes only.
31 * A 'block' is 512 bytes
32 */
33static inline unsigned long task_io_get_oublock(const struct task_struct *p)
34{
35	return p->ioac.write_bytes >> 9;
36}
37
38static inline void task_io_account_cancelled_write(size_t bytes)
39{
40	current->ioac.cancelled_write_bytes += bytes;
41}
42
43static inline void task_io_accounting_init(struct task_struct *tsk)
44{
45	memset(&tsk->ioac, 0, sizeof(tsk->ioac));
46}
47
48#else
49
50static inline void task_io_account_read(size_t bytes)
51{
52}
53
54static inline unsigned long task_io_get_inblock(const struct task_struct *p)
55{
56	return 0;
57}
58
59static inline void task_io_account_write(size_t bytes)
60{
61}
62
63static inline unsigned long task_io_get_oublock(const struct task_struct *p)
64{
65	return 0;
66}
67
68static inline void task_io_account_cancelled_write(size_t bytes)
69{
70}
71
72static inline void task_io_accounting_init(struct task_struct *tsk)
73{
74}
75
76#endif		/* CONFIG_TASK_IO_ACCOUNTING */
77#endif		/* __TASK_IO_ACCOUNTING_OPS_INCLUDED */
78