diff options
| author | Andrea Righi <righi.andrea@gmail.com> | 2008-07-27 17:29:15 +0200 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-07-27 09:58:20 -0700 | 
| commit | 5995477ab7f3522c497c9c4a1c55373e9d655574 (patch) | |
| tree | a147fb61642a7ac5441855964eb97a2ff1e37202 /include/linux/task_io_accounting_ops.h | |
| parent | 605ccb73f6a1c891a16268b3a2923208fc637958 (diff) | |
| download | olio-linux-3.10-5995477ab7f3522c497c9c4a1c55373e9d655574.tar.xz olio-linux-3.10-5995477ab7f3522c497c9c4a1c55373e9d655574.zip  | |
task IO accounting: improve code readability
Put all i/o statistics in struct proc_io_accounting and use inline functions to
initialize and increment statistics, removing a lot of single variable
assignments.
This also reduces the kernel size as following (with CONFIG_TASK_XACCT=y and
CONFIG_TASK_IO_ACCOUNTING=y).
    text    data     bss     dec     hex filename
   11651       0       0   11651    2d83 kernel/exit.o.before
   11619       0       0   11619    2d63 kernel/exit.o.after
   10886     132     136   11154    2b92 kernel/fork.o.before
   10758     132     136   11026    2b12 kernel/fork.o.after
 3082029  807968 4818600 8708597  84e1f5 vmlinux.o.before
 3081869  807968 4818600 8708437  84e155 vmlinux.o.after
Signed-off-by: Andrea Righi <righi.andrea@gmail.com>
Acked-by: Oleg Nesterov <oleg@tv-sign.ru>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'include/linux/task_io_accounting_ops.h')
| -rw-r--r-- | include/linux/task_io_accounting_ops.h | 56 | 
1 files changed, 46 insertions, 10 deletions
diff --git a/include/linux/task_io_accounting_ops.h b/include/linux/task_io_accounting_ops.h index ff46c6fad79..e6f958ebe97 100644 --- a/include/linux/task_io_accounting_ops.h +++ b/include/linux/task_io_accounting_ops.h @@ -9,7 +9,7 @@  #ifdef CONFIG_TASK_IO_ACCOUNTING  static inline void task_io_account_read(size_t bytes)  { -	current->ioac.read_bytes += bytes; +	current->ioac.blk.read_bytes += bytes;  }  /* @@ -18,12 +18,12 @@ static inline void task_io_account_read(size_t bytes)   */  static inline unsigned long task_io_get_inblock(const struct task_struct *p)  { -	return p->ioac.read_bytes >> 9; +	return p->ioac.blk.read_bytes >> 9;  }  static inline void task_io_account_write(size_t bytes)  { -	current->ioac.write_bytes += bytes; +	current->ioac.blk.write_bytes += bytes;  }  /* @@ -32,17 +32,25 @@ static inline void task_io_account_write(size_t bytes)   */  static inline unsigned long task_io_get_oublock(const struct task_struct *p)  { -	return p->ioac.write_bytes >> 9; +	return p->ioac.blk.write_bytes >> 9;  }  static inline void task_io_account_cancelled_write(size_t bytes)  { -	current->ioac.cancelled_write_bytes += bytes; +	current->ioac.blk.cancelled_write_bytes += bytes;  } -static inline void task_io_accounting_init(struct task_struct *tsk) +static inline void task_io_accounting_init(struct proc_io_accounting *ioac)  { -	memset(&tsk->ioac, 0, sizeof(tsk->ioac)); +	memset(ioac, 0, sizeof(*ioac)); +} + +static inline void task_blk_io_accounting_add(struct proc_io_accounting *dst, +						struct proc_io_accounting *src) +{ +	dst->blk.read_bytes += src->blk.read_bytes; +	dst->blk.write_bytes += src->blk.write_bytes; +	dst->blk.cancelled_write_bytes += src->blk.cancelled_write_bytes;  }  #else @@ -69,9 +77,37 @@ static inline void task_io_account_cancelled_write(size_t bytes)  {  } -static inline void task_io_accounting_init(struct task_struct *tsk) +static inline void task_io_accounting_init(struct proc_io_accounting *ioac) +{ +} + +static inline void task_blk_io_accounting_add(struct proc_io_accounting *dst, +						struct proc_io_accounting *src)  {  } -#endif		/* CONFIG_TASK_IO_ACCOUNTING */ -#endif		/* __TASK_IO_ACCOUNTING_OPS_INCLUDED */ +#endif /* CONFIG_TASK_IO_ACCOUNTING */ + +#ifdef CONFIG_TASK_XACCT +static inline void task_chr_io_accounting_add(struct proc_io_accounting *dst, +						struct proc_io_accounting *src) +{ +	dst->chr.rchar += src->chr.rchar; +	dst->chr.wchar += src->chr.wchar; +	dst->chr.syscr += src->chr.syscr; +	dst->chr.syscw += src->chr.syscw; +} +#else +static inline void task_chr_io_accounting_add(struct proc_io_accounting *dst, +						struct proc_io_accounting *src) +{ +} +#endif /* CONFIG_TASK_XACCT */ + +static inline void task_io_accounting_add(struct proc_io_accounting *dst, +						struct proc_io_accounting *src) +{ +	task_chr_io_accounting_add(dst, src); +	task_blk_io_accounting_add(dst, src); +} +#endif /* __TASK_IO_ACCOUNTING_OPS_INCLUDED */  |