diff options
author | Andrea Righi <righi.andrea@gmail.com> | 2008-07-27 11:29:15 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-07-27 12:58:20 -0400 |
commit | 5995477ab7f3522c497c9c4a1c55373e9d655574 (patch) | |
tree | a147fb61642a7ac5441855964eb97a2ff1e37202 /kernel/exit.c | |
parent | 605ccb73f6a1c891a16268b3a2923208fc637958 (diff) |
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 'kernel/exit.c')
-rw-r--r-- | kernel/exit.c | 30 |
1 files changed, 3 insertions, 27 deletions
diff --git a/kernel/exit.c b/kernel/exit.c index 0caf590548a0..eb4d6470d1d0 100644 --- a/kernel/exit.c +++ b/kernel/exit.c | |||
@@ -121,18 +121,7 @@ static void __exit_signal(struct task_struct *tsk) | |||
121 | sig->nivcsw += tsk->nivcsw; | 121 | sig->nivcsw += tsk->nivcsw; |
122 | sig->inblock += task_io_get_inblock(tsk); | 122 | sig->inblock += task_io_get_inblock(tsk); |
123 | sig->oublock += task_io_get_oublock(tsk); | 123 | sig->oublock += task_io_get_oublock(tsk); |
124 | #ifdef CONFIG_TASK_XACCT | 124 | task_io_accounting_add(&sig->ioac, &tsk->ioac); |
125 | sig->rchar += tsk->rchar; | ||
126 | sig->wchar += tsk->wchar; | ||
127 | sig->syscr += tsk->syscr; | ||
128 | sig->syscw += tsk->syscw; | ||
129 | #endif /* CONFIG_TASK_XACCT */ | ||
130 | #ifdef CONFIG_TASK_IO_ACCOUNTING | ||
131 | sig->ioac.read_bytes += tsk->ioac.read_bytes; | ||
132 | sig->ioac.write_bytes += tsk->ioac.write_bytes; | ||
133 | sig->ioac.cancelled_write_bytes += | ||
134 | tsk->ioac.cancelled_write_bytes; | ||
135 | #endif /* CONFIG_TASK_IO_ACCOUNTING */ | ||
136 | sig->sum_sched_runtime += tsk->se.sum_exec_runtime; | 125 | sig->sum_sched_runtime += tsk->se.sum_exec_runtime; |
137 | sig = NULL; /* Marker for below. */ | 126 | sig = NULL; /* Marker for below. */ |
138 | } | 127 | } |
@@ -1363,21 +1352,8 @@ static int wait_task_zombie(struct task_struct *p, int options, | |||
1363 | psig->coublock += | 1352 | psig->coublock += |
1364 | task_io_get_oublock(p) + | 1353 | task_io_get_oublock(p) + |
1365 | sig->oublock + sig->coublock; | 1354 | sig->oublock + sig->coublock; |
1366 | #ifdef CONFIG_TASK_XACCT | 1355 | task_io_accounting_add(&psig->ioac, &p->ioac); |
1367 | psig->rchar += p->rchar + sig->rchar; | 1356 | task_io_accounting_add(&psig->ioac, &sig->ioac); |
1368 | psig->wchar += p->wchar + sig->wchar; | ||
1369 | psig->syscr += p->syscr + sig->syscr; | ||
1370 | psig->syscw += p->syscw + sig->syscw; | ||
1371 | #endif /* CONFIG_TASK_XACCT */ | ||
1372 | #ifdef CONFIG_TASK_IO_ACCOUNTING | ||
1373 | psig->ioac.read_bytes += | ||
1374 | p->ioac.read_bytes + sig->ioac.read_bytes; | ||
1375 | psig->ioac.write_bytes += | ||
1376 | p->ioac.write_bytes + sig->ioac.write_bytes; | ||
1377 | psig->ioac.cancelled_write_bytes += | ||
1378 | p->ioac.cancelled_write_bytes + | ||
1379 | sig->ioac.cancelled_write_bytes; | ||
1380 | #endif /* CONFIG_TASK_IO_ACCOUNTING */ | ||
1381 | spin_unlock_irq(&p->parent->sighand->siglock); | 1357 | spin_unlock_irq(&p->parent->sighand->siglock); |
1382 | } | 1358 | } |
1383 | 1359 | ||