linux-raid.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 000 of 4] md: assorted bugfixes - one serious.
@ 2006-10-23  7:07 NeilBrown
  2006-10-23  7:07 ` [PATCH 001 of 4] md: Fix bug where spares don't always get rebuilt properly when they become live NeilBrown
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: NeilBrown @ 2006-10-23  7:07 UTC (permalink / raw)
  To: Andrew Morton; +Cc: linux-raid, linux-kernel, stable

I rang my regression test suite on md for the first time in a 
while (obviously too long :-().
Found two bugs resulting in patches 1 and 3.
Others are fixes for more subtle issues.

All patches are suitable for 2.6.19, patch 1 is quite serious and should go in 2.6.18.2.

Thanks,
NeilBrown


 [PATCH 001 of 4] md: Fix bug where spares don't always get rebuilt properly when they become live.
 [PATCH 002 of 4] md: Simplify checking of available size when resizing an array
 [PATCH 003 of 4] md: Fix up maintenance of ->degraded in multipath.
 [PATCH 004 of 4] md: Fix printk format warnings, seen on powerpc64:

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

* [PATCH 001 of 4] md: Fix bug where spares don't always get rebuilt properly when they become live.
  2006-10-23  7:07 [PATCH 000 of 4] md: assorted bugfixes - one serious NeilBrown
@ 2006-10-23  7:07 ` NeilBrown
  2006-10-23  7:07 ` [PATCH 002 of 4] md: Simplify checking of available size when resizing an array NeilBrown
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: NeilBrown @ 2006-10-23  7:07 UTC (permalink / raw)
  To: Andrew Morton; +Cc: linux-raid, linux-kernel, stable


If save_raid_disk is >= 0, then the device could be a device that is 
already in sync that is being re-added.  So we need to default this
value to -1.


Signed-off-by: Neil Brown <neilb@suse.de>

### Diffstat output
 ./drivers/md/md.c |    1 +
 1 file changed, 1 insertion(+)

diff .prev/drivers/md/md.c ./drivers/md/md.c
--- .prev/drivers/md/md.c	2006-10-23 16:34:55.000000000 +1000
+++ ./drivers/md/md.c	2006-10-23 16:35:05.000000000 +1000
@@ -2003,6 +2003,7 @@ static mdk_rdev_t *md_import_device(dev_
 	kobject_init(&rdev->kobj);
 
 	rdev->desc_nr = -1;
+	rdev->saved_raid_disk = -1;
 	rdev->flags = 0;
 	rdev->data_offset = 0;
 	rdev->sb_events = 0;

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

* [PATCH 002 of 4] md: Simplify checking of available size when resizing an array
  2006-10-23  7:07 [PATCH 000 of 4] md: assorted bugfixes - one serious NeilBrown
  2006-10-23  7:07 ` [PATCH 001 of 4] md: Fix bug where spares don't always get rebuilt properly when they become live NeilBrown
