> From: Seth Jennings [mailto:sjenning@xxxxxxxxxxxxxxxxxx] > Sent: Monday, August 22, 2011 1:31 PM > To: gregkh@xxxxxxx > Cc: ascardo@xxxxxxxxxxxxxx; Dan Magenheimer; sjenning@xxxxxxxxxxxxxxxxxx; rdunlap@xxxxxxxxxxxx; > devel@xxxxxxxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx > Subject: [PATCH v2] staging: zcache: fix possible sleep under lock > > zcache_new_pool() calls kmalloc() with GFP_KERNEL which has > __GFP_WAIT set. However, zcache_new_pool() gets called on > a stack that holds the swap_lock spinlock, leading to a > possible sleep-with-lock situation. The lock is obtained > in enable_swap_info(). > > The patch replaces GFP_KERNEL with GFP_ATOMIC. > > v2: replace with GFP_ATOMIC, not GFP_IOFS > > Signed-off-by: Seth Jennings <sjenning@xxxxxxxxxxxxxxxxxx> Acked-by: Dan Magenheimer <dan.magenheimer@xxxxxxxxxx> > --- > drivers/staging/zcache/zcache-main.c | 2 +- > 1 files changed, 1 insertions(+), 1 deletions(-) > > diff --git a/drivers/staging/zcache/zcache-main.c b/drivers/staging/zcache/zcache-main.c > index 855a5bb..cdf0128 100644 > --- a/drivers/staging/zcache/zcache-main.c > +++ b/drivers/staging/zcache/zcache-main.c > @@ -1668,7 +1668,7 @@ static int zcache_new_pool(uint16_t cli_id, uint32_t flags) > if (cli == NULL) > goto out; > atomic_inc(&cli->refcount); > - pool = kmalloc(sizeof(struct tmem_pool), GFP_KERNEL); > + pool = kmalloc(sizeof(struct tmem_pool), GFP_ATOMIC); > if (pool == NULL) { > pr_info("zcache: pool creation failed: out of memory\n"); > goto out; > -- > 1.7.4.1 > _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/devel