block: prevent possible io_context->refcount overflow
authorNikanth Karthikesan <knikanth@novell.com>
Wed, 10 Jun 2009 19:57:06 +0000 (12:57 -0700)
committerJens Axboe <jens.axboe@oracle.com>
Wed, 10 Jun 2009 21:07:15 +0000 (23:07 +0200)
commitd9c7d394a8ebacb60097b192939ae9f15235225e
tree4fbf9c7677acb03c23d05faba1a4b0bcfb6702b4
parent1d589bb16b825b3a7b4edd34d997f1f1f953033d
block: prevent possible io_context->refcount overflow

Currently io_context has an atomic_t(32-bit) as refcount.  In the case of
cfq, for each device against whcih a task does I/O, a reference to the
io_context would be taken.  And when there are multiple process sharing
io_contexts(CLONE_IO) would also have a reference to the same io_context.

Theoretically the possible maximum number of processes sharing the same
io_context + the number of disks/cfq_data referring to the same io_context
can overflow the 32-bit counter on a very high-end machine.

Even though it is an improbable case, let us make it atomic_long_t.

Signed-off-by: Nikanth Karthikesan <knikanth@suse.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
block/blk-ioc.c
block/cfq-iosched.c
include/linux/iocontext.h