From bb10c7f32bf320567eef5588720232b459c50d8f Mon Sep 17 00:00:00 2001 From: Jeff Layton Date: Wed, 19 Oct 2011 15:30:40 -0400 Subject: [PATCH] --- yaml --- r: 269977 b: refs/heads/master c: f06ac72e929115f2772c29727152ba0832d641e4 h: refs/heads/master i: 269975: 154ecc793ec12c624740c3fc4a03ddb49372efef v: v3 --- [refs] | 2 +- trunk/fs/cifs/transport.c | 3 ++- trunk/include/linux/freezer.h | 19 +++++++++++++++++-- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index a60a599b36e9..442be41d72f2 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: fef33df88bef6810cc3c4e6edf55c741a8fd68e3 +refs/heads/master: f06ac72e929115f2772c29727152ba0832d641e4 diff --git a/trunk/fs/cifs/transport.c b/trunk/fs/cifs/transport.c index e7398d0cd054..0cc9584f5889 100644 --- a/trunk/fs/cifs/transport.c +++ b/trunk/fs/cifs/transport.c @@ -26,6 +26,7 @@ #include #include #include +#include #include #include #include @@ -324,7 +325,7 @@ wait_for_response(struct TCP_Server_Info *server, struct mid_q_entry *midQ) { int error; - error = wait_event_killable(server->response_q, + error = wait_event_freezekillable(server->response_q, midQ->midState != MID_REQUEST_SUBMITTED); if (error < 0) return -ERESTARTSYS; diff --git a/trunk/include/linux/freezer.h b/trunk/include/linux/freezer.h index 1effc8b56b4e..3672f731f03a 100644 --- a/trunk/include/linux/freezer.h +++ b/trunk/include/linux/freezer.h @@ -134,10 +134,25 @@ static inline void set_freezable_with_signal(void) } /* - * Freezer-friendly wrappers around wait_event_interruptible() and - * wait_event_interruptible_timeout(), originally defined in + * Freezer-friendly wrappers around wait_event_interruptible(), + * wait_event_killable() and wait_event_interruptible_timeout(), originally + * defined in */ +#define wait_event_freezekillable(wq, condition) \ +({ \ + int __retval; \ + do { \ + __retval = wait_event_killable(wq, \ + (condition) || freezing(current)); \ + if (__retval && !freezing(current)) \ + break; \ + else if (!(condition)) \ + __retval = -ERESTARTSYS; \ + } while (try_to_freeze()); \ + __retval; \ +}) + #define wait_event_freezable(wq, condition) \ ({ \ int __retval; \