[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 1/2] virtiofsd: Avoid process hang when doing xattr operation to
From: |
Misono Tomohiro |
Subject: |
[PATCH 1/2] virtiofsd: Avoid process hang when doing xattr operation to FIFO |
Date: |
Wed, 16 Oct 2019 19:37:53 +0900 |
I see xfstest generic/062 causes process hang because of xattr operation to
FIFO created by mknod. The problem is that virtiofsd opens any files
with only O_RDWR or O_RDONLY flags for xattr operation, and therefore
if a file is FIFO, open may not return.
Since O_NONBLOCK flag has no effect to regular files, add it to
open flags to fix the problem.
Signed-off-by: Misono Tomohiro <address@hidden>
---
contrib/virtiofsd/passthrough_ll.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/contrib/virtiofsd/passthrough_ll.c
b/contrib/virtiofsd/passthrough_ll.c
index 84b60d85bd..645324da58 100644
--- a/contrib/virtiofsd/passthrough_ll.c
+++ b/contrib/virtiofsd/passthrough_ll.c
@@ -2251,7 +2251,7 @@ static void lo_getxattr(fuse_req_t req, fuse_ino_t ino,
const char *name,
}
sprintf(procname, "%i", inode->fd);
- fd = openat(lo->proc_self_fd, procname, O_RDONLY);
+ fd = openat(lo->proc_self_fd, procname, O_RDONLY|O_NONBLOCK);
if (fd < 0) {
goto out_err;
}
@@ -2323,7 +2323,7 @@ static void lo_listxattr(fuse_req_t req, fuse_ino_t ino,
size_t size)
}
sprintf(procname, "%i", inode->fd);
- fd = openat(lo->proc_self_fd, procname, O_RDONLY);
+ fd = openat(lo->proc_self_fd, procname, O_RDONLY|O_NONBLOCK);
if (fd < 0) {
goto out_err;
}
@@ -2397,7 +2397,7 @@ static void lo_setxattr(fuse_req_t req, fuse_ino_t ino,
const char *name,
}
sprintf(procname, "%i", inode->fd);
- fd = openat(lo->proc_self_fd, procname, O_RDWR);
+ fd = openat(lo->proc_self_fd, procname, O_RDWR|O_NONBLOCK);
if (fd < 0) {
saverr = errno;
goto out;
@@ -2446,7 +2446,7 @@ static void lo_removexattr(fuse_req_t req, fuse_ino_t
ino, const char *name)
}
sprintf(procname, "%i", inode->fd);
- fd = openat(lo->proc_self_fd, procname, O_RDWR);
+ fd = openat(lo->proc_self_fd, procname, O_RDWR|O_NONBLOCK);
if (fd < 0) {
saverr = errno;
goto out;
--
2.21.0
- [PATCH 0/2] virtiofsd: Two fix for xattr operation, Misono Tomohiro, 2019/10/16
- [PATCH 2/2] virtiofsd: Allow setxattr operation to directry, Misono Tomohiro, 2019/10/16
- [PATCH 1/2] virtiofsd: Avoid process hang when doing xattr operation to FIFO,
Misono Tomohiro <=
- Re: [Virtio-fs] [PATCH 0/2] virtiofsd: Two fix for xattr operation, Stefan Hajnoczi, 2019/10/17
- Re: [Virtio-fs] [PATCH 0/2] virtiofsd: Two fix for xattr operation, Miklos Szeredi, 2019/10/17
- Re: [Virtio-fs] [PATCH 0/2] virtiofsd: Two fix for xattr operation, Stefan Hajnoczi, 2019/10/17
- Re: [Virtio-fs] [PATCH 0/2] virtiofsd: Two fix for xattr operation, Miklos Szeredi, 2019/10/17
- Re: [Virtio-fs] [PATCH 0/2] virtiofsd: Two fix for xattr operation, Miklos Szeredi, 2019/10/18
- Re: [Virtio-fs] [PATCH 0/2] virtiofsd: Two fix for xattr operation, Stefan Hajnoczi, 2019/10/18
- RE: [Virtio-fs] [PATCH 0/2] virtiofsd: Two fix for xattr operation, address@hidden, 2019/10/18