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