1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * task_io_accounting: a structure which is used for recording a single task's
4  * IO statistics.
5  *
6  * Don't include this header file directly - it is designed to be dragged in via
7  * sched.h.
8  *
9  * Blame Andrew Morton for all this.
10  */
11 
12 struct task_io_accounting {
13 #ifdef CONFIG_TASK_XACCT
14 	/* bytes read */
15 	u64 rchar;
16 	/*  bytes written */
17 	u64 wchar;
18 	/* # of read syscalls */
19 	u64 syscr;
20 	/* # of write syscalls */
21 	u64 syscw;
22 #endif /* CONFIG_TASK_XACCT */
23 
24 #ifdef CONFIG_TASK_IO_ACCOUNTING
25 	/*
26 	 * The number of bytes which this task has caused to be read from
27 	 * storage.
28 	 */
29 	u64 read_bytes;
30 
31 	/*
32 	 * The number of bytes which this task has caused, or shall cause to be
33 	 * written to disk.
34 	 */
35 	u64 write_bytes;
36 
37 	/*
38 	 * A task can cause "negative" IO too.  If this task truncates some
39 	 * dirty pagecache, some IO which another task has been accounted for
40 	 * (in its write_bytes) will not be happening.  We _could_ just
41 	 * subtract that from the truncating task's write_bytes, but there is
42 	 * information loss in doing that.
43 	 */
44 	u64 cancelled_write_bytes;
45 #endif /* CONFIG_TASK_IO_ACCOUNTING */
46 };
47