[Devel] [PATCH RHEL9 COMMIT] fs: fuse: set FMODE_NOWAIT flag on vstorage files

Konstantin Khorenko khorenko at virtuozzo.com
Thu Nov 14 00:15:31 MSK 2024


The commit is pushed to "branch-rh9-5.14.0-427.37.1.vz9.78.x-ovz" and will appear at git at bitbucket.org:openvz/vzkernel.git
after rh9-5.14.0-427.37.1.vz9.78.3
------>
commit 28d0318fc15c216d8b9a804a811f781a6a2fc9cb
Author: Alexey Kuznetsov <kuznet at virtuozzo.com>
Date:   Fri Nov 8 00:03:54 2024 +0800

    fs: fuse: set FMODE_NOWAIT flag on vstorage files
    
    FMODE_NOWAIT is new kernel API added quite a while ago, but activated
    in the latest rhel updates. Earlier kernels had a bug,
    fses without associated bdev (like fuse or any other virtual
    file system) enforced this flag at top level. This bug
    has been fixed, FMODE_NOWAIT is respected by top vfs layer,
    so vstorage is executed without this flag which resulted
    in serious performance degradation.
    
    NOTE. Actual implementation of NOWAIT IO could be
    an interesting improvement. As our qemu still does not use
    io_uring, it is still useless, but io_uring will change the picture.
    
    Affects: #VSTOR-94858
    https://virtuozzo.atlassian.net/browse/VSTOR-94829
    
    Signed-off-by: Alexey Kuznetsov <kuznet at virtuozzo.com>
    Feature: vStorage
---
 fs/fuse/file.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/fs/fuse/file.c b/fs/fuse/file.c
index 195b77114d02..aa248bd90694 100644
--- a/fs/fuse/file.c
+++ b/fs/fuse/file.c
@@ -354,6 +354,9 @@ int fuse_open_common(struct inode *inode, struct file *file, bool isdir)
 				i_size_write(inode, size);
 		}
 
+		if (fc->close_wait)
+			file->f_mode |= FMODE_NOWAIT;
+
 		spin_unlock(&fi->lock);
 		inode_unlock(inode);
 


More information about the Devel mailing list