virtiofsd: passthrough_ll: cleanup getxattr/listxattr

This is a cleanup patch to simplify the following xattr fix and
there is no functional changes.

- Move memory allocation to head of the function
- Unify fgetxattr/flistxattr call for both size == 0 and
  size != 0 case
- Remove redundant lo_inode_put call in error path
  (Note: second call is ignored now since @inode is already NULL)

Signed-off-by: Misono Tomohiro <misono.tomohiro@jp.fujitsu.com>
Message-Id: <20200227055927.24566-2-misono.tomohiro@jp.fujitsu.com>
Acked-by: Vivek Goyal <vgoyal@redhat.com>
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
This commit is contained in:
Misono Tomohiro 2020-02-27 14:59:26 +09:00 committed by Dr. David Alan Gilbert
parent 104933c4a9
commit 16e15a7308
1 changed files with 22 additions and 32 deletions

View File

@ -2195,34 +2195,30 @@ static void lo_getxattr(fuse_req_t req, fuse_ino_t ino, const char *name,
goto out;
}
if (size) {
value = malloc(size);
if (!value) {
goto out_err;
}
}
sprintf(procname, "%i", inode->fd);
fd = openat(lo->proc_self_fd, procname, O_RDONLY);
if (fd < 0) {
goto out_err;
}
ret = fgetxattr(fd, name, value, size);
if (ret == -1) {
goto out_err;
}
if (size) {
value = malloc(size);
if (!value) {
goto out_err;
}
ret = fgetxattr(fd, name, value, size);
if (ret == -1) {
goto out_err;
}
saverr = 0;
if (ret == 0) {
goto out;
}
fuse_reply_buf(req, value, ret);
} else {
ret = fgetxattr(fd, name, NULL, 0);
if (ret == -1) {
goto out_err;
}
fuse_reply_xattr(req, ret);
}
out_free:
@ -2238,7 +2234,6 @@ out_free:
out_err:
saverr = errno;
out:
lo_inode_put(lo, &inode);
fuse_reply_err(req, saverr);
goto out_free;
}
@ -2273,34 +2268,30 @@ static void lo_listxattr(fuse_req_t req, fuse_ino_t ino, size_t size)
goto out;
}
if (size) {
value = malloc(size);
if (!value) {
goto out_err;
}
}
sprintf(procname, "%i", inode->fd);
fd = openat(lo->proc_self_fd, procname, O_RDONLY);
if (fd < 0) {
goto out_err;
}
ret = flistxattr(fd, value, size);
if (ret == -1) {
goto out_err;
}
if (size) {
value = malloc(size);
if (!value) {
goto out_err;
}
ret = flistxattr(fd, value, size);
if (ret == -1) {
goto out_err;
}
saverr = 0;
if (ret == 0) {
goto out;
}
fuse_reply_buf(req, value, ret);
} else {
ret = flistxattr(fd, NULL, 0);
if (ret == -1) {
goto out_err;
}
fuse_reply_xattr(req, ret);
}
out_free:
@ -2316,7 +2307,6 @@ out_free:
out_err:
saverr = errno;
out:
lo_inode_put(lo, &inode);
fuse_reply_err(req, saverr);
goto out_free;
}