diff options
-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; |