]> git.baikalelectronics.ru Git - kernel.git/commitdiff
dm ioctl: remove PF_MEMALLOC
authorMikulas Patocka <mpatocka@redhat.com>
Fri, 21 Dec 2012 20:23:36 +0000 (20:23 +0000)
committerAlasdair G Kergon <agk@redhat.com>
Fri, 21 Dec 2012 20:23:36 +0000 (20:23 +0000)
When allocating memory for the userspace ioctl data, set some
appropriate GPF flags directly instead of using PF_MEMALLOC.

Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
Signed-off-by: Alasdair G Kergon <agk@redhat.com>
drivers/md/dm-ioctl.c
include/uapi/linux/dm-ioctl.h

index a651d528f80d14d5a27bd5a563686a1567897eef..a37aeba7dc1b02d924afb081d3feb4d16dc09e5d 100644 (file)
@@ -1556,7 +1556,10 @@ static int copy_params(struct dm_ioctl __user *user, struct dm_ioctl **param)
 
        secure_data = tmp.flags & DM_SECURE_DATA_FLAG;
 
-       dmi = vmalloc(tmp.data_size);
+       /*
+        * Try to avoid low memory issues when a device is suspended.
+        */
+       dmi = __vmalloc(tmp.data_size, GFP_NOIO | __GFP_REPEAT | __GFP_HIGH, PAGE_KERNEL);
        if (!dmi) {
                if (secure_data && clear_user(user, tmp.data_size))
                        return -EFAULT;
@@ -1656,19 +1659,11 @@ static int ctl_ioctl(uint command, struct dm_ioctl __user *user)
                return -ENOTTY;
        }
 
-       /*
-        * Trying to avoid low memory issues when a device is
-        * suspended.
-        */
-       current->flags |= PF_MEMALLOC;
-
        /*
         * Copy the parameters into kernel space.
         */
        r = copy_params(user, &param);
 
-       current->flags &= ~PF_MEMALLOC;
-
        if (r)
                return r;
 
index 91e3a360f61103451986008553dd91567e68fe13..539b179b349ca02953c74cf52ffb597fe6f1ff23 100644 (file)
@@ -268,8 +268,8 @@ enum {
 
 #define DM_VERSION_MAJOR       4
 #define DM_VERSION_MINOR       23
-#define DM_VERSION_PATCHLEVEL  0
-#define DM_VERSION_EXTRA       "-ioctl (2012-07-25)"
+#define DM_VERSION_PATCHLEVEL  1
+#define DM_VERSION_EXTRA       "-ioctl (2012-12-18)"
 
 /* Status bits */
 #define DM_READONLY_FLAG       (1 << 0) /* In/Out */