imsm: FIX: Restore critical section on degraded array

When during assembly degradation occurs restoring metadata critical section
fails whole assembly.
Allow for degradation during assembly and not restore data on degraded disk.

Signed-off-by: Adam Kwolek <adam.kwolek@intel.com>
Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
Adam Kwolek 2011-12-06 11:30:16 +11:00 committed by NeilBrown
parent 3f510843b1
commit f627f5ad43
1 changed files with 9 additions and 1 deletions

View File

@ -7983,6 +7983,10 @@ static void imsm_delete(struct intel_super *super, struct dl **dlp, unsigned ind
int open_backup_targets(struct mdinfo *info, int raid_disks, int *raid_fds)
{
struct mdinfo *sd;
int i;
for (i = 0; i < raid_disks; i++)
raid_fds[i] = -1;
for (sd = info->devs ; sd ; sd = sd->next) {
char *dn;
@ -8292,7 +8296,11 @@ int recover_backup_imsm(struct supertype *st, struct mdinfo *info)
if (!targets)
goto abort;
open_backup_targets(info, new_disks, targets);
if (open_backup_targets(info, new_disks, targets)) {
fprintf(stderr,
Name ": Cannot open some devices belonging to array.\n");
goto abort;
}
for (i = 0; i < new_disks; i++) {
if (targets[i] < 0) {