diff options
author | Dan Williams <dan.j.williams@intel.com> | 2009-12-12 13:57:25 -0700 |
---|---|---|
committer | Dan Williams <dan.j.williams@intel.com> | 2009-12-12 13:57:25 -0700 |
commit | ecf408e9149dbd6ef61fdcbc92c5816c0eb7fc84 (patch) | |
tree | 7bbcd995e62b6680e0d837a112081c244a2a4205 /super-intel.c | |
parent | ac6449bee9b40b0e8131005dc0cbe2d91a070ae2 (diff) | |
download | mdadm-ecf408e9149dbd6ef61fdcbc92c5816c0eb7fc84.tar.gz mdadm-ecf408e9149dbd6ef61fdcbc92c5816c0eb7fc84.tar.xz mdadm-ecf408e9149dbd6ef61fdcbc92c5816c0eb7fc84.zip |
imsm: fix thunderdome segfault
disk_list_get() can return NULL if:
1/ A formerly missing disk is re-added
2/ The original array has not been rebuilt, so the family number of the
missing disk still matches
3/ The metadata record of the in-sync disks are read before the missing
disk
This will result in the missing disk not adding its own serial number to
the disk_list, only its truncated value will be present.
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Diffstat (limited to 'super-intel.c')
-rw-r--r-- | super-intel.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/super-intel.c b/super-intel.c index 39a2985..2d5796f 100644 --- a/super-intel.c +++ b/super-intel.c @@ -2429,7 +2429,7 @@ imsm_thunderdome(struct intel_super **super_list, int len) struct intel_disk *idisk; idisk = disk_list_get(dl->serial, disk_list); - if (is_spare(&idisk->disk) && + if (idisk && is_spare(&idisk->disk) && !is_failed(&idisk->disk) && !is_configured(&idisk->disk)) dl->index = -1; else { |