Thread (13 messages) 13 messages, 6 authors, 2020-03-16

Re: [PATCH v3 1/4] kernfs: kvmalloc xattr value instead of kmalloc

From: Andreas Dilger <hidden>
Date: 2020-03-12 21:09:27
Also in: linux-fsdevel, lkml

On Mar 12, 2020, at 2:03 PM, Daniel Xu [off-list ref] wrote:
xattr values have a 64k maximum size. This can result in an order 4
kmalloc request which can be difficult to fulfill. Since xattrs do not
need physically contiguous memory, we can switch to kvmalloc and not
have to worry about higher order allocations failing.

Signed-off-by: Daniel Xu <redacted>
Reviewed-by: Andreas Dilger <redacted>
quoted hunk ↗ jump to hunk
---
fs/xattr.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/fs/xattr.c b/fs/xattr.c
index 90dd78f0eb27..0d3c9b4d1914 100644
--- a/fs/xattr.c
+++ b/fs/xattr.c
@@ -817,7 +817,7 @@ struct simple_xattr *simple_xattr_alloc(const void *value, size_t size)
	if (len < sizeof(*new_xattr))
		return NULL;

-	new_xattr = kmalloc(len, GFP_KERNEL);
+	new_xattr = kvmalloc(len, GFP_KERNEL);
	if (!new_xattr)
		return NULL;
@@ -882,7 +882,7 @@ int simple_xattr_set(struct simple_xattrs *xattrs, const char *name,
		new_xattr->name = kstrdup(name, GFP_KERNEL);
		if (!new_xattr->name) {
-			kfree(new_xattr);
+			kvfree(new_xattr);
			return -ENOMEM;
		}
	}
@@ -912,7 +912,7 @@ int simple_xattr_set(struct simple_xattrs *xattrs, const char *name,
	spin_unlock(&xattrs->lock);
	if (xattr) {
		kfree(xattr->name);
-		kfree(xattr);
+		kvfree(xattr);
	}
	return err;

--
2.21.1

Cheers, Andreas




Attachments

Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help