Miklos wrote: > A task may have at most one synchronous request allocated. So these > requests need not be otherwise limited.
The patch re-works fuse_get_req() to follow this idea. Signed-off-by: Maxim Patlasov <[email protected]> --- fs/fuse/dev.c | 26 ++++++++++++++++++-------- 1 files changed, 18 insertions(+), 8 deletions(-) diff --git a/fs/fuse/dev.c b/fs/fuse/dev.c index 6137650..1f7ce89 100644 --- a/fs/fuse/dev.c +++ b/fs/fuse/dev.c @@ -137,17 +137,27 @@ struct fuse_req *fuse_get_req_internal(struct fuse_conn *fc, unsigned npages, bool for_background) { struct fuse_req *req; - sigset_t oldset; - int intr; int err; + int *flag_p = NULL; atomic_inc(&fc->num_waiting); - block_sigs(&oldset); - intr = wait_event_interruptible(fc->blocked_waitq, !fc->blocked); - restore_sigs(&oldset); - err = -EINTR; - if (intr) - goto out; + + if (for_background) + flag_p = &fc->blocked; + else if (fc->uninitialized) + flag_p = &fc->uninitialized; + + if (flag_p) { + sigset_t oldset; + int intr; + + block_sigs(&oldset); + intr = wait_event_interruptible(fc->blocked_waitq, !*flag_p); + restore_sigs(&oldset); + err = -EINTR; + if (intr) + goto out; + } err = -ENOTCONN; if (!fc->connected) _______________________________________________ Devel mailing list [email protected] https://lists.openvz.org/mailman/listinfo/devel
