summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosh Boyer <jwboyer@fedoraproject.org>2014-05-06 08:28:30 -0400
committerJosh Boyer <jwboyer@fedoraproject.org>2014-05-06 08:28:30 -0400
commit0dd4df32f2e2453de6f4e0ade38a6d77e41ab417 (patch)
tree4081c04c45da50e401d00570a31c458ae415dfab
parentb2aa988fdb0a7e6eee57757852164136229034b9 (diff)
downloadkernel-0dd4df32f2e2453de6f4e0ade38a6d77e41ab417.tar.gz
kernel-0dd4df32f2e2453de6f4e0ade38a6d77e41ab417.tar.xz
kernel-0dd4df32f2e2453de6f4e0ade38a6d77e41ab417.zip
Add patch to fix smdb soft-lockup (rhbz 1082586)
-rw-r--r--kernel.spec9
-rw-r--r--locks-allow-__break_lease-to-sleep-even-when-break_t.patch50
2 files changed, 59 insertions, 0 deletions
diff --git a/kernel.spec b/kernel.spec
index 6e939170..52b10b78 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -766,6 +766,9 @@ Patch25073: net-Start-with-correct-mac_len-in-skb_network_protoc.patch
#rhbz 1089545
Patch25074: 0001-acpi-video-Add-use_native_backlight-quirks-for-Think.patch
+#rhbz 1082586
+Patch25075: locks-allow-__break_lease-to-sleep-even-when-break_t.patch
+
# END OF PATCH DEFINITIONS
%endif
@@ -1485,6 +1488,9 @@ ApplyPatch net-Start-with-correct-mac_len-in-skb_network_protoc.patch
#rhbz 1089545
ApplyPatch 0001-acpi-video-Add-use_native_backlight-quirks-for-Think.patch
+#rhbz 1082586
+ApplyPatch locks-allow-__break_lease-to-sleep-even-when-break_t.patch
+
# END OF PATCH APPLICATIONS
%endif
@@ -2296,6 +2302,9 @@ fi
# ||----w |
# || ||
%changelog
+* Tue May 06 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Add patch to fix smdb soft-lockup (rhbz 1082586)
+
* Mon May 05 2014 Hans de Goede <hdegoede@redhat.com>
- Add use_native_brightness quirk for the ThinkPad T530 (rhbz 1089545)
diff --git a/locks-allow-__break_lease-to-sleep-even-when-break_t.patch b/locks-allow-__break_lease-to-sleep-even-when-break_t.patch
new file mode 100644
index 00000000..ee893f09
--- /dev/null
+++ b/locks-allow-__break_lease-to-sleep-even-when-break_t.patch
@@ -0,0 +1,50 @@
+Bugzilla: 1082586
+Upstream-status: 3.15 and sent for stable
+
+From f1c6bb2cb8b81013e8979806f8e15e3d53efb96d Mon Sep 17 00:00:00 2001
+From: Jeff Layton <jlayton@redhat.com>
+Date: Tue, 15 Apr 2014 06:17:49 -0400
+Subject: [PATCH] locks: allow __break_lease to sleep even when break_time is 0
+
+A fl->fl_break_time of 0 has a special meaning to the lease break code
+that basically means "never break the lease". knfsd uses this to ensure
+that leases don't disappear out from under it.
+
+Unfortunately, the code in __break_lease can end up passing this value
+to wait_event_interruptible as a timeout, which prevents it from going
+to sleep at all. This makes __break_lease to spin in a tight loop and
+causes soft lockups.
+
+Fix this by ensuring that we pass a minimum value of 1 as a timeout
+instead.
+
+Cc: <stable@vger.kernel.org>
+Cc: J. Bruce Fields <bfields@fieldses.org>
+Reported-by: Terry Barnaby <terry1@beam.ltd.uk>
+Signed-off-by: Jeff Layton <jlayton@redhat.com>
+---
+ fs/locks.c | 7 +++----
+ 1 file changed, 3 insertions(+), 4 deletions(-)
+
+diff --git a/fs/locks.c b/fs/locks.c
+index 13fc7a6d380a..b380f5543614 100644
+--- a/fs/locks.c
++++ b/fs/locks.c
+@@ -1391,11 +1391,10 @@ int __break_lease(struct inode *inode, unsigned int mode, unsigned int type)
+
+ restart:
+ break_time = flock->fl_break_time;
+- if (break_time != 0) {
++ if (break_time != 0)
+ break_time -= jiffies;
+- if (break_time == 0)
+- break_time++;
+- }
++ if (break_time == 0)
++ break_time++;
+ locks_insert_block(flock, new_fl);
+ spin_unlock(&inode->i_lock);
+ error = wait_event_interruptible_timeout(new_fl->fl_wait,
+--
+1.9.0
+