There is no a reason to set individual FR_ABORTED state for every request, since fuse_abort_conn() aborts all unlocked requests at once. FR_ABORTED bit and fpq->io list just allow fuse_copy_aborted() to end some of requests, which are in the middle of fuse_dev_do_read() and fuse_dev_do_write(). But this is not a big deal, since these functions abort the requests themselves. This patchset introduces a better scheme for fuse_abort_conn(), which allows to remove excess flags and fpq->io, and optimizes hot paths fuse_dev_do_read() and fuse_dev_do_write() by avoiding taking fpq->lock there. --- Kirill Tkhai (7): fuse: Check for fc->connected in fuse_dev_alloc() fuse: Move flush_bg_queue() up in fuse_abort_conn() fuse: Drop and reacquire fc->lock in middle of fuse_abort_conn() fuse: Add fud pointer to struct fuse_copy_state fuse: Introduce generic fuse_copy_aborted() fuse: Kill unused FR_ABORTED, FR_LOCKED and FR_PRIVATE flags fuse: Kill fuse_pqueue::io list and avoid taking fpq->lock on hot paths fs/fuse/dev.c | 131 ++++++++++++++++-------------------------------------- fs/fuse/fuse_i.h | 20 ++------ fs/fuse/inode.c | 10 ++++ 3 files changed, 52 insertions(+), 109 deletions(-) -- Signed-off-by: Kirill Tkhai <ktkhai@xxxxxxxxxxxxx>