[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[dm-devel] [PATCH] dm: avoid a possible __vmalloc deadlock



dm: avoid a possible __vmalloc deadlock

__vmalloc doesn't fully respect gfp flags (see commit
502624bdad3dba45dfaacaf36b7d83e39e74b2d2) for explanation.

So we need to set noio flag with memalloc_noio_save().

This should be backported to stable kernels 3.8 and newer. The kernel 3.8
doesn't have memalloc_noio_save(), so we should set and restore process
flag PF_MEMALLOC instead.

Signed-off-by: Mikulas Patocka <mpatocka redhat com>
Cc: stable kernel org

---
 drivers/md/dm-ioctl.c |    3 +++
 1 file changed, 3 insertions(+)

Index: linux-3.9.4-fast/drivers/md/dm-ioctl.c
===================================================================
--- linux-3.9.4-fast.orig/drivers/md/dm-ioctl.c	2013-06-07 15:28:59.000000000 +0200
+++ linux-3.9.4-fast/drivers/md/dm-ioctl.c	2013-06-07 15:29:46.000000000 +0200
@@ -1686,7 +1686,10 @@ static int copy_params(struct dm_ioctl _
 	}
 
 	if (!dmi) {
+		unsigned noio_flag;
+		noio_flag = memalloc_noio_save();
 		dmi = __vmalloc(param_kernel->data_size, GFP_NOIO | __GFP_REPEAT | __GFP_HIGH, PAGE_KERNEL);
+		memalloc_noio_restore(noio_flag);
 		if (dmi)
 			*param_flags |= DM_PARAMS_VMALLOC;
 	}



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]