Add support for no_interrupt (#956)
authoryangyun50 <149988609+yangyun50@users.noreply.github.com>
Tue, 4 Jun 2024 11:50:48 +0000 (19:50 +0800)
committerGitHub <noreply@github.com>
Tue, 4 Jun 2024 11:50:48 +0000 (13:50 +0200)
commitcef8c8b249023fb8129ae791e0998cbca771f96a
treef7e335bb6fe30feadaef0cac05c23fcb957f79ab
parent949944ff3bde50d62f98b0cab15cef2959d40a2d
Add support for no_interrupt (#956)

The function fuse_session_process_buf_int() would do much things
for FUSE_INTERRUPT requests, even there are no FUSE_INTERRUPT requests:

1. check every non-FUSE_INTERRUPT request and add these requests to the
linked list(se->list) under a big lock(se->lock).
2. the function fuse_free_req() frees every request and remove them from
the linked list(se->list) under a bing lock(se->lock).

These operations are not meaningful when there are no FUSE_INTERRUPT requests,
and have a great impact on the performance of fuse filesystem because the big
lock for each request.

In some cases, FUSE_INTERRUPT requests are infrequent, even none at all.
Besides, the user-defined filesystem may do nothing for FUSE_INTERRUPT requests.

And the kernel side has the option "no_interrupt" in struct fuse_conn. This kernel option
can be enabled by return ENOSYS in libfuse for the reply of FUSE_INTERRUPT request.
But I don't find the code to enable the "no_interrupt" kernel option in libfuse.

So add the no_interrupt support, and when this operaion is enabled:
1. remove the useless locking operaions and list operations.
2. return ENOSYS for the reply of FUSE_INTERRUPT request to inform the kernel to disable
FUSE_INTERRUPT request.
example/cuse.c
example/hello_ll.c
example/hello_ll_uds.c
example/notify_inval_entry.c
example/notify_inval_inode.c
example/notify_store_retrieve.c
example/passthrough_hp.cc
example/passthrough_ll.c
include/fuse_common.h
lib/fuse.c
lib/fuse_lowlevel.c