blob: 1b505c804af3421abbb56582e6ad64e02477b836 [file] [log] [blame]
Andrew Morton7c3ab732006-12-10 02:19:19 -08001/*
2 * Task I/O accounting operations
3 */
4#ifndef __TASK_IO_ACCOUNTING_OPS_INCLUDED
5#define __TASK_IO_ACCOUNTING_OPS_INCLUDED
6
Alexey Dobriyane8edc6e2007-05-21 01:22:52 +04007#include <linux/sched.h>
8
Andrew Morton7c3ab732006-12-10 02:19:19 -08009#ifdef CONFIG_TASK_IO_ACCOUNTING
10static inline void task_io_account_read(size_t bytes)
11{
Andrea Righi940389b2008-07-28 00:48:12 +020012 current->ioac.read_bytes += bytes;
Andrew Morton7c3ab732006-12-10 02:19:19 -080013}
14
Eric Dumazet6eaeeab2007-05-10 22:22:37 -070015/*
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{
Andrea Righi940389b2008-07-28 00:48:12 +020021 return p->ioac.read_bytes >> 9;
Eric Dumazet6eaeeab2007-05-10 22:22:37 -070022}
23
Andrew Morton7c3ab732006-12-10 02:19:19 -080024static inline void task_io_account_write(size_t bytes)
25{
Andrea Righi940389b2008-07-28 00:48:12 +020026 current->ioac.write_bytes += bytes;
Andrew Morton7c3ab732006-12-10 02:19:19 -080027}
28
Eric Dumazet6eaeeab2007-05-10 22:22:37 -070029/*
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{
Andrea Righi940389b2008-07-28 00:48:12 +020035 return p->ioac.write_bytes >> 9;
Eric Dumazet6eaeeab2007-05-10 22:22:37 -070036}
37
Andrew Morton7c3ab732006-12-10 02:19:19 -080038static inline void task_io_account_cancelled_write(size_t bytes)
39{
Andrea Righi940389b2008-07-28 00:48:12 +020040 current->ioac.cancelled_write_bytes += bytes;
Andrew Morton7c3ab732006-12-10 02:19:19 -080041}
42
Andrea Righi940389b2008-07-28 00:48:12 +020043static inline void task_io_accounting_init(struct task_io_accounting *ioac)
Andrew Morton7c3ab732006-12-10 02:19:19 -080044{
Andrea Righi59954772008-07-27 17:29:15 +020045 memset(ioac, 0, sizeof(*ioac));
46}
47
Andrea Righi940389b2008-07-28 00:48:12 +020048static inline void task_blk_io_accounting_add(struct task_io_accounting *dst,
49 struct task_io_accounting *src)
Andrea Righi59954772008-07-27 17:29:15 +020050{
Andrea Righi940389b2008-07-28 00:48:12 +020051 dst->read_bytes += src->read_bytes;
52 dst->write_bytes += src->write_bytes;
53 dst->cancelled_write_bytes += src->cancelled_write_bytes;
Andrew Morton7c3ab732006-12-10 02:19:19 -080054}
55
56#else
57
58static inline void task_io_account_read(size_t bytes)
59{
60}
61
Eric Dumazet6eaeeab2007-05-10 22:22:37 -070062static inline unsigned long task_io_get_inblock(const struct task_struct *p)
63{
64 return 0;
65}
66
Andrew Morton7c3ab732006-12-10 02:19:19 -080067static inline void task_io_account_write(size_t bytes)
68{
69}
70
Eric Dumazet6eaeeab2007-05-10 22:22:37 -070071static inline unsigned long task_io_get_oublock(const struct task_struct *p)
72{
73 return 0;
74}
75
Andrew Morton7c3ab732006-12-10 02:19:19 -080076static inline void task_io_account_cancelled_write(size_t bytes)
77{
78}
79
Andrea Righi940389b2008-07-28 00:48:12 +020080static inline void task_io_accounting_init(struct task_io_accounting *ioac)
Andrew Morton7c3ab732006-12-10 02:19:19 -080081{
82}
83
Andrea Righi940389b2008-07-28 00:48:12 +020084static inline void task_blk_io_accounting_add(struct task_io_accounting *dst,
85 struct task_io_accounting *src)
Andrea Righi59954772008-07-27 17:29:15 +020086{
87}
88
89#endif /* CONFIG_TASK_IO_ACCOUNTING */
90
91#ifdef CONFIG_TASK_XACCT
Andrea Righi940389b2008-07-28 00:48:12 +020092static inline void task_chr_io_accounting_add(struct task_io_accounting *dst,
93 struct task_io_accounting *src)
Andrea Righi59954772008-07-27 17:29:15 +020094{
Andrea Righi940389b2008-07-28 00:48:12 +020095 dst->rchar += src->rchar;
96 dst->wchar += src->wchar;
97 dst->syscr += src->syscr;
98 dst->syscw += src->syscw;
Jin Qiane61abd82017-03-02 13:32:59 -080099 dst->syscfs += src->syscfs;
Andrea Righi59954772008-07-27 17:29:15 +0200100}
101#else
Andrea Righi940389b2008-07-28 00:48:12 +0200102static inline void task_chr_io_accounting_add(struct task_io_accounting *dst,
103 struct task_io_accounting *src)
Andrea Righi59954772008-07-27 17:29:15 +0200104{
105}
106#endif /* CONFIG_TASK_XACCT */
107
Andrea Righi940389b2008-07-28 00:48:12 +0200108static inline void task_io_accounting_add(struct task_io_accounting *dst,
109 struct task_io_accounting *src)
Andrea Righi59954772008-07-27 17:29:15 +0200110{
111 task_chr_io_accounting_add(dst, src);
112 task_blk_io_accounting_add(dst, src);
113}
114#endif /* __TASK_IO_ACCOUNTING_OPS_INCLUDED */