summaryrefslogtreecommitdiff
path: root/super-intel.c
diff options
context:
space:
mode:
authorAdam Kwolek <adam.kwolek@intel.com>2011-12-06 11:30:16 +1100
committerNeilBrown <neilb@suse.de>2011-12-06 11:30:16 +1100
commitf627f5ad437672d58e48ed0f32a5bb285efd1d76 (patch)
tree7051617f5e0ed538980354c1ff471a6981cab300 /super-intel.c
parent3f510843b1354538270ffa64a137f2bf6b656001 (diff)
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>
Diffstat (limited to 'super-intel.c')
-rw-r--r--super-intel.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/super-intel.c b/super-intel.c
index 96104ea2..9cea2672 100644
--- a/super-intel.c
+++ b/super-intel.c
@@ -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) {