block: prevent possible io_context->refcount overflow
[linux-2.6.git] / include / linux / iocontext.h
index 08b987b..dd05434 100644 (file)
@@ -64,7 +64,7 @@ struct cfq_io_context {
  * and kmalloc'ed. These could be shared between processes.
  */
 struct io_context {
-       atomic_t refcount;
+       atomic_long_t refcount;
        atomic_t nr_tasks;
 
        /* all the fields below are protected by this lock */
@@ -91,8 +91,8 @@ static inline struct io_context *ioc_task_link(struct io_context *ioc)
         * if ref count is zero, don't allow sharing (ioc is going away, it's
         * a race).
         */
-       if (ioc && atomic_inc_not_zero(&ioc->refcount)) {
-               atomic_inc(&ioc->nr_tasks);
+       if (ioc && atomic_long_inc_not_zero(&ioc->refcount)) {
+               atomic_long_inc(&ioc->refcount);
                return ioc;
        }