Messages in this thread | | | Date | Tue, 13 Mar 2012 08:49:45 -0700 | From | Tejun Heo <> | Subject | Re: [PATCH v2] block: fix ioc leak in put_io_context |
| |
On Tue, Mar 13, 2012 at 10:28:20AM -0400, Vivek Goyal wrote: > On Tue, Mar 13, 2012 at 01:21:06PM -0400, Xiaotian Feng wrote: > > diff --git a/block/blk-ioc.c b/block/blk-ioc.c > > index 8b782a6..9690f27 100644 > > --- a/block/blk-ioc.c > > +++ b/block/blk-ioc.c > > @@ -145,6 +145,7 @@ static void ioc_release_fn(struct work_struct *work) > > void put_io_context(struct io_context *ioc) > > { > > unsigned long flags; > > + bool free_ioc = false; > > > > if (ioc == NULL) > > return; > > @@ -159,8 +160,13 @@ void put_io_context(struct io_context *ioc) > > spin_lock_irqsave(&ioc->lock, flags); > > if (!hlist_empty(&ioc->icq_list)) > > schedule_work(&ioc->release_work); > > + else > > + free_ioc = true;
Calling kmem_cache_free() here directly is probably better.
> > spin_unlock_irqrestore(&ioc->lock, flags); > > } > > + > > + if (free_ioc) > > + kmem_cache_free(iocontext_cachep, ioc); > > } > > EXPORT_SYMBOL(put_io_context); > > This one looks good to me. Tejun? > > Acked-by: Vivek Goyal <vgoyal@redhat.com>
Acked-by: Tejun Heo <tj@kernel.org>
Thanks.
-- tejun
| |