From: NeilBrown <neilb@suse.de>
To: Adam Kwolek <adam.kwolek@intel.com>
Cc: linux-raid@vger.kernel.org, ed.ciechanowski@intel.com,
marcin.labun@intel.com
Subject: Re: [PATCH 09/14] Move restore backup code to function
Date: Wed, 21 Sep 2011 12:28:42 +1000 [thread overview]
Message-ID: <20110921122842.69aec696@notabene.brown> (raw)
In-Reply-To: <20110916115455.5201.60281.stgit@gklab-128-013.igk.intel.com>
[-- Attachment #1: Type: text/plain, Size: 5178 bytes --]
On Fri, 16 Sep 2011 13:54:55 +0200 Adam Kwolek <adam.kwolek@intel.com> wrote:
> Reshape backup should be able to be restored during reshape continuation
> also. To reuse already existing code it is moved to function.
I have applied this, but I had to fix it up a bit first.
'spare' is not the same as 'spares' - it is closer to 'next_spare'.
Thanks,
NeilBrown
>
> Signed-off-by: Adam Kwolek <adam.kwolek@intel.com>
> ---
>
> Assemble.c | 40 +++------------------------------------
> Grow.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> mdadm.h | 6 ++++++
> 3 files changed, 71 insertions(+), 37 deletions(-)
>
> diff --git a/Assemble.c b/Assemble.c
> index 66d2ee4..6188fb5 100644
> --- a/Assemble.c
> +++ b/Assemble.c
> @@ -1555,44 +1555,10 @@ int assemble_container_content(struct supertype *st, int mdfd,
>
> if (content->reshape_active) {
> int spare = content->array.raid_disks + expansion;
> - int i;
> - int *fdlist = malloc(sizeof(int) *
> - (working + expansion
> - + content->array.raid_disks));
> - for (i=0; i<spare; i++)
> - fdlist[i] = -1;
> - for (dev = content->devs; dev; dev = dev->next) {
> - char buf[20];
> - int fd;
> - sprintf(buf, "%d:%d",
> - dev->disk.major,
> - dev->disk.minor);
> - fd = dev_open(buf, O_RDWR);
> -
> - if (dev->disk.raid_disk >= 0)
> - fdlist[dev->disk.raid_disk] = fd;
> - else
> - fdlist[spare++] = fd;
> - }
> - 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)
> - close(fdlist[spare]);
> - }
> - free(fdlist);
> - if (err) {
> - fprintf(stderr, Name ": Failed to restore critical"
> - " section for reshape - sorry.\n");
> - if (!backup_file)
> - fprintf(stderr, Name ": Possibly you need"
> - " to specify a --backup-file\n");
> + if (restore_backup(st, content,
> + working,
> + spare, backup_file, verbose))
> return 1;
> - }
>
> err = Grow_continue(mdfd, st, content, backup_file);
> } else switch(content->array.level) {
> diff --git a/Grow.c b/Grow.c
> index b331287..0b96f7a 100644
> --- a/Grow.c
> +++ b/Grow.c
> @@ -3578,6 +3578,68 @@ int Grow_restart(struct supertype *st, struct mdinfo *info, int *fdlist, int cnt
> return 1;
> }
>
> +int restore_backup(struct supertype *st,
> + struct mdinfo *content,
> + int working_disks,
> + int spares,
> + char *backup_file,
> + int verbose)
> +{
> + int i;
> + int *fdlist;
> + struct mdinfo *dev;
> + int err;
> + int disk_count = working_disks + spares;
> + int next_spare = working_disks;
> +
> + dprintf("Called restore_backup()\n");
> + fdlist = malloc(sizeof(int) * disk_count);
> + if (fdlist == NULL) {
> + fprintf(stderr,
> + Name ": cannot allocate memory for disk list\n");
> + return 1;
> + }
> + for (i = 0; i < disk_count; i++)
> + fdlist[i] = -1;
> + for (dev = content->devs; dev; dev = dev->next) {
> + char buf[22];
> + int fd;
> + sprintf(buf, "%d:%d",
> + dev->disk.major,
> + dev->disk.minor);
> + fd = dev_open(buf, O_RDWR);
> +
> + if (dev->disk.raid_disk >= 0)
> + fdlist[dev->disk.raid_disk] = fd;
> + else
> + fdlist[next_spare++] = fd;
> + }
> +
> + if (st->ss->external && st->ss->recover_backup)
> + err = st->ss->recover_backup(st, content);
> + else
> + err = Grow_restart(st, content, fdlist, spares,
> + backup_file, verbose > 0);
> +
> + while (disk_count > 0) {
> + disk_count--;
> + if (fdlist[disk_count] >= 0)
> + close(fdlist[disk_count]);
> + }
> + free(fdlist);
> + if (err) {
> + fprintf(stderr, Name ": Failed to restore critical"
> + " section for reshape - sorry.\n");
> + if (!backup_file)
> + fprintf(stderr, Name ": Possibly you need"
> + " to specify a --backup-file\n");
> + return 1;
> + }
> +
> + dprintf("restore_backup() returns status OK.\n");
> + return 0;
> +}
> +
> int Grow_continue_command(char *devname, int fd,
> char *backup_file, int verbose)
> {
> diff --git a/mdadm.h b/mdadm.h
> index 7761db6..6165979 100644
> --- a/mdadm.h
> +++ b/mdadm.h
> @@ -1026,6 +1026,12 @@ extern int Grow_continue(int mdfd, struct supertype *st,
> struct mdinfo *info, char *backup_file);
> extern int Grow_continue_command(char *devname, int fd,
> char *backup_file, int verbose);
> +extern int restore_backup(struct supertype *st,
> + struct mdinfo *content,
> + int working_disks,
> + int spares,
> + char *backup_file,
> + int verbose);
>
> extern int Assemble(struct supertype *st, char *mddev,
> struct mddev_ident *ident,
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-raid" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 190 bytes --]
next prev parent reply other threads:[~2011-09-21 2:28 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-09-16 11:53 [PATCH 00/14] Series short description Adam Kwolek
2011-09-16 11:53 ` [PATCH 01/14] Stop array reshape when mounted initramfs is detected Adam Kwolek
2011-09-19 10:42 ` NeilBrown
2011-09-19 11:14 ` Kwolek, Adam
2011-09-16 11:54 ` [PATCH 02/14] Stop container reshape while using initramfs Adam Kwolek
2011-09-16 11:54 ` [PATCH 03/14] FIX: Do not unblock array accidentally Adam Kwolek
2011-09-21 2:19 ` NeilBrown
2011-09-16 11:54 ` [PATCH 04/14] Add continue option to grow command Adam Kwolek
2011-09-21 2:22 ` NeilBrown
2011-09-21 7:47 ` Kwolek, Adam
2011-09-16 11:54 ` [PATCH 05/14] Add Grow_continue_command Adam Kwolek
2011-09-16 11:54 ` [PATCH 06/14] Check and run mdmon Adam Kwolek
2011-09-16 11:54 ` [PATCH 07/14] FIX: Memory leak during Assembly Adam Kwolek
2011-09-21 2:23 ` NeilBrown
2011-09-16 11:54 ` [PATCH 08/14] Check if reshape can be restarted Adam Kwolek
2011-09-21 2:27 ` NeilBrown
2011-09-21 7:45 ` Kwolek, Adam
2011-09-16 11:54 ` [PATCH 09/14] Move restore backup code to function Adam Kwolek
2011-09-21 2:28 ` NeilBrown [this message]
2011-09-16 11:55 ` [PATCH 10/14] Perform restore backup for reshape continuation Adam Kwolek
2011-09-21 2:29 ` NeilBrown
2011-09-21 7:35 ` Kwolek, Adam
2011-09-16 11:55 ` [PATCH 11/14] Add possibility to restart reshape for native metadata Adam Kwolek
2011-09-16 11:55 ` [PATCH 12/14] Early reshape backup verification Adam Kwolek
2011-09-21 2:31 ` NeilBrown
2011-09-21 7:33 ` Kwolek, Adam
2011-09-16 11:55 ` [PATCH 13/14] Check if md allows to control reshape Adam Kwolek
2011-09-21 2:33 ` NeilBrown
2011-09-21 7:31 ` Kwolek, Adam
2011-09-21 7:51 ` NeilBrown
2011-09-16 11:55 ` [PATCH 14/14] Manual update for --continue option Adam Kwolek
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20110921122842.69aec696@notabene.brown \
--to=neilb@suse.de \
--cc=adam.kwolek@intel.com \
--cc=ed.ciechanowski@intel.com \
--cc=linux-raid@vger.kernel.org \
--cc=marcin.labun@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).