linux/include/linux/task_io_accounting_ops.h
<<
>>
Prefs
   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
  11static inline void task_io_account_read(size_t bytes)
  12{
  13        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 */
  20static inline unsigned long task_io_get_inblock(const struct task_struct *p)
  21{
  22        return p->ioac.read_bytes >> 9;
  23}
  24
  25static inline void task_io_account_write(size_t bytes)
  26{
  27        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 */
  34static inline unsigned long task_io_get_oublock(const struct task_struct *p)
  35{
  36        return p->ioac.write_bytes >> 9;
  37}
  38
  39static inline void task_io_account_cancelled_write(size_t bytes)
  40{
  41        current->ioac.cancelled_write_bytes += bytes;
  42}
  43
  44static inline void task_io_accounting_init(struct task_io_accounting *ioac)
  45{
  46        memset(ioac, 0, sizeof(*ioac));
  47}
  48
  49static inline void task_blk_io_accounting_add(struct task_io_accounting *dst,
  50                                                struct task_io_accounting *src)
  51{
  52        dst->read_bytes += src->read_bytes;
  53        dst->write_bytes += src->write_bytes;
  54        dst->cancelled_write_bytes += src->cancelled_write_bytes;
  55}
  56
  57#else
  58
  59static inline void task_io_account_read(size_t bytes)
  60{
  61}
  62
  63static inline unsigned long task_io_get_inblock(const struct task_struct *p)
  64{
  65        return 0;
  66}
  67
  68static inline void task_io_account_write(size_t bytes)
  69{
  70}
  71
  72static inline unsigned long task_io_get_oublock(const struct task_struct *p)
  73{
  74        return 0;
  75}
  76
  77static inline void task_io_account_cancelled_write(size_t bytes)
  78{
  79}
  80
  81static inline void task_io_accounting_init(struct task_io_accounting *ioac)
  82{
  83}
  84
  85static 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
  93static inline void task_chr_io_accounting_add(struct task_io_accounting *dst,
  94                                                struct task_io_accounting *src)
  95{
  96        dst->rchar += src->rchar;
  97        dst->wchar += src->wchar;
  98        dst->syscr += src->syscr;
  99        dst->syscw += src->syscw;
 100}
 101#else
 102static 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
 108static inline void task_io_accounting_add(struct task_io_accounting *dst,
 109                                                struct task_io_accounting *src)
 110{
 111        task_chr_io_accounting_add(dst, src);
 112        task_blk_io_accounting_add(dst, src);
 113}
 114#endif /* __TASK_IO_ACCOUNTING_OPS_INCLUDED */
 115