]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Fixes for 4.19
authorSasha Levin <sashal@kernel.org>
Tue, 20 Feb 2024 01:25:48 +0000 (20:25 -0500)
committerSasha Levin <sashal@kernel.org>
Tue, 20 Feb 2024 01:25:48 +0000 (20:25 -0500)
Signed-off-by: Sasha Levin <sashal@kernel.org>
queue-4.19/revert-md-raid5-wait-for-md_sb_change_pending-in-rai.patch-30150 [new file with mode: 0644]
queue-4.19/series

diff --git a/queue-4.19/revert-md-raid5-wait-for-md_sb_change_pending-in-rai.patch-30150 b/queue-4.19/revert-md-raid5-wait-for-md_sb_change_pending-in-rai.patch-30150
new file mode 100644 (file)
index 0000000..ac4c984
--- /dev/null
@@ -0,0 +1,72 @@
+From a15058db27bdbfa458bd1e886eac683d5d1babfe Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 8 Nov 2023 10:22:16 -0800
+Subject: Revert "md/raid5: Wait for MD_SB_CHANGE_PENDING in raid5d"
+
+From: Junxiao Bi <junxiao.bi@oracle.com>
+
+[ Upstream commit bed9e27baf52a09b7ba2a3714f1e24e17ced386d ]
+
+This reverts commit 5e2cf333b7bd5d3e62595a44d598a254c697cd74.
+
+That commit introduced the following race and can cause system hung.
+
+ md_write_start:             raid5d:
+ // mddev->in_sync == 1
+ set "MD_SB_CHANGE_PENDING"
+                            // running before md_write_start wakeup it
+                             waiting "MD_SB_CHANGE_PENDING" cleared
+                             >>>>>>>>> hung
+ wakeup mddev->thread
+ ...
+ waiting "MD_SB_CHANGE_PENDING" cleared
+ >>>> hung, raid5d should clear this flag
+ but get hung by same flag.
+
+The issue reverted commit fixing is fixed by last patch in a new way.
+
+Fixes: 5e2cf333b7bd ("md/raid5: Wait for MD_SB_CHANGE_PENDING in raid5d")
+Cc: stable@vger.kernel.org # v5.19+
+Signed-off-by: Junxiao Bi <junxiao.bi@oracle.com>
+Reviewed-by: Yu Kuai <yukuai3@huawei.com>
+Signed-off-by: Song Liu <song@kernel.org>
+Link: https://lore.kernel.org/r/20231108182216.73611-2-junxiao.bi@oracle.com
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/md/raid5.c | 12 ------------
+ 1 file changed, 12 deletions(-)
+
+diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
+index b98abe927d06..e2fcc09a18cd 100644
+--- a/drivers/md/raid5.c
++++ b/drivers/md/raid5.c
+@@ -44,7 +44,6 @@
+  */
+ #include <linux/blkdev.h>
+-#include <linux/delay.h>
+ #include <linux/kthread.h>
+ #include <linux/raid/pq.h>
+ #include <linux/async_tx.h>
+@@ -6330,18 +6329,7 @@ static void raid5d(struct md_thread *thread)
+                       spin_unlock_irq(&conf->device_lock);
+                       md_check_recovery(mddev);
+                       spin_lock_irq(&conf->device_lock);
+-
+-                      /*
+-                       * Waiting on MD_SB_CHANGE_PENDING below may deadlock
+-                       * seeing md_check_recovery() is needed to clear
+-                       * the flag when using mdmon.
+-                       */
+-                      continue;
+               }
+-
+-              wait_event_lock_irq(mddev->sb_wait,
+-                      !test_bit(MD_SB_CHANGE_PENDING, &mddev->sb_flags),
+-                      conf->device_lock);
+       }
+       pr_debug("%d stripes handled\n", handled);
+-- 
+2.43.0
+
index 6d1fa8769ee6124af3ae3607d19226ba34482f93..89339f8802e2d157652bd5942fe2da222f82a8bf 100644 (file)
@@ -195,3 +195,4 @@ nfp-use-correct-macro-for-lengthselect-in-bar-config.patch
 irqchip-irq-brcmstb-l2-add-write-memory-barrier-before-exit.patch
 pmdomain-core-move-the-unused-cleanup-to-a-_sync-initcall.patch
 revert-md-raid5-wait-for-md_sb_change_pending-in-rai.patch
+revert-md-raid5-wait-for-md_sb_change_pending-in-rai.patch-30150