Create: allow chunksize to be non-power-of-2.
RAID0 has accepted chunksizes that are not a power of 2 since 2.6.30. So it time mdadm allowed that to be used. Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
parent
dec18cae72
commit
a252c07814
4
Build.c
4
Build.c
|
@ -254,6 +254,10 @@ int Build(char *mddev, int chunk, int level, int layout,
|
||||||
if (ioctl(mdfd, RUN_ARRAY, ¶m)) {
|
if (ioctl(mdfd, RUN_ARRAY, ¶m)) {
|
||||||
fprintf(stderr, Name ": RUN_ARRAY failed: %s\n",
|
fprintf(stderr, Name ": RUN_ARRAY failed: %s\n",
|
||||||
strerror(errno));
|
strerror(errno));
|
||||||
|
if (chunk & (chunk-1)) {
|
||||||
|
fprintf(stderr, " : Problem may be that chunk size"
|
||||||
|
" is not a power of 2\n");
|
||||||
|
}
|
||||||
goto abort;
|
goto abort;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
4
Create.c
4
Create.c
|
@ -930,6 +930,10 @@ int Create(struct supertype *st, char *mddev,
|
||||||
if (ioctl(mdfd, RUN_ARRAY, ¶m)) {
|
if (ioctl(mdfd, RUN_ARRAY, ¶m)) {
|
||||||
fprintf(stderr, Name ": RUN_ARRAY failed: %s\n",
|
fprintf(stderr, Name ": RUN_ARRAY failed: %s\n",
|
||||||
strerror(errno));
|
strerror(errno));
|
||||||
|
if (info.array.chunk_size & (info.array.chunk_size-1)) {
|
||||||
|
fprintf(stderr, " : Problem may be that "
|
||||||
|
"chunk size is not a power of 2\n");
|
||||||
|
}
|
||||||
ioctl(mdfd, STOP_ARRAY, NULL);
|
ioctl(mdfd, STOP_ARRAY, NULL);
|
||||||
goto abort;
|
goto abort;
|
||||||
}
|
}
|
||||||
|
|
|
@ -484,6 +484,9 @@ array is 512KB. To ensure compatibility with earlier versions, the
|
||||||
default when Building and array with no persistent metadata is 64KB.
|
default when Building and array with no persistent metadata is 64KB.
|
||||||
This is only meaningful for RAID0, RAID4, RAID5, RAID6, and RAID10.
|
This is only meaningful for RAID0, RAID4, RAID5, RAID6, and RAID10.
|
||||||
|
|
||||||
|
RAID4, RAID5, RAID6, and RAID10 require the chunk size to be a power
|
||||||
|
of 2. In any case it must be a multiple of 4KB.
|
||||||
|
|
||||||
A suffix of 'M' or 'G' can be given to indicate Megabytes or
|
A suffix of 'M' or 'G' can be given to indicate Megabytes or
|
||||||
Gigabytes respectively.
|
Gigabytes respectively.
|
||||||
|
|
||||||
|
|
4
mdadm.c
4
mdadm.c
|
@ -361,12 +361,12 @@ int main(int argc, char *argv[])
|
||||||
exit(2);
|
exit(2);
|
||||||
}
|
}
|
||||||
chunk = parse_size(optarg);
|
chunk = parse_size(optarg);
|
||||||
if (chunk < 8 || ((chunk-1)&chunk)) {
|
if (chunk < 8 || (chunk&1)) {
|
||||||
fprintf(stderr, Name ": invalid chunk/rounding value: %s\n",
|
fprintf(stderr, Name ": invalid chunk/rounding value: %s\n",
|
||||||
optarg);
|
optarg);
|
||||||
exit(2);
|
exit(2);
|
||||||
}
|
}
|
||||||
/* Covert sectors to K */
|
/* Convert sectors to K */
|
||||||
chunk /= 2;
|
chunk /= 2;
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue