On Wed, 14 Aug 2024 at 01:23, Joanne Koong <joannelkoong@xxxxxxxxx> wrote: > > There are situations where fuse servers can become unresponsive or take > too long to reply to a request. Currently there is no upper bound on > how long a request may take, which may be frustrating to users who get > stuck waiting for a request to complete. > > This patchset adds a timeout option for requests and two dynamically > configurable fuse sysctls "default_request_timeout" and "max_request_timeout" > for controlling/enforcing timeout behavior system-wide. > > Existing fuse servers will not be affected unless they explicitly opt into the > timeout. I sort of understand the motivation, but do not clearly see why this is required. A well written server will be able to do request timeouts properly, without the kernel having to cut off requests mid flight without the knowledge of the server. The latter could even be dangerous because locking guarantees previously provided by the kernel do not apply anymore. Can you please explain why this needs to be done by the client (kernel) instead of the server (userspace)? Thanks, Miklos > > v3: https://lore.kernel.org/linux-fsdevel/20240808190110.3188039-1-joannelkoong@xxxxxxxxx/ > Changes from v3 -> v4: > - Fix wording on some comments to make it more clear > - Use simpler logic for timer (eg remove extra if checks, use mod timer API) (Josef) > - Sanity-check should be on FR_FINISHING not FR_FINISHED (Jingbo) > - Fix comment for "processing queue", add req->fpq = NULL safeguard (Bernd) > > v2: https://lore.kernel.org/linux-fsdevel/20240730002348.3431931-1-joannelkoong@xxxxxxxxx/ > Changes from v2 -> v3: > - Disarm / rearm timer in dev_do_read to handle race conditions (Bernrd) > - Disarm timer in error handling for fatal interrupt (Yafang) > - Clean up do_fuse_request_end (Jingbo) > - Add timer for notify retrieve requests > - Fix kernel test robot errors for #define no-op functions > > v1: https://lore.kernel.org/linux-fsdevel/20240717213458.1613347-1-joannelkoong@xxxxxxxxx/ > Changes from v1 -> v2: > - Add timeout for background requests > - Handle resend race condition > - Add sysctls > > Joanne Koong (2): > fuse: add optional kernel-enforced timeout for requests > fuse: add default_request_timeout and max_request_timeout sysctls > > Documentation/admin-guide/sysctl/fs.rst | 17 +++ > fs/fuse/Makefile | 2 +- > fs/fuse/dev.c | 192 +++++++++++++++++++++++- > fs/fuse/fuse_i.h | 30 ++++ > fs/fuse/inode.c | 24 +++ > fs/fuse/sysctl.c | 42 ++++++ > 6 files changed, 298 insertions(+), 9 deletions(-) > create mode 100644 fs/fuse/sysctl.c > > -- > 2.43.5 >