Merge tag 'for-v4.12-2' of git://git.kernel.org/pub/scm/linux/kernel/git/sre/linux...
[sfrench/cifs-2.6.git] / fs / xattr.c
index 7e3317cf4045523a7d0b17f102d51775808a8950..464c94bf65f9e55339ec9d4bc515ec990691deb7 100644 (file)
@@ -431,12 +431,9 @@ setxattr(struct dentry *d, const char __user *name, const void __user *value,
        if (size) {
                if (size > XATTR_SIZE_MAX)
                        return -E2BIG;
-               kvalue = kmalloc(size, GFP_KERNEL | __GFP_NOWARN);
-               if (!kvalue) {
-                       kvalue = vmalloc(size);
-                       if (!kvalue)
-                               return -ENOMEM;
-               }
+               kvalue = kvmalloc(size, GFP_KERNEL);
+               if (!kvalue)
+                       return -ENOMEM;
                if (copy_from_user(kvalue, value, size)) {
                        error = -EFAULT;
                        goto out;
@@ -528,12 +525,9 @@ getxattr(struct dentry *d, const char __user *name, void __user *value,
        if (size) {
                if (size > XATTR_SIZE_MAX)
                        size = XATTR_SIZE_MAX;
-               kvalue = kzalloc(size, GFP_KERNEL | __GFP_NOWARN);
-               if (!kvalue) {
-                       kvalue = vmalloc(size);
-                       if (!kvalue)
-                               return -ENOMEM;
-               }
+               kvalue = kvzalloc(size, GFP_KERNEL);
+               if (!kvalue)
+                       return -ENOMEM;
        }
 
        error = vfs_getxattr(d, kname, kvalue, size);
@@ -611,12 +605,9 @@ listxattr(struct dentry *d, char __user *list, size_t size)
        if (size) {
                if (size > XATTR_LIST_MAX)
                        size = XATTR_LIST_MAX;
-               klist = kmalloc(size, __GFP_NOWARN | GFP_KERNEL);
-               if (!klist) {
-                       klist = vmalloc(size);
-                       if (!klist)
-                               return -ENOMEM;
-               }
+               klist = kvmalloc(size, GFP_KERNEL);
+               if (!klist)
+                       return -ENOMEM;
        }
 
        error = vfs_listxattr(d, klist, size);