All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrew Morton <akpm@linux-foundation.org>
To: thunder7@xs4all.nl
Cc: linux-kernel@vger.kernel.org, neilb@suse.de, linux-raid@vger.kernel.org
Subject: Re: 2.6.21-mm2 boot failure, raid autodetect, bd_set_size+0xb/0x80
Date: Fri, 11 May 2007 11:18:09 -0700	[thread overview]
Message-ID: <20070511111809.bec8b938.akpm@linux-foundation.org> (raw)
In-Reply-To: <20070511180334.GA4068@amd64.of.nowhere>

On Fri, 11 May 2007 20:03:34 +0200
thunder7@xs4all.nl wrote:

> From: Andrew Morton <akpm@linux-foundation.org>
> Date: Wed, May 09, 2007 at 01:23:22AM -0700
> > 
> > ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.21/2.6.21-mm2/
> > 
> > 
> It won't boot here.
> 
> AMD64 platform, raid6 partition.
> 
> 2.6.21-rc7-mm2 runs fine, it's dmesg says:
> 
> md: created md4
> md: bind<hda9>
> md: bind<hdc9>
> md: running: <hdc9><hda9>
> raid1: raid set md4 active with 2 out of 2 mirrors
> md4: bitmap initialized from disk: read 10/10 pages, set 46 bits, status: 0
> created bitmap (156 pages) for device md4
> md: considering hdc8 ...
> md:  adding hdc8 ...
> <snip>
> 
> 
> where 2.6.21-mm2 halts with
> 
> md: created md4
> md: bind<hda9>
> md: bind<hdc9>
> md: running: <hdc9><hda9>
> raid1: raid set md4 active with 2 out of 2 mirrors
> md4: bitmap initialized from disk: read 10/10 pages, set 46 bits, status: 0
> created bitmap (156 pages) for device md4
> Unable to handle kernel null pointer dereference 
> 
> bd_set_size+0xb/0x80

Yes, Neil had a whoops and a dud patch spent a day in mainline.

Hopefully the below revert (from mainline) will fix it.


From: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
To: git-commits-head@vger.kernel.org
Subject: Revert "md: improve partition detection in md array"
Date: 	Thu, 10 May 2007 01:59:03 GMT
Sender: git-commits-head-owner@vger.kernel.org

Gitweb:     http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=44ce6294d07555c3d313757105fd44b78208407f
Commit:     44ce6294d07555c3d313757105fd44b78208407f
Parent:     497f050c42e46a4b1f6a9bcd8827fa5d97fe1feb
Author:     Linus Torvalds <torvalds@woody.linux-foundation.org>
AuthorDate: Wed May 9 18:51:36 2007 -0700
Committer:  Linus Torvalds <torvalds@woody.linux-foundation.org>
CommitDate: Wed May 9 18:51:36 2007 -0700

    Revert "md: improve partition detection in md array"
    
    This reverts commit 5b479c91da90eef605f851508744bfe8269591a0.
    
    Quoth Neil Brown:
    
      "It causes an oops when auto-detecting raid arrays, and it doesn't
       seem easy to fix.
    
       The array may not be 'open' when do_md_run is called, so
       bdev->bd_disk might be NULL, so bd_set_size can oops.
    
       This whole approach of opening an md device before it has been
       assembled just seems to get more and more painful.  I think I'm going
       to have to come up with something clever to provide both backward
       comparability with usage expectation, and sane integration into the
       rest of the kernel."
    
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
---
 drivers/md/md.c           |   26 ++++++++++++++++++--------
 drivers/md/raid1.c        |    1 +
 drivers/md/raid5.c        |    2 ++
 include/linux/raid/md_k.h |    1 +
 4 files changed, 22 insertions(+), 8 deletions(-)

diff --git a/drivers/md/md.c b/drivers/md/md.c
index 2901d0c..65814b0 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -3104,7 +3104,6 @@ static int do_md_run(mddev_t * mddev)
 	struct gendisk *disk;
 	struct mdk_personality *pers;
 	char b[BDEVNAME_SIZE];
-	struct block_device *bdev;
 
 	if (list_empty(&mddev->disks))
 		/* cannot run an array with no devices.. */
@@ -3332,13 +3331,7 @@ static int do_md_run(mddev_t * mddev)
 	md_wakeup_thread(mddev->thread);
 	md_wakeup_thread(mddev->sync_thread); /* possibly kick off a reshape */
 
-	bdev = bdget_disk(mddev->gendisk, 0);
-	if (bdev) {
-		bd_set_size(bdev, mddev->array_size << 1);
-		blkdev_ioctl(bdev->bd_inode, NULL, BLKRRPART, 0);
-		bdput(bdev);
-	}
-
+	mddev->changed = 1;
 	md_new_event(mddev);
 	kobject_uevent(&mddev->gendisk->kobj, KOBJ_CHANGE);
 	return 0;
@@ -3460,6 +3453,7 @@ static int do_md_stop(mddev_t * mddev, int mode)
 			mddev->pers = NULL;
 
 			set_capacity(disk, 0);
+			mddev->changed = 1;
 
 			if (mddev->ro)
 				mddev->ro = 0;
@@ -4599,6 +4593,20 @@ static int md_release(struct inode *inode, struct file * file)
 	return 0;
 }
 
