ANDROID: fs: 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 <toddpoynor@google.com> Signed-off-by: Tashfin Shakeer Rhythm <tashfinshakeerrhythm@gmail.com>
This commit is contained in:
parent
c281bbb136
commit
ced1506860
@ -22,6 +22,7 @@
|
||||
#include <linux/swap.h>
|
||||
#include <linux/splice.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/freezer.h>
|
||||
|
||||
MODULE_ALIAS_MISCDEV(FUSE_MINOR);
|
||||
MODULE_ALIAS("devname:fuse");
|
||||
@ -403,7 +404,9 @@ static void request_wait_answer(struct fuse_conn *fc, struct fuse_req *req)
|
||||
* Either request is already in userspace, or it was forced.
|
||||
* Wait it out.
|
||||
*/
|
||||
wait_event(req->waitq, test_bit(FR_FINISHED, &req->flags));
|
||||
while (!test_bit(FR_FINISHED, &req->flags))
|
||||
wait_event_freezable(req->waitq,
|
||||
test_bit(FR_FINISHED, &req->flags));
|
||||
}
|
||||
|
||||
static void __fuse_request_send(struct fuse_conn *fc, struct fuse_req *req)
|
||||
|
Loading…
Reference in New Issue
Block a user