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