| /* |
| * Task I/O accounting operations |
| */ |
| #ifndef __TASK_IO_ACCOUNTING_OPS_INCLUDED |
| #define __TASK_IO_ACCOUNTING_OPS_INCLUDED |
| |
| #ifdef CONFIG_TASK_IO_ACCOUNTING |
| static inline void task_io_account_read(size_t bytes) |
| { |
| current->ioac.read_bytes += bytes; |
| } |
| |
| /* |
| * We approximate number of blocks, because we account bytes only. |
| * A 'block' is 512 bytes |
| */ |
| static inline unsigned long task_io_get_inblock(const struct task_struct *p) |
| { |
| return p->ioac.read_bytes >> 9; |
| } |
| |
| static inline void task_io_account_write(size_t bytes) |
| { |
| current->ioac.write_bytes += bytes; |
| } |
| |
| /* |
| * We approximate number of blocks, because we account bytes only. |
| * A 'block' is 512 bytes |
| */ |
| static inline unsigned long task_io_get_oublock(const struct task_struct *p) |
| { |
| return p->ioac.write_bytes >> 9; |
| } |
| |
| static inline void task_io_account_cancelled_write(size_t bytes) |
| { |
| current->ioac.cancelled_write_bytes += bytes; |
| } |
| |
| static inline void task_io_accounting_init(struct task_struct *tsk) |
| { |
| memset(&tsk->ioac, 0, sizeof(tsk->ioac)); |
| } |
| |
| #else |
| |
| static inline void task_io_account_read(size_t bytes) |
| { |
| } |
| |
| static inline unsigned long task_io_get_inblock(const struct task_struct *p) |
| { |
| return 0; |
| } |
| |
| static inline void task_io_account_write(size_t bytes) |
| { |
| } |
| |
| static inline unsigned long task_io_get_oublock(const struct task_struct *p) |
| { |
| return 0; |
| } |
| |
| static inline void task_io_account_cancelled_write(size_t bytes) |
| { |
| } |
| |
| static inline void task_io_accounting_init(struct task_struct *tsk) |
| { |
| } |
| |
| #endif /* CONFIG_TASK_IO_ACCOUNTING */ |
| #endif /* __TASK_IO_ACCOUNTING_OPS_INCLUDED */ |