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);
}