If a fuse file system takes too long to process an operation then 
fb_queue times out and fuse gets very unhappy. It should keep 
waiting.

Here's the patch.


Index: fusebuf.c
===================================================================
RCS file: /cvs/src/sys/miscfs/fuse/fusebuf.c,v
retrieving revision 1.10
diff -u -p -r1.10 fusebuf.c
--- fusebuf.c   3 Dec 2014 23:00:49 -0000       1.10
+++ fusebuf.c   14 Dec 2014 11:34:58 -0000
@@ -55,7 +55,10 @@ fb_queue(dev_t dev, struct fusebuf *fbuf

        fuse_device_queue_fbuf(dev, fbuf);

-       if ((error = tsleep(fbuf, PWAIT, "fuse msg", TSLEEP_TIMEOUT * hz))) {
+       while ((error = tsleep(fbuf, PWAIT, "fuse msg",
+           TSLEEP_TIMEOUT * hz)) == EWOULDBLOCK);
+
+       if (error) {
                fuse_device_cleanup(dev, fbuf);
                return (error);
        }


                                          

Reply via email to