From ba53ea59adab4d08bb8ac1e15b39a9389ba26950 Mon Sep 17 00:00:00 2001 From: Adam Kwolek Date: Wed, 8 Jun 2011 17:11:11 +1000 Subject: [PATCH] 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 Signed-off-by: Adam Kwolek Signed-off-by: Krzysztof Wojcik Signed-off-by: NeilBrown --- Assemble.c | 14 ++++++++++---- mdadm.h | 3 +++ 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 */ -- 2.39.2