[Devel] [PATCH RHEL9 COMMIT] fs/fuse kio: do not return -EINVAL from fuse_dev_do_write() on killed request.

Konstantin Khorenko khorenko at virtuozzo.com
Mon Feb 10 11:28:33 MSK 2025


The commit is pushed to "branch-rh9-5.14.0-427.44.1.vz9.80.x-ovz" and will appear at git at bitbucket.org:openvz/vzkernel.git
after rh9-5.14.0-427.44.1.vz9.80.12
------>
commit 90e4edc819d2bf87afab678aa059ff460d5003a9
Author: Liu Kui <kui.liu at virtuozzo.com>
Date:   Tue Feb 4 16:31:01 2025 +0800

    fs/fuse kio: do not return -EINVAL from fuse_dev_do_write() on killed request.
    
    It is a normal scenario that the request may have been killed when a
    response is returned. So we shouldn't return -EINVAL to the response
    writer, just need to complete the request with error. Otherwise it
    breaks the userspace thread.
    
    Related to #VSTOR-98704
    https://virtuozzo.atlassian.net/browse/VSTOR-98704
    Fixes: 47f3a6b72349 ("fs/fuse: avoid copying out data to killed requests")
    
    Signed-off-by: Liu Kui <kui.liu at virtuozzo.com>
    Acked-by: Alexey Kuznetsov <kuznet at virtuozzo.com>
    
    Feature: fuse: enhanced splice support
---
 fs/fuse/dev.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/fs/fuse/dev.c b/fs/fuse/dev.c
index 101bd4907828..cc6b9f348cf6 100644
--- a/fs/fuse/dev.c
+++ b/fs/fuse/dev.c
@@ -2339,7 +2339,8 @@ static ssize_t fuse_dev_do_write(struct fuse_dev *fud,
 		cs->move_pages = 0;
 
 	if (req->args->killed) {
-		err = -EINVAL;
+		err = 0;
+		req->out.h.error = -EIO;
 	} else if (oh.error == FUSE_OUT_SPLICES) {
 		req->out.h.error = 0;
 		err = copy_out_splices(cs, req->args, nbytes);


More information about the Devel mailing list