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. Signed-off-by: Todd Poynor <toddpoynor@xxxxxxxxxx> --- Have seen reports in which repeated suspend attempts were aborted due to a task waiting uninterruptibly in this function, but have only reproduced this artificially, by causing the daemon to sleep. Only modified the normal request path, not request aborts and such, under the assumption that these should be rare and should make progress upon resume. Certain apps that read or write a lot of data on the filesystem may apparently run into this case rather frequently. fs/fuse/dev.c | 6 +++++- 1 files changed, 5 insertions(+), 1 deletions(-) diff --git a/fs/fuse/dev.c b/fs/fuse/dev.c index 168a80f..bded2e5 100644 --- a/fs/fuse/dev.c +++ b/fs/fuse/dev.c @@ -19,6 +19,7 @@ #include <linux/pipe_fs_i.h> #include <linux/swap.h> #include <linux/splice.h> +#include <linux/freezer.h> MODULE_ALIAS_MISCDEV(FUSE_MINOR); MODULE_ALIAS("devname:fuse"); @@ -383,7 +384,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) -- 1.7.3.1 _______________________________________________ linux-pm mailing list linux-pm@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/linux-pm