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

Reply via email to