summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Assemble.c14
-rw-r--r--mdadm.h3
2 files changed, 13 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)
diff --git a/mdadm.h b/mdadm.h
index a6933521..e075dd2a 100644
--- a/mdadm.h
+++ b/mdadm.h
@@ -786,6 +786,9 @@ extern struct superswitch {
*/
const char *(*get_disk_controller_domain)(const char *path);
+ /* for external backup area */
+ int (*recover_backup)(struct supertype *st, struct mdinfo *info);
+
int swapuuid; /* true if uuid is bigending rather than hostendian */
int external;
const char *name; /* canonical metadata name */