diff options
author | Miklos Szeredi <mszeredi@redhat.com> | 2020-09-02 10:58:48 +0200 |
---|---|---|
committer | Miklos Szeredi <mszeredi@redhat.com> | 2020-09-02 10:58:48 +0200 |
commit | de7a52c9c60b4763f43f862bb60f657f7fa1cfcc (patch) | |
tree | 1d1fac9f37bbbed1b9a240dda73fd1a246ea3302 /fs/overlayfs | |
parent | fee0f2980a2e89f9929ae0355464064cdc47e8f0 (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.c | 32 |
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; } |