aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoanne Koong <joannelkoong@gmail.com>2024-07-17 13:42:14 -0700
committerBernd Schubert <bernd@bsbernd.com>2025-04-30 15:12:01 +0200
commit84a27de6a644163eda97b7052e064774ec73f925 (patch)
treebdceee3c162969dd6da48c96ec29420bb5b3da96
parentcd503168287e82e1698fb2fdf6397f1dbb751e75 (diff)
downloadlibfuse-84a27de6a644163eda97b7052e064774ec73f925.tar.gz
Support request timeouts
This adds the libfuse changes needed to support request timeouts. A timeout may be set by the server in its init call. If a request is not completed by the timeout, the connection will be aborted by the kernel. Signed-off-by: Joanne Koong <joannelkoong@gmail.com>
-rw-r--r--include/fuse_common.h8
-rw-r--r--lib/fuse_lowlevel.c5
2 files changed, 12 insertions, 1 deletions
diff --git a/include/fuse_common.h b/include/fuse_common.h
index 249e0c9..0b0ea4c 100644
--- a/include/fuse_common.h
+++ b/include/fuse_common.h
@@ -709,9 +709,15 @@ struct fuse_conn_info {
uint64_t want_ext;
/**
+ * Request timeout (in seconds). If the request is not answered by
+ * this timeout, the connection will be aborted by the kernel.
+ */
+ uint16_t request_timeout;
+
+ /**
* For future use.
*/
- uint32_t reserved[16];
+ uint16_t reserved[31];
};
fuse_static_assert(sizeof(struct fuse_conn_info) == 128,
"Size of struct fuse_conn_info must be 128 bytes");
diff --git a/lib/fuse_lowlevel.c b/lib/fuse_lowlevel.c
index e10b937..619edfc 100644
--- a/lib/fuse_lowlevel.c
+++ b/lib/fuse_lowlevel.c
@@ -2720,6 +2720,11 @@ _do_init(fuse_req_t req, const fuse_ino_t nodeid, const void *op_in,
enable_io_uring = true;
}
+ if ((inargflags & FUSE_REQUEST_TIMEOUT) && se->conn.request_timeout) {
+ outargflags |= FUSE_REQUEST_TIMEOUT;
+ outarg.request_timeout = se->conn.request_timeout;
+ }
+
if (inargflags & FUSE_INIT_EXT) {
outargflags |= FUSE_INIT_EXT;
outarg.flags2 = outargflags >> 32;