On 01/28/2013 08:16 AM, Pekka Enberg wrote: > On Mon, Jan 28, 2013 at 2:38 AM, Minchan Kim <minc...@kernel.org> wrote: >> Now zram allocates new page with GFP_KERNEL in zram I/O path >> if IO is partial. Unfortunately, It may cuase deadlock with > > s/cuase/cause/g > >> reclaim path so this patch solves the problem. > > It'd be nice to know about the problem in more detail. I'm also > curious on why you decided on GFP_ATOMIC for the read path and > GFP_NOIO in the write path.
This is because we're holding a kmap_atomic page in the read path. Jerome > >> >> Cc: sta...@vger.kernel.org >> Cc: Jerome Marchand <jmarc...@redhat.com> >> Acked-by: Nitin Gupta <ngu...@vflare.org> >> Signed-off-by: Minchan Kim <minc...@kernel.org> >> --- >> drivers/staging/zram/zram_drv.c | 4 ++-- >> 1 file changed, 2 insertions(+), 2 deletions(-) >> >> diff --git a/drivers/staging/zram/zram_drv.c >> b/drivers/staging/zram/zram_drv.c >> index 61fb8f1..b285b3a 100644 >> --- a/drivers/staging/zram/zram_drv.c >> +++ b/drivers/staging/zram/zram_drv.c >> @@ -220,7 +220,7 @@ static int zram_bvec_read(struct zram *zram, struct >> bio_vec *bvec, >> user_mem = kmap_atomic(page); >> if (is_partial_io(bvec)) >> /* Use a temporary buffer to decompress the page */ >> - uncmem = kmalloc(PAGE_SIZE, GFP_KERNEL); >> + uncmem = kmalloc(PAGE_SIZE, GFP_ATOMIC); >> else >> uncmem = user_mem; >> >> @@ -268,7 +268,7 @@ static int zram_bvec_write(struct zram *zram, struct >> bio_vec *bvec, u32 index, >> * This is a partial IO. We need to read the full page >> * before to write the changes. >> */ >> - uncmem = kmalloc(PAGE_SIZE, GFP_KERNEL); >> + uncmem = kmalloc(PAGE_SIZE, GFP_NOIO); >> if (!uncmem) { >> pr_info("Error allocating temp memory!\n"); >> ret = -ENOMEM; >> -- >> 1.7.9.5 >> >> -- >> To unsubscribe, send a message with 'unsubscribe linux-mm' in >> the body to majord...@kvack.org. For more info on Linux MM, >> see: http://www.linux-mm.org/ . >> Don't email: <a href=mailto:"d...@kvack.org"> em...@kvack.org </a> -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/