+static int md_media_changed(struct gendisk *disk)
+{
+	mddev_t *mddev = disk->private_data;
+
+	return mddev->changed;
+}
+
+static int md_revalidate(struct gendisk *disk)
+{
+	mddev_t *mddev = disk->private_data;
+
+	mddev->changed = 0;
+	return 0;
+}
 static struct block_device_operations md_fops =
 {
 	.owner		= THIS_MODULE,
@@ -4606,6 +4614,8 @@ static struct block_device_operations md_fops =
 	.release	= md_release,
 	.ioctl		= md_ioctl,
 	.getgeo		= md_getgeo,
+	.media_changed	= md_media_changed,
+	.revalidate_disk= md_revalidate,
 };
 
 static int md_thread(void * arg)
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
index 1b7130c..97ee870 100644
--- a/drivers/md/raid1.c
+++ b/drivers/md/raid1.c
@@ -2063,6 +2063,7 @@ static int raid1_resize(mddev_t *mddev, sector_t sectors)
 	 */
 	mddev->array_size = sectors>>1;
 	set_capacity(mddev->gendisk, mddev->array_size << 1);
+	mddev->changed = 1;
 	if (mddev->array_size > mddev->size && mddev->recovery_cp == MaxSector) {
 		mddev->recovery_cp = mddev->size << 1;
 		set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
index a72e70a..061375e 100644
--- a/drivers/md/raid5.c
+++ b/drivers/md/raid5.c
@@ -3864,6 +3864,7 @@ static int raid5_resize(mddev_t *mddev, sector_t sectors)
 	sectors &= ~((sector_t)mddev->chunk_size/512 - 1);
 	mddev->array_size = (sectors * (mddev->raid_disks-conf->max_degraded))>>1;
 	set_capacity(mddev->gendisk, mddev->array_size << 1);
+	mddev->changed = 1;
 	if (sectors/2  > mddev->size && mddev->recovery_cp == MaxSector) {
 		mddev->recovery_cp = mddev->size << 1;
 		set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
@@ -3998,6 +3999,7 @@ static void end_reshape(raid5_conf_t *conf)
 		conf->mddev->array_size = conf->mddev->size *
 			(conf->raid_disks - conf->max_degraded);
 		set_capacity(conf->mddev->gendisk, conf->mddev->array_size << 1);
+		conf->mddev->changed = 1;
 
 		bdev = bdget_disk(conf->mddev->gendisk, 0);
 		if (bdev) {
diff --git a/include/linux/raid/md_k.h b/include/linux/raid/md_k.h
index a121f36..de72c49 100644
--- a/include/linux/raid/md_k.h
+++ b/include/linux/raid/md_k.h
@@ -201,6 +201,7 @@ struct mddev_s
 	struct mutex			reconfig_mutex;
 	atomic_t			active;
 
+	int				changed;	/* true if we might need to reread partition info */
 	int				degraded;	/* whether md should consider
 							 * adding a spare
 							 */
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

  reply	other threads:[~2007-05-11 18:18 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-05-09  8:23 2.6.21-mm2 Andrew Morton
2007-05-09 14:57 ` 2.6.21-mm2 - Kconfig horkage Valdis.Kletnieks
2007-05-09 17:07   ` Christoph Lameter
2007-05-09 17:16     ` Valdis.Kletnieks
2007-05-09 18:36       ` Christoph Lameter
2007-05-09 16:08 ` 2.6.21-mm2 - 100% CPU on ksoftirqd/1 Valdis.Kletnieks
2007-05-09 17:31   ` Andrew Morton
2007-05-09 18:12   ` Jeremy Fitzhardinge
2007-05-09 20:13     ` Valdis.Kletnieks
2007-05-11  2:52   ` Valdis.Kletnieks
2007-05-09 16:51 ` 2.6.21-mm2 - hanging with initcall_debug and netconsole Valdis.Kletnieks
2007-05-09 17:37   ` Andrew Morton
2007-05-10 11:29 ` 2.6.21-mm2 -- compat_core_sys_select() kmalloc(0) Andy Whitcroft
2007-05-10 11:48 ` 2.6.21-mm2 -- powerpc missing kset Andy Whitcroft
2007-05-10 11:48   ` Andy Whitcroft
2007-05-10 12:16   ` Stephen Rothwell
2007-05-10 12:16     ` Stephen Rothwell
2007-05-10 15:48     ` Randy Dunlap
2007-05-10 15:48       ` Randy Dunlap
2007-05-10 23:45       ` Stephen Rothwell
2007-05-10 12:21 ` ixp4xx compile error (was Re: 2.6.21-mm2) Frederik Deweerdt
2007-05-10 12:45   ` Frederik Deweerdt
2007-05-10 12:56     ` Dmitry Torokhov
2007-05-10 16:11 ` 2.6.21-mm2 Marc Dietrich
2007-05-10 19:22   ` 2.6.21-mm2 Andrew Morton
2007-05-10 20:40     ` 2.6.21-mm2 Marc Dietrich
2007-05-11  8:27 ` [-mm patch] make csum_and_copy_from_user arch independent (was Re: 2.6.21-mm2) Frederik Deweerdt
2007-05-11  8:33   ` Andrew Morton
2007-05-11  9:14   ` [-mm patch] make csum_and_copy_from_user arch independent David Miller
2007-05-11 13:56     ` Frederik Deweerdt
2007-05-11 17:04       ` Russell King
2007-05-11 18:03 ` 2.6.21-mm2 boot failure, raid autodetect, bd_set_size+0xb/0x80 thunder7
2007-05-11 18:18   ` Andrew Morton [this message]
2007-05-11 18:53     ` thunder7
2007-05-15  3:25 ` 2.6.21-mm2 - CONFIG_STATISTIC and Intel PowerTOP Valdis.Kletnieks
2007-05-15 14:25   ` Martin Peschke

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=20070511111809.bec8b938.akpm@linux-foundation.org \
    --to=akpm@linux-foundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-raid@vger.kernel.org \
    --cc=neilb@suse.de \
    --cc=thunder7@xs4all.nl \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.