linux-raid.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH RFC] md: call md_cluster_stop() in __md_stop()
@ 2022-08-12  2:16 NeilBrown
  2022-08-15  6:19 ` Guoqing Jiang
  0 siblings, 1 reply; 4+ messages in thread
From: NeilBrown @ 2022-08-12  2:16 UTC (permalink / raw)
  To: Song Liu, Guoqing Jiang; +Cc: linux-raid


[[ I noticed the e151 patch recently which seems to admit that it broke 
   something.  So I looked into it and came up with this.
   It seems to make sense, but I'm not in a position to test it.
   Guoqing: does it look OK to you?
   - NeilBrown
]]

As described in Commit: 48df498daf62 ("md: move bitmap_destroy to the
beginning of __md_stop") md_cluster_stop() needs to run before the
mdddev->thread is stopped.
The change to make this happen was reverted in Commit: e151db8ecfb0
("md-raid: destroy the bitmap after destroying the thread") due to
problems it caused.

To restore correct behaviour, make md_cluster_stop() reentrant and
explicitly call it at the start of __md_stop(), after first calling
md_bitmap_wait_behind_writes().

Fixes: e151db8ecfb0 ("md-raid: destroy the bitmap after destroying the thread")
Signed-off-by: NeilBrown <neilb@suse.de>
---
 drivers/md/md-cluster.c | 1 +
 drivers/md/md.c         | 3 +++
 2 files changed, 4 insertions(+)

diff --git a/drivers/md/md-cluster.c b/drivers/md/md-cluster.c
index 742b2349fea3..37bf0aa4ed71 100644
--- a/drivers/md/md-cluster.c
+++ b/drivers/md/md-cluster.c
@@ -1009,6 +1009,7 @@ static int leave(struct mddev *mddev)
 	     test_bit(MD_CLOSING, &mddev->flags)))
 		resync_bitmap(mddev);
 
+	mddev->cluster_info = NULL;
 	set_bit(MD_CLUSTER_HOLDING_MUTEX_FOR_RECVD, &cinfo->state);
 	md_unregister_thread(&cinfo->recovery_thread);
 	md_unregister_thread(&cinfo->recv_thread);
diff --git a/drivers/md/md.c b/drivers/md/md.c
index afaf36b2f6ab..a57b2dff64dd 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -6238,6 +6238,9 @@ static void mddev_detach(struct mddev *mddev)
 static void __md_stop(struct mddev *mddev)
 {
 	struct md_personality *pers = mddev->pers;
+
+	md_bitmap_wait_behind_writes(mddev);
+	md_cluster_stop(mddev);
 	mddev_detach(mddev);
 	/* Ensure ->event_work is done */
 	if (mddev->event_work.func)
-- 
2.36.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2022-08-16 13:54 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-08-12  2:16 [PATCH RFC] md: call md_cluster_stop() in __md_stop() NeilBrown
2022-08-15  6:19 ` Guoqing Jiang
2022-08-16  0:58   ` NeilBrown
2022-08-16 13:53     ` Guoqing Jiang

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).