From: Neil Brown <neilb@suse.de>
To: Frank Corrao <fcorrao@temp555.com>
Cc: linux-raid@vger.kernel.org
Subject: Re: reshaping raid6 in-place
Date: Thu, 13 May 2010 12:08:08 +1000 [thread overview]
Message-ID: <20100513120808.4129aa40@notabene.brown> (raw)
In-Reply-To: <alpine.LRH.2.00.1005121857150.2432@appaloosa.temp555.com>
On Wed, 12 May 2010 19:10:35 -0400 (EDT)
Frank Corrao <fcorrao@temp555.com> wrote:
> I have a 5-disk raid5 array which I recently reshaped to raid6 while
> simultaneously adding a 6th disk. mdadm (3.1.1) reported that the
> kernel I was running at the time (2.6.30) wasn't safe to perform the
> in-place portion of the reshaping. The array was partitionally
> converted to raid6, but I believe the Q blocks are all on the last
> device I added. mdadm seems to report the algorithm as
> left-symmetric-6 as opposed to left-symmetric. Today I upgraded to
> 2.6.32 and mdadm 3.1.2 and attempted to complete the re-shaping but ran
> into a snag:
>
> $ sudo ./mdadm -v --grow /dev/md2 -l 6 -n 6 -p left-symmetric
> mdadm: /dev/md2: Something wrong - reshape aborted
>
> Is my syntax correct?
>
> Frank
This is a 32bit host isn't it??? You would have thought I would have learned
by now, but it seems not. 'blocks' in Grow.c is "unsigned long" and should
really be "unsigned long long".
Also your syntax is incomplete. You need a backup-file for that reshape.
mdadm would have told you that if it hadn't confused itself first.
This patch should help you.
NeilBrown
diff --git a/Grow.c b/Grow.c
index 0916c5d..d1a7b63 100644
--- a/Grow.c
+++ b/Grow.c
@@ -418,15 +418,15 @@ int bsb_csum(char *buf, int len)
return __cpu_to_le32(csum);
}
-static int child_grow(int afd, struct mdinfo *sra, unsigned long blocks,
+static int child_grow(int afd, struct mdinfo *sra, unsigned long long blocks,
int *fds, unsigned long long *offsets,
int disks, int chunk, int level, int layout, int data,
int dests, int *destfd, unsigned long long *destoffsets);
-static int child_shrink(int afd, struct mdinfo *sra, unsigned long blocks,
+static int child_shrink(int afd, struct mdinfo *sra, unsigned long long blocks,
int *fds, unsigned long long *offsets,
int disks, int chunk, int level, int layout, int data,
int dests, int *destfd, unsigned long long *destoffsets);
-static int child_same_size(int afd, struct mdinfo *sra, unsigned long blocks,
+static int child_same_size(int afd, struct mdinfo *sra, unsigned long long blocks,
int *fds, unsigned long long *offsets,
unsigned long long start,
int disks, int chunk, int level, int layout, int data,
@@ -514,7 +514,7 @@ int Grow_reshape(char *devname, int fd, int quiet, char *backup_file,
int nrdisks;
int err;
int frozen;
- unsigned long a,b, blocks, stripes;
+ unsigned long long a,b, blocks, stripes;
int cache;
unsigned long long array_size;
int changed = 0;
@@ -1262,7 +1262,7 @@ int Grow_reshape(char *devname, int fd, int quiet, char *backup_file,
/* FIXME return status is never checked */
int grow_backup(struct mdinfo *sra,
unsigned long long offset, /* per device */
- unsigned long stripes, /* per device */
+ unsigned long long stripes, /* per device */
int *sources, unsigned long long *offsets,
int disks, int chunk, int level, int layout,
int dests, int *destfd, unsigned long long *destoffsets,
@@ -1522,7 +1522,7 @@ static void validate(int afd, int bfd, unsigned long long offset)
}
}
-static int child_grow(int afd, struct mdinfo *sra, unsigned long stripes,
+static int child_grow(int afd, struct mdinfo *sra, unsigned long long stripes,
int *fds, unsigned long long *offsets,
int disks, int chunk, int level, int layout, int data,
int dests, int *destfd, unsigned long long *destoffsets)
@@ -1550,7 +1550,7 @@ static int child_grow(int afd, struct mdinfo *sra, unsigned long stripes,
return 1;
}
-static int child_shrink(int afd, struct mdinfo *sra, unsigned long stripes,
+static int child_shrink(int afd, struct mdinfo *sra, unsigned long long stripes,
int *fds, unsigned long long *offsets,
int disks, int chunk, int level, int layout, int data,
int dests, int *destfd, unsigned long long *destoffsets)
@@ -1586,14 +1586,14 @@ static int child_shrink(int afd, struct mdinfo *sra, unsigned long stripes,
return 1;
}
-static int child_same_size(int afd, struct mdinfo *sra, unsigned long stripes,
+static int child_same_size(int afd, struct mdinfo *sra, unsigned long long stripes,
int *fds, unsigned long long *offsets,
unsigned long long start,
int disks, int chunk, int level, int layout, int data,
int dests, int *destfd, unsigned long long *destoffsets)
{
unsigned long long size;
- unsigned long tailstripes = stripes;
+ unsigned long long tailstripes = stripes;
int part;
char *buf;
unsigned long long speed;
@@ -1960,7 +1960,7 @@ int Grow_continue(int mdfd, struct supertype *st, struct mdinfo *info,
int backup_list[1];
unsigned long long backup_offsets[1];
int odisks, ndisks, ochunk, nchunk,odata,ndata;
- unsigned long a,b,blocks,stripes;
+ unsigned long long a,b,blocks,stripes;
int backup_fd;
int *fds;
unsigned long long *offsets;
next prev parent reply other threads:[~2010-05-13 2:08 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-05-12 23:10 reshaping raid6 in-place Frank Corrao
2010-05-13 2:08 ` Neil Brown [this message]
2010-05-13 2:41 ` Frank Corrao
2010-05-13 3:18 ` Neil Brown
2010-05-13 4:04 ` Frank Corrao
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=20100513120808.4129aa40@notabene.brown \
--to=neilb@suse.de \
--cc=fcorrao@temp555.com \
--cc=linux-raid@vger.kernel.org \
/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