I am not sure why do we still need this logic. mmap() needs file to be opened for O_RDONLY atleast. And we open file either as O_RDONLY or O_RDWR in lo_setupmapping() depending on if read-only or read-write mapping is required.
So it should not matter how fd is opended during lo_create() or lo_open() because we are not going to use that fd anyway for mmap(). So for now drop this logic. I ran pjdfstests and blogbench and both ran successfully. Signed-off-by: Vivek Goyal <[email protected]> --- contrib/virtiofsd/passthrough_ll.c | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/contrib/virtiofsd/passthrough_ll.c b/contrib/virtiofsd/passthrough_ll.c index c09c46a7e5..502ce50178 100644 --- a/contrib/virtiofsd/passthrough_ll.c +++ b/contrib/virtiofsd/passthrough_ll.c @@ -1513,12 +1513,6 @@ static void lo_create(fuse_req_t req, fuse_ino_t parent, const char *name, if (err) goto out; - /* Promote O_WRONLY to O_RDWR. Otherwise later mmap(PROT_WRITE) fails */ - if ((fi->flags & O_ACCMODE) == O_WRONLY) { - fi->flags &= ~O_ACCMODE; - fi->flags |= O_RDWR; - } - fd = openat(lo_fd(req, parent), name, (fi->flags | O_CREAT) & ~O_NOFOLLOW, mode); err = fd == -1 ? errno : 0; @@ -1710,12 +1704,6 @@ static void lo_open(fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi) fuse_debug("lo_open(ino=%" PRIu64 ", flags=%d)\n", ino, fi->flags); - /* Promote O_WRONLY to O_RDWR. Otherwise later mmap(PROT_WRITE) fails */ - if ((fi->flags & O_ACCMODE) == O_WRONLY) { - fi->flags &= ~O_ACCMODE; - fi->flags |= O_RDWR; - } - /* With writeback cache, kernel may send read requests even when userspace opened write-only */ if (lo->writeback && (fi->flags & O_ACCMODE) == O_WRONLY) { -- 2.17.2
