Dan Williams: imsm: robustify recovery-start detection

Martin F. Krafft madduck at alioth.debian.org
Sun Aug 29 11:54:03 UTC 2010


Module: mdadm
Branch: debian/conffile-location
Commit: 4363fd80bcc9f85ed824228dee5e6350a8d73e18
URL:    http://git.debian.org/?p=pkg-mdadm/mdadm.git;a=commit;h=4363fd80bcc9f85ed824228dee5e6350a8d73e18

Author: Dan Williams <dan.j.williams at intel.com>
Date:   Wed May 26 13:33:43 2010 -0700

imsm: robustify recovery-start detection

update_recovery_start() assumed that the out-of-sync disk would always be
marked as IMSM_ORD_REBUILD in the disk_ord_tbl, but the segmentation
fault reported by Andy proves otherwise.  This might also be explained by
an interrupted rebuild and the disk has not yet been marked missing.

https://bugzilla.redhat.com/show_bug.cgi?id=592030

Reported-by: Andy Lutomirski <luto at mit.edu>
Signed-off-by: Dan Williams <dan.j.williams at intel.com>

---

 super-intel.c |    9 +++++++++
 1 files changed, 9 insertions(+), 0 deletions(-)

diff --git a/super-intel.c b/super-intel.c
index bdd7a96..dd9699d 100644
--- a/super-intel.c
+++ b/super-intel.c
@@ -4044,6 +4044,15 @@ static void update_recovery_start(struct imsm_dev *dev, struct mdinfo *array)
 			rebuild = d;
 		}
 
+	if (!rebuild) {
+		/* (?) none of the disks are marked with
+		 * IMSM_ORD_REBUILD, so assume they are missing and the
+		 * disk_ord_tbl was not correctly updated
+		 */
+		dprintf("%s: failed to locate out-of-sync disk\n", __func__);
+		return;
+	}
+
 	units = __le32_to_cpu(dev->vol.curr_migr_unit);
 	rebuild->recovery_start = units * blocks_per_migr_unit(dev);
 }




More information about the pkg-mdadm-commits mailing list