summaryrefslogtreecommitdiff
path: root/Assemble.c
diff options
context:
space:
mode:
Diffstat (limited to 'Assemble.c')
-rw-r--r--Assemble.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/Assemble.c b/Assemble.c
index 250a6e0e..a426afb0 100644
--- a/Assemble.c
+++ b/Assemble.c
@@ -1190,8 +1190,11 @@ int Assemble(struct supertype *st, char *mddev,
fdlist[i] = -1;
}
if (!err) {
- err = Grow_restart(st, content, fdlist, bestcnt,
- backup_file, verbose > 0);
+ if (st->ss->external && st->ss->recover_backup)
+ err = st->ss->recover_backup(st, content);
+ else
+ err = Grow_restart(st, content, fdlist, bestcnt,
+ backup_file, verbose > 0);
if (err && invalid_backup) {
if (verbose > 0)
fprintf(stderr, Name ": continuing"
@@ -1571,8 +1574,11 @@ int assemble_container_content(struct supertype *st, int mdfd,
else
fdlist[spare++] = fd;
}
- err = Grow_restart(st, content, fdlist, spare,
- backup_file, verbose > 0);
+ if (st->ss->external && st->ss->recover_backup)
+ err = st->ss->recover_backup(st, content);
+ else
+ err = Grow_restart(st, content, fdlist, spare,
+ backup_file, verbose > 0);
while (spare > 0) {
spare--;
if (fdlist[spare] >= 0)