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