From: Adam Kwolek Date: Fri, 28 Jan 2011 13:37:51 +0000 (+0100) Subject: imsm: FIX: not all disks are released in free_imsm_disks() X-Git-Tag: mdadm-3.2~33 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cb82edca142b22b005a035a2f9678c3606e60339;p=thirdparty%2Fmdadm.git imsm: FIX: not all disks are released in free_imsm_disks() Adding spare disks to imsm container fails due to problem with writing new_dev to sysfs. This problem was caused by not closed handle (opened exclusively) in Manage.c:803. Disk handle was not closed by free_imsm(). This is due to not released disk_mgmt_list in free_imsm_disks(). Proper release of imsm metadata allows for spare adding without problems. Memory leak was fixed also. Signed-off-by: Adam Kwolek Signed-off-by: NeilBrown --- diff --git a/super-intel.c b/super-intel.c index cc471991..f578057d 100644 --- a/super-intel.c +++ b/super-intel.c @@ -2687,6 +2687,11 @@ static void free_imsm_disks(struct intel_super *super) super->disks = d->next; __free_imsm_disk(d); } + while (super->disk_mgmt_list) { + d = super->disk_mgmt_list; + super->disk_mgmt_list = d->next; + __free_imsm_disk(d); + } while (super->missing) { d = super->missing; super->missing = d->next;