summaryrefslogtreecommitdiffstats
path: root/sys-kernel/boest-v4.4.198/0011-xfs-Make-xfsaild-freezeable-again.patch
diff options
context:
space:
mode:
Diffstat (limited to 'sys-kernel/boest-v4.4.198/0011-xfs-Make-xfsaild-freezeable-again.patch')
-rw-r--r--sys-kernel/boest-v4.4.198/0011-xfs-Make-xfsaild-freezeable-again.patch75
1 files changed, 75 insertions, 0 deletions
diff --git a/sys-kernel/boest-v4.4.198/0011-xfs-Make-xfsaild-freezeable-again.patch b/sys-kernel/boest-v4.4.198/0011-xfs-Make-xfsaild-freezeable-again.patch
new file mode 100644
index 00000000..9d5ec689
--- /dev/null
+++ b/sys-kernel/boest-v4.4.198/0011-xfs-Make-xfsaild-freezeable-again.patch
@@ -0,0 +1,75 @@
+From faac4e469946348ab7b641fdb61b0d980e57a323 Mon Sep 17 00:00:00 2001
+From: Michal Hocko <mhocko@suse.com>
+Date: Mon, 8 Feb 2016 14:59:07 +1100
+Subject: [PATCH 11/20] xfs: Make xfsaild freezeable again
+
+Hendik has reported suspend failures due to xfsaild blocking the freezer
+to settle down.
+Jan 17 19:59:56 linux-6380 kernel: PM: Syncing filesystems ... done.
+Jan 17 19:59:56 linux-6380 kernel: PM: Preparing system for sleep (mem)
+Jan 17 19:59:56 linux-6380 kernel: Freezing user space processes ... (elapsed 0.001 seconds) done.
+Jan 17 19:59:56 linux-6380 kernel: Freezing remaining freezable tasks ...
+Jan 17 19:59:56 linux-6380 kernel: Freezing of tasks failed after 20.002 seconds (1 tasks refusing to freeze, wq_busy=0):
+Jan 17 19:59:56 linux-6380 kernel: xfsaild/dm-5 S 00000000 0 1293 2 0x00000080
+Jan 17 19:59:56 linux-6380 kernel: f0ef5f00 00000046 00000200 00000000 ffff9022 c02d3800 00000000 00000032
+Jan 17 19:59:56 linux-6380 kernel: ee0b2400 00000032 f71e0d00 f36fabc0 f0ef2d00 f0ef6000 f0ef2d00 f12f90c0
+Jan 17 19:59:56 linux-6380 kernel: f0ef5f0c c0844e44 00000000 f0ef5f6c f811e0be 00000000 00000000 f0ef2d00
+Jan 17 19:59:56 linux-6380 kernel: Call Trace:
+Jan 17 19:59:56 linux-6380 kernel: [<c0844e44>] schedule+0x34/0x90
+Jan 17 19:59:56 linux-6380 kernel: [<f811e0be>] xfsaild+0x5de/0x600 [xfs]
+Jan 17 19:59:56 linux-6380 kernel: [<c0286cbb>] kthread+0x9b/0xb0
+Jan 17 19:59:56 linux-6380 kernel: [<c0848a79>] ret_from_kernel_thread+0x21/0x38
+
+The issue has been there for quite some time but it has been made
+visible by only by 24ba16bb3d49 ("xfs: clear PF_NOFREEZE for xfsaild
+kthread") because the suspend started seeing xfsaild.
+
+The above commit has missed that the !xfs_ail_min branch might call
+schedule with TASK_INTERRUPTIBLE without calling try_to_freeze so the pm
+suspend would wake up the kernel thread over and over again without any
+progress. What we want here is to use freezable_schedule instead to hide
+the thread from the suspend.
+
+While we are here also change schedule_timeout to freezable variant to
+prevent from spurious wakeups by suspend.
+
+[dchinner: re-add set_freezeable call so the freezer will account properly
+ for this kthread. ]
+
+Reported-by: Hendrik Woltersdorf <hendrikw@arcor.de>
+Signed-off-by: Michal Hocko <mhocko@suse.com>
+Reviewed-by: Dave Chinner <dchinner@redhat.com>
+Signed-off-by: Dave Chinner <david@fromorbit.com>
+---
+ fs/xfs/xfs_trans_ail.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/fs/xfs/xfs_trans_ail.c b/fs/xfs/xfs_trans_ail.c
+index 4f18fd92ca13..d6c9c3e9e02b 100644
+--- a/fs/xfs/xfs_trans_ail.c
++++ b/fs/xfs/xfs_trans_ail.c
+@@ -497,6 +497,7 @@ xfsaild(
+ long tout = 0; /* milliseconds */
+
+ current->flags |= PF_MEMALLOC;
++ set_freezable();
+
+ while (!kthread_should_stop()) {
+ if (tout && tout <= 20)
+@@ -519,14 +520,14 @@ xfsaild(
+ if (!xfs_ail_min(ailp) &&
+ ailp->xa_target == ailp->xa_target_prev) {
+ spin_unlock(&ailp->xa_lock);
+- schedule();
++ freezable_schedule();
+ tout = 0;
+ continue;
+ }
+ spin_unlock(&ailp->xa_lock);
+
+ if (tout)
+- schedule_timeout(msecs_to_jiffies(tout));
++ freezable_schedule_timeout(msecs_to_jiffies(tout));
+
+ __set_current_state(TASK_RUNNING);
+