acct: encode_comp_t(0) is 0, fortunately...
authorAl Viro <viro@zeniv.linux.org.uk>
Sat, 19 Apr 2014 18:44:49 +0000 (14:44 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Thu, 7 Aug 2014 18:40:07 +0000 (14:40 -0400)
commitecfdb33d1fbc7e6e095ba24dac2930208494e734
tree3e650fbb7ccc290fc4094dd420cdef3ddd966c9c
parent82df9c8bebeff610705f30315f3903cbcb3aa58b
acct: encode_comp_t(0) is 0, fortunately...

There was an amusing bogosity in ac_rw calculation - it tried to
do encode_comp_t(encode_comp_t(0) / 1024).  Seeing that comp_t is
a 3-bit exponent + 13-bit mantissa... it's a good thing that 0 is
represented by all-bits-clear.

The history of that one is interesting - it was introduced in
2.1.68pre1, when acct.c had been reworked and moved to separate
file.  Two months later (2.1.86) somebody has noticed that the
sucker won't compile - there was no task_struct::io_usage.
At which point the ac_io calculation had changed from
encode_comp_t(current->io_usage) to encode_comp_t(0) and the
bug in the next line (absolutely real back then, had it ever
managed to compile) become a harmless bogosity.  Looks like
nobody has ever noticed until now.

Anyway, let's bury that idiocy now that it got noticed.  17 years
is long enough...

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
kernel/acct.c