@ 2006-10-23  7:07 ` NeilBrown
  2006-10-23  7:08 ` [PATCH 003 of 4] md: Fix up maintenance of ->degraded in multipath NeilBrown
  2006-10-23  7:08 ` [PATCH 004 of 4] md: Fix printk format warnings, seen on powerpc64: NeilBrown
  3 siblings, 0 replies; 5+ messages in thread
From: NeilBrown @ 2006-10-23  7:07 UTC (permalink / raw)
  To: Andrew Morton; +Cc: linux-raid, linux-kernel


When "mdadm --grow --size=xxx" is used to resize an array (use more or
less of each device), we check the new siza against the available
space in each device.

The already have that number recorded in rdev->size, so calculating it
is pointless (and wrong in one obscure case).

Signed-off-by: Neil Brown <neilb@suse.de>

### Diffstat output
 ./drivers/md/md.c |    7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

diff .prev/drivers/md/md.c ./drivers/md/md.c
--- .prev/drivers/md/md.c	2006-10-23 16:35:05.000000000 +1000
+++ ./drivers/md/md.c	2006-10-23 16:35:21.000000000 +1000
@@ -4047,11 +4047,8 @@ static int update_size(mddev_t *mddev, u
 		return -EBUSY;
 	ITERATE_RDEV(mddev,rdev,tmp) {
 		sector_t avail;
-		if (rdev->sb_offset > rdev->data_offset)
-			avail = (rdev->sb_offset*2) - rdev->data_offset;
-		else
-			avail = get_capacity(rdev->bdev->bd_disk)
-				- rdev->data_offset;
+		avail = rdev->size * 2;
+
 		if (fit && (size == 0 || size > avail/2))
 			size = avail/2;
 		if (avail < ((sector_t)size << 1))

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

* [PATCH 003 of 4] md: Fix up maintenance of ->degraded in multipath.
  2006-10-23  7:07 [PATCH 000 of 4] md: assorted bugfixes - one serious NeilBrown
  2006-10-23  7:07 ` [PATCH 001 of 4] md: Fix bug where spares don't always get rebuilt properly when they become live NeilBrown
  2006-10-23  7:07 ` [PATCH 002 of 4] md: Simplify checking of available size when resizing an array NeilBrown
@ 2006-10-23  7:08 ` NeilBrown
  2006-10-23  7:08 ` [PATCH 004 of 4] md: Fix printk format warnings, seen on powerpc64: NeilBrown
  3 siblings, 0 replies; 5+ messages in thread
From: NeilBrown @ 2006-10-23  7:08 UTC (permalink / raw)
  To: Andrew Morton; +Cc: linux-raid, linux-kernel


A recent fix which made sure ->degraded was initialised properly
exposed a second bug - ->degraded wasn't been updated when drives
failed or were hot-added.

Signed-off-by: Neil Brown <neilb@suse.de>

### Diffstat output
 ./drivers/md/multipath.c |    2 ++
 1 file changed, 2 insertions(+)

diff .prev/drivers/md/multipath.c ./drivers/md/multipath.c
--- .prev/drivers/md/multipath.c	2006-10-23 16:34:54.000000000 +1000
+++ ./drivers/md/multipath.c	2006-10-23 16:35:38.000000000 +1000
@@ -277,6 +277,7 @@ static void multipath_error (mddev_t *md
 			set_bit(Faulty, &rdev->flags);
 			set_bit(MD_CHANGE_DEVS, &mddev->flags);
 			conf->working_disks--;
+			mddev->degraded++;
 			printk(KERN_ALERT "multipath: IO failure on %s,"
 				" disabling IO path. \n	Operation continuing"
 				" on %d IO paths.\n",
@@ -336,6 +337,7 @@ static int multipath_add_disk(mddev_t *m
 				blk_queue_max_sectors(mddev->queue, PAGE_SIZE>>9);
 
 			conf->working_disks++;
+			mddev->degraded--;
 			rdev->raid_disk = path;
 			set_bit(In_sync, &rdev->flags);
 			rcu_assign_pointer(p->rdev, rdev);

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

* [PATCH 004 of 4] md: Fix printk format warnings, seen on powerpc64:
  2006-10-23  7:07 [PATCH 000 of 4] md: assorted bugfixes - one serious NeilBrown
                   ` (2 preceding siblings ...)
  2006-10-23  7:08 ` [PATCH 003 of 4] md: Fix up maintenance of ->degraded in multipath NeilBrown
@ 2006-10-23  7:08 ` NeilBrown
  3 siblings, 0 replies; 5+ messages in thread
From: NeilBrown @ 2006-10-23  7:08 UTC (permalink / raw)
  To: Andrew Morton; +Cc: linux-raid, linux-kernel

From: Randy Dunlap <randy.dunlap@oracle.com>

drivers/md/raid1.c:1479: warning: long long unsigned int format, long unsigned int arg (arg 4)
drivers/md/raid10.c:1475: warning: long long unsigned int format, long unsigned int arg (arg 4)

Signed-off-by: Randy Dunlap <randy.dunlap@oracle.com>
Signed-off-by: Neil Brown <neilb@suse.de>

### Diffstat output
 ./drivers/md/raid1.c  |    4 ++--
 ./drivers/md/raid10.c |    4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)

diff .prev/drivers/md/raid1.c ./drivers/md/raid1.c
--- .prev/drivers/md/raid1.c	2006-10-23 16:36:08.000000000 +1000
+++ ./drivers/md/raid1.c	2006-10-23 16:36:08.000000000 +1000
@@ -1474,8 +1474,8 @@ static void fix_read_error(conf_t *conf,
 					       "raid1:%s: read error corrected "
 					       "(%d sectors at %llu on %s)\n",
 					       mdname(mddev), s,
-					       (unsigned long long)sect +
-					           rdev->data_offset,
+					       (unsigned long long)(sect +
+					           rdev->data_offset),
 					       bdevname(rdev->bdev, b));
 				}
 			}

diff .prev/drivers/md/raid10.c ./drivers/md/raid10.c
--- .prev/drivers/md/raid10.c	2006-10-23 16:34:54.000000000 +1000
+++ ./drivers/md/raid10.c	2006-10-23 16:36:08.000000000 +1000
@@ -1470,8 +1470,8 @@ static void fix_read_error(conf_t *conf,
 					       "raid10:%s: read error corrected"
 					       " (%d sectors at %llu on %s)\n",
 					       mdname(mddev), s,
-					       (unsigned long long)sect+
-					            rdev->data_offset,
+					       (unsigned long long)(sect+
+					            rdev->data_offset),
 					       bdevname(rdev->bdev, b));
 
 				rdev_dec_pending(rdev, mddev);

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

end of thread, other threads:[~2006-10-23  7:08 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-10-23  7:07 [PATCH 000 of 4] md: assorted bugfixes - one serious NeilBrown
2006-10-23  7:07 ` [PATCH 001 of 4] md: Fix bug where spares don't always get rebuilt properly when they become live NeilBrown
2006-10-23  7:07 ` [PATCH 002 of 4] md: Simplify checking of available size when resizing an array NeilBrown
2006-10-23  7:08 ` [PATCH 003 of 4] md: Fix up maintenance of ->degraded in multipath NeilBrown
2006-10-23  7:08 ` [PATCH 004 of 4] md: Fix printk format warnings, seen on powerpc64: NeilBrown

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).