mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Neil Brown <neilb@suse.de>
To: Alistair John Strachan <alistair@devzero.co.uk>
Cc: linux-kernel@vger.kernel.org, linux-raid@vger.kernel.org,
	"Rafael J. Wysocki" <rjw@sisk.pl>
Subject: Re: md (regression): reboot/shutdown hangs
Date: Mon, 1 Sep 2008 12:17:06 +1000	[thread overview]
Message-ID: <18619.20642.697691.541752@notabene.brown> (raw)
In-Reply-To: message from Alistair John Strachan on Thursday August 28

On Thursday August 28, alistair@devzero.co.uk wrote:
> Hi Neil,
> 
> Commit 2b25000bf5157c28d8591f03f0575248a8cbd900 ("Restore force switch of md 
> array to readonly at reboot time.") causes a reboot/shutdown to hang 
> indefinitely on my box. Reverting this single commit makes the problem go 
> away. It was first released with 2.6.27-rc3, I believe, and so this is a 
> regression vs 2.6.26 (Rafael CCed).
> 
> I think the problem might be because my rootfs is on a RAID5 and my distro 
> fails to stop it completely before halt/reboot.
> 
> Please let me know if there's any more information you need from me.

Thanks for the report.

I'm having trouble figuring out why this ever worked.  I must be
missing something.

I can only reproduce a hang when calling reboot when a sync is needed.
I dirty a file and then 
   reboot -f -n

This will always have blocked except between the commit that you
mention and an earlier commit which broke something which that commit
was fixing.

This is because the reboot calls do_md_stop while holding the mddev
lock, and do_md_stop calls invalidate_partition.  If this finds any dirty
data to flush, the writeout will (most likely) need to mark the
superblock as dirty first, which cannot happen while the mddev lock is
held.  So we get a deadlock.

The call to invalidate_partition should not be needed in any case except a
reboot, and in that case you really don't want it (if you wanted to
sync, you would have done that first).
So I plan to remove it.  With it gone I cannot reproduce a hang.  If
you can, I would love to hear about it.

Thanks,
NeilBrown

diff --git a/drivers/md/md.c b/drivers/md/md.c
index 8cfadc5..4790c83 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -3841,8 +3841,6 @@ static int do_md_stop(mddev_t * mddev, int mode, int is_open)
 
 		del_timer_sync(&mddev->safemode_timer);
 
-		invalidate_partition(disk, 0);
-
 		switch(mode) {
 		case 1: /* readonly */
 			err  = -ENXIO;

  parent reply	other threads:[~2008-09-01  2:17 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-08-28 19:05 Alistair John Strachan
2008-08-29 19:13 ` Rafael J. Wysocki
2008-09-01  2:17 ` Neil Brown [this message]
2008-09-01 11:43   ` Alistair John Strachan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=18619.20642.697691.541752@notabene.brown \
    --to=neilb@suse.de \
    --cc=alistair@devzero.co.uk \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-raid@vger.kernel.org \
    --cc=rjw@sisk.pl \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome