From: Krzysztof Wojcik Date: Wed, 23 Mar 2011 23:15:01 +0000 (+1100) Subject: FIX: imsm: Do not change serial if disk failed X-Git-Tag: mdadm-3.2.1~9 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b4add146;p=thirdparty%2Fmdadm.git FIX: imsm: Do not change serial if disk failed This patch rollback one change connected with mdadm-OROM compatibility: adding ':0' at the end of disk serial number if disk is detected as failed. Current mdadm's implementation does not distinguish two cases when disk is marked as failed: 1. If disk is really failed- disconnected, broken 2. Just marked as failed by mdadm- using "-f" option Second case is not yet fully handled and compatible with IMSM standard. Changing serial number of existing, operational disk causes problems in "thunderdome" and "load_super" functions that use serial numbers to disks comparisons and searching. The change must be recalled until full support will be developed. Signed-off-by: Krzysztof Wojcik Signed-off-by: NeilBrown --- diff --git a/super-intel.c b/super-intel.c index 2b41e086..5f5f0d99 100644 --- a/super-intel.c +++ b/super-intel.c @@ -5218,8 +5218,6 @@ static int mark_failure(struct imsm_dev *dev, struct imsm_disk *disk, int idx) __u32 ord; int slot; struct imsm_map *map; - char buf[MAX_RAID_SERIAL_LEN+3]; - unsigned int len, shift = 0; /* new failures are always set in map[0] */ map = get_imsm_map(dev, 0); @@ -5232,11 +5230,6 @@ static int mark_failure(struct imsm_dev *dev, struct imsm_disk *disk, int idx) if (is_failed(disk) && (ord & IMSM_ORD_REBUILD)) return 0; - sprintf(buf, "%s:0", disk->serial); - if ((len = strlen(buf)) >= MAX_RAID_SERIAL_LEN) - shift = len - MAX_RAID_SERIAL_LEN + 1; - strncpy((char *)disk->serial, &buf[shift], MAX_RAID_SERIAL_LEN); - disk->status |= FAILED_DISK; set_imsm_ord_tbl_ent(map, slot, idx | IMSM_ORD_REBUILD); if (map->failed_disk_num == 0xff)