summaryrefslogtreecommitdiff
path: root/fs/overlayfs
diff options
context:
space:
mode:
authorMiklos Szeredi <mszeredi@redhat.com>2020-09-02 10:58:48 +0200
committerMiklos Szeredi <mszeredi@redhat.com>2020-09-02 10:58:48 +0200
commitde7a52c9c60b4763f43f862bb60f657f7fa1cfcc (patch)
tree1d1fac9f37bbbed1b9a240dda73fd1a246ea3302 /fs/overlayfs
parentfee0f2980a2e89f9929ae0355464064cdc47e8f0 (diff)
ovl: clean up ovl_getxattr() in copy_up.c
Lose the padding and the failure message (in line with other parts of the copy up process). Return zero for both nonexistent or empty xattr. Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
Diffstat (limited to 'fs/overlayfs')
-rw-r--r--fs/overlayfs/copy_up.c32
1 files changed, 11 insertions, 21 deletions
diff --git a/fs/overlayfs/copy_up.c b/fs/overlayfs/copy_up.c
index 6a471da0284f..cf0b6406748d 100644
--- a/fs/overlayfs/copy_up.c
+++ b/fs/overlayfs/copy_up.c
@@ -784,36 +784,26 @@ static bool ovl_need_meta_copy_up(struct dentry *dentry, umode_t mode,
return true;
}
-static ssize_t ovl_getxattr(struct dentry *dentry, char *name, char **value,
- size_t padding)
+static ssize_t ovl_getxattr(struct dentry *dentry, char *name, char **value)
{
ssize_t res;
- char *buf = NULL;
+ char *buf;
res = vfs_getxattr(dentry, name, NULL, 0);
- if (res < 0) {
- if (res == -ENODATA || res == -EOPNOTSUPP)
- return -ENODATA;
- goto fail;
- }
+ if (res == -ENODATA || res == -EOPNOTSUPP)
+ res = 0;
- if (res != 0) {
- buf = kzalloc(res + padding, GFP_KERNEL);
+ if (res > 0) {
+ buf = kzalloc(res, GFP_KERNEL);
if (!buf)
return -ENOMEM;
res = vfs_getxattr(dentry, name, buf, res);
if (res < 0)
- goto fail;
+ kfree(buf);
+ else
+ *value = buf;
}
- *value = buf;
-
- return res;
-
-fail:
- pr_warn_ratelimited("failed to get xattr %s: err=%zi)\n",
- name, res);
- kfree(buf);
return res;
}
@@ -836,8 +826,8 @@ static int ovl_copy_up_meta_inode_data(struct ovl_copy_up_ctx *c)
if (c->stat.size) {
err = cap_size = ovl_getxattr(upperpath.dentry, XATTR_NAME_CAPS,
- &capability, 0);
- if (err < 0 && err != -ENODATA)
+ &capability);
+ if (cap_size < 0)
goto out;
}