From: Todd Poynor Date: Wed, 24 Aug 2011 22:01:30 +0000 (-0700) Subject: fuse: Freeze client on suspend when request sent to userspace X-Git-Tag: firefly_0821_release~4090^2~788 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=e584105db8de7ff57c8a4d6c8e2d2efa4827b7bb;p=firefly-linux-kernel-4.4.55.git fuse: Freeze client on suspend when request sent to userspace Suspend attempts can abort when the FUSE daemon is already frozen and a client is waiting uninterruptibly for a response, causing freezing of tasks to fail. Use the freeze-friendly wait API, but disregard other signals. Change-Id: Icefb7e4bbc718ccb76bf3c04daaa5eeea7e0e63c Signed-off-by: Todd Poynor --- diff --git a/fs/fuse/dev.c b/fs/fuse/dev.c index 1d55f9465400..0e16fc1cfcd3 100644 --- a/fs/fuse/dev.c +++ b/fs/fuse/dev.c @@ -20,6 +20,7 @@ #include #include #include +#include MODULE_ALIAS_MISCDEV(FUSE_MINOR); MODULE_ALIAS("devname:fuse"); @@ -464,7 +465,10 @@ __acquires(fc->lock) * Wait it out. */ spin_unlock(&fc->lock); - wait_event(req->waitq, req->state == FUSE_REQ_FINISHED); + + while (req->state != FUSE_REQ_FINISHED) + wait_event_freezable(req->waitq, + req->state == FUSE_REQ_FINISHED); spin_lock(&fc->lock); if (!req->aborted)