summaryrefslogtreecommitdiff
path: root/Assemble.c
diff options
context:
space:
mode:
authorAdam Kwolek <adam.kwolek@intel.com>2011-06-08 17:11:11 +1000
committerNeilBrown <neilb@suse.de>2011-06-08 17:11:11 +1000
commitba53ea59adab4d08bb8ac1e15b39a9389ba26950 (patch)
tree717a5a766d27e5713a50d20534a829601a2b75e8 /Assemble.c
parentc47b0ff69a50d6b74e3ad39e31826b5b90b370df (diff)
Add reshape restart support for external metadata
Patch introduces support for reshape process restart for external metadata using metadata specific data handling methods. It introduces recover_backup() function that restores array to stable state It is equivalent to Grow_restart() functionality for native metadata. Signed-off-by: Maciej Trela <maciej.trela@intel.com> Signed-off-by: Adam Kwolek <adam.kwolek@intel.com> Signed-off-by: Krzysztof Wojcik <krzysztof.wojcik@intel.com> Signed-off-by: NeilBrown <neilb@suse.de>
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)