[kernel] r18244 - in dists/trunk/linux-2.6/debian: . patches/bugfix/all patches/series

Ben Hutchings benh at alioth.debian.org
Fri Nov 11 02:33:06 UTC 2011


Author: benh
Date: Fri Nov 11 02:33:02 2011
New Revision: 18244

Log:
cifs, freezer: add wait_event_freezekillable and have cifs use it (Closes: #488794)

Added:
   dists/trunk/linux-2.6/debian/patches/bugfix/all/CIFS-Fixup-trivial-checkpatch-warning.patch
   dists/trunk/linux-2.6/debian/patches/bugfix/all/Fix-build-break-when-freezer-not-configured.patch
   dists/trunk/linux-2.6/debian/patches/bugfix/all/PM-Freezer-Reimplement-wait_event_freezekillable-usi.patch
   dists/trunk/linux-2.6/debian/patches/bugfix/all/cifs-freezer-add-wait_event_freezekillable-and-have-.patch
Modified:
   dists/trunk/linux-2.6/debian/changelog
   dists/trunk/linux-2.6/debian/patches/series/1~experimental.2

Modified: dists/trunk/linux-2.6/debian/changelog
==============================================================================
--- dists/trunk/linux-2.6/debian/changelog	Fri Nov 11 02:10:11 2011	(r18243)
+++ dists/trunk/linux-2.6/debian/changelog	Fri Nov 11 02:33:02 2011	(r18244)
@@ -5,6 +5,8 @@
   * iwlagn: fix modinfo display for 135 ucode (Closes: #647958)
   * [powerpc] ptrace: Fix build with gcc 4.6
   * [arm] add io{read,write}{16,32}be functions (fixes FTBFS)
+  * cifs, freezer: add wait_event_freezekillable and have cifs use it
+    (Closes: #488794)
 
  -- Ben Hutchings <ben at decadent.org.uk>  Fri, 04 Nov 2011 15:05:47 +0000
 

Added: dists/trunk/linux-2.6/debian/patches/bugfix/all/CIFS-Fixup-trivial-checkpatch-warning.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/trunk/linux-2.6/debian/patches/bugfix/all/CIFS-Fixup-trivial-checkpatch-warning.patch	Fri Nov 11 02:33:02 2011	(r18244)
@@ -0,0 +1,27 @@
+From: Steve French <smfrench at gmail.com>
+Date: Wed, 19 Oct 2011 21:27:11 -0500
+Subject: [PATCH] [CIFS] Fixup trivial checkpatch warning
+
+commit b957ae9c53d5715a07f8bac644d8ff0a407c7e07 upstream.
+
+Signed-off-by: Steve French <smfrench at gmail.com>
+---
+ include/linux/freezer.h |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/include/linux/freezer.h b/include/linux/freezer.h
+index 3672f73..a155561 100644
+--- a/include/linux/freezer.h
++++ b/include/linux/freezer.h
+@@ -143,7 +143,7 @@ static inline void set_freezable_with_signal(void)
+ ({									\
+ 	int __retval;							\
+ 	do {								\
+-		__retval = wait_event_killable(wq, 			\
++		__retval = wait_event_killable(wq,			\
+ 				(condition) || freezing(current));	\
+ 		if (__retval && !freezing(current))			\
+ 			break;						\
+-- 
+1.7.7.2
+

Added: dists/trunk/linux-2.6/debian/patches/bugfix/all/Fix-build-break-when-freezer-not-configured.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/trunk/linux-2.6/debian/patches/bugfix/all/Fix-build-break-when-freezer-not-configured.patch	Fri Nov 11 02:33:02 2011	(r18244)
@@ -0,0 +1,37 @@
+From: Steve French <smfrench at gmail.com>
+Date: Tue, 25 Oct 2011 10:02:53 -0500
+Subject: [PATCH] Fix build break when freezer not configured
+
+commit e0c8ea1a69410ef44043646938a6a4175f5307e4 upstream.
+
+fs/cifs/transport.c: In function 'wait_for_response':
+fs/cifs/transport.c:328: error: implicit declaration of function 'wait_event_freezekillable'
+
+Caused by commit f06ac72e9291 ("cifs, freezer: add
+wait_event_freezekillable and have cifs use it").  In this config,
+CONFIG_FREEZER is not set.
+
+Reviewed-by: Shirish Pargaonkar <shirishp at us.ibm.com>
+CC: Jeff Layton <jlayton at redhat.com>
+Signed-off-by: Steve French <smfrench at gmail.com>
+---
+ include/linux/freezer.h |    3 +++
+ 1 files changed, 3 insertions(+), 0 deletions(-)
+
+diff --git a/include/linux/freezer.h b/include/linux/freezer.h
+index a155561..5989883 100644
+--- a/include/linux/freezer.h
++++ b/include/linux/freezer.h
+@@ -203,6 +203,9 @@ static inline void set_freezable_with_signal(void) {}
+ #define wait_event_freezable_timeout(wq, condition, timeout)		\
+ 		wait_event_interruptible_timeout(wq, condition, timeout)
+ 
++#define wait_event_freezekillable(wq, condition)		\
++		wait_event_killable(wq, condition)
++
+ #endif /* !CONFIG_FREEZER */
+ 
+ #endif	/* FREEZER_H_INCLUDED */
+-- 
+1.7.7.2
+

Added: dists/trunk/linux-2.6/debian/patches/bugfix/all/PM-Freezer-Reimplement-wait_event_freezekillable-usi.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/trunk/linux-2.6/debian/patches/bugfix/all/PM-Freezer-Reimplement-wait_event_freezekillable-usi.patch	Fri Nov 11 02:33:02 2011	(r18244)
@@ -0,0 +1,64 @@
+From: Oleg Nesterov <oleg at redhat.com>
+Date: Thu, 3 Nov 2011 16:07:49 -0700
+Subject: [PATCH] PM / Freezer: Reimplement wait_event_freezekillable using
+ freezer_do_not_count/freezer_count
+
+commit 6f35c4abd7f0294166a5e0ab0401fe7949b33034 upstream.
+
+Commit 27920651fe "PM / Freezer: Make fake_signal_wake_up() wake
+TASK_KILLABLE tasks too" updated fake_signal_wake_up() used by freezer
+to wake up KILLABLE tasks.  Sending unsolicited wakeups to tasks in
+killable sleep is dangerous as there are code paths which depend on
+tasks not waking up spuriously from KILLABLE sleep.
+
+For example. sys_read() or page can sleep in TASK_KILLABLE assuming
+that wait/down/whatever _killable can only fail if we can not return
+to the usermode.  TASK_TRACED is another obvious example.
+
+The offending commit was to resolve freezer hang during system PM
+operations caused by KILLABLE sleeps in network filesystems.
+wait_event_freezekillable(), which depends on the spurious KILLABLE
+wakeup, was added by f06ac72e92 "cifs, freezer: add
+wait_event_freezekillable and have cifs use it" to be used to
+implement killable & freezable sleeps in network filesystems.
+
+To prepare for reverting of 27920651fe, this patch reimplements
+wait_event_freezekillable() using freezer_do_not_count/freezer_count()
+so that it doesn't depend on the spurious KILLABLE wakeup.  This isn't
+very nice but should do for now.
+
+[tj: Refreshed patch to apply to linus/master and updated commit
+    description on Rafael's request.]
+
+Signed-off-by: Oleg Nesterov <oleg at redhat.com>
+Signed-off-by: Tejun Heo <tj at kernel.org>
+Signed-off-by: Rafael J. Wysocki <rjw at sisk.pl>
+---
+ include/linux/freezer.h |   11 +++--------
+ 1 files changed, 3 insertions(+), 8 deletions(-)
+
+diff --git a/include/linux/freezer.h b/include/linux/freezer.h
+index a49b529..a5386e3 100644
+--- a/include/linux/freezer.h
++++ b/include/linux/freezer.h
+@@ -143,14 +143,9 @@ static inline void set_freezable_with_signal(void)
+ #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());					\
++	freezer_do_not_count();						\
++	__retval = wait_event_killable(wq, (condition));		\
++	freezer_count();						\
+ 	__retval;							\
+ })
+ 
+-- 
+1.7.7.2
+

Added: dists/trunk/linux-2.6/debian/patches/bugfix/all/cifs-freezer-add-wait_event_freezekillable-and-have-.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/trunk/linux-2.6/debian/patches/bugfix/all/cifs-freezer-add-wait_event_freezekillable-and-have-.patch	Fri Nov 11 02:33:02 2011	(r18244)
@@ -0,0 +1,81 @@
+From: Jeff Layton <jlayton at redhat.com>
+Date: Wed, 19 Oct 2011 15:30:40 -0400
+Subject: [PATCH] cifs, freezer: add wait_event_freezekillable and have cifs
+ use it
+
+commit f06ac72e929115f2772c29727152ba0832d641e4 upstream.
+
+CIFS currently uses wait_event_killable to put tasks to sleep while
+they await replies from the server. That function though does not
+allow the freezer to run. In many cases, the network interface may
+be going down anyway, in which case the reply will never come. The
+client then ends up blocking the computer from suspending.
+
+Fix this by adding a new wait_event_freezable variant --
+wait_event_freezekillable. The idea is to combine the behavior of
+wait_event_killable and wait_event_freezable -- put the task to
+sleep and only allow it to be awoken by fatal signals, but also
+allow the freezer to do its job.
+
+Signed-off-by: Jeff Layton <jlayton at redhat.com>
+---
+ fs/cifs/transport.c     |    3 ++-
+ include/linux/freezer.h |   19 +++++++++++++++++--
+ 2 files changed, 19 insertions(+), 3 deletions(-)
+
+diff --git a/fs/cifs/transport.c b/fs/cifs/transport.c
+index e7398d0..0cc9584 100644
+--- a/fs/cifs/transport.c
++++ b/fs/cifs/transport.c
+@@ -26,6 +26,7 @@
+ #include <linux/wait.h>
+ #include <linux/net.h>
+ #include <linux/delay.h>
++#include <linux/freezer.h>
+ #include <asm/uaccess.h>
+ #include <asm/processor.h>
+ #include <linux/mempool.h>
+@@ -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/include/linux/freezer.h b/include/linux/freezer.h
+index 1effc8b..3672f73 100644
+--- a/include/linux/freezer.h
++++ b/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 <linux/wait.h>
++ * Freezer-friendly wrappers around wait_event_interruptible(),
++ * wait_event_killable() and wait_event_interruptible_timeout(), originally
++ * defined in <linux/wait.h>
+  */
+ 
++#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;							\
+-- 
+1.7.7.2
+

Modified: dists/trunk/linux-2.6/debian/patches/series/1~experimental.2
==============================================================================
--- dists/trunk/linux-2.6/debian/patches/series/1~experimental.2	Fri Nov 11 02:10:11 2011	(r18243)
+++ dists/trunk/linux-2.6/debian/patches/series/1~experimental.2	Fri Nov 11 02:33:02 2011	(r18244)
@@ -2,3 +2,7 @@
 + bugfix/all/iwlagn-fix-modinfo-display-for-135-ucode.patch
 + bugfix/powerpc/powerpc-ptrace-Fix-build-with-gcc-4.6.patch
 + bugfix/arm/ARM-add-io-read-write-16-32-be-functions.patch
++ bugfix/all/cifs-freezer-add-wait_event_freezekillable-and-have-.patch
++ bugfix/all/CIFS-Fixup-trivial-checkpatch-warning.patch
++ bugfix/all/Fix-build-break-when-freezer-not-configured.patch
++ bugfix/all/PM-Freezer-Reimplement-wait_event_freezekillable-usi.patch



More information about the Kernel-svn-changes mailing list