diff options
author | Joanne Koong <joannelkoong@gmail.com> | 2024-07-17 13:42:14 -0700 |
---|---|---|
committer | Bernd Schubert <bernd@bsbernd.com> | 2025-04-30 15:12:01 +0200 |
commit | 84a27de6a644163eda97b7052e064774ec73f925 (patch) | |
tree | bdceee3c162969dd6da48c96ec29420bb5b3da96 | |
parent | cd503168287e82e1698fb2fdf6397f1dbb751e75 (diff) | |
download | libfuse-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.h | 8 | ||||
-rw-r--r-- | lib/fuse_lowlevel.c | 5 |
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; |