summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Build.c4
-rw-r--r--Create.c4
-rw-r--r--mdadm.8.in3
-rw-r--r--mdadm.c4
4 files changed, 13 insertions, 2 deletions
diff --git a/Build.c b/Build.c
index cb9f01e3..4338e190 100644
--- a/Build.c
+++ b/Build.c
@@ -254,6 +254,10 @@ int Build(char *mddev, int chunk, int level, int layout,
if (ioctl(mdfd, RUN_ARRAY, &param)) {
fprintf(stderr, Name ": RUN_ARRAY failed: %s\n",
strerror(errno));
+ if (chunk & (chunk-1)) {
+ fprintf(stderr, " : Problem may be that chunk size"
+ " is not a power of 2\n");
+ }
goto abort;
}
} else {
diff --git a/Create.c b/Create.c
index 9ee09280..ef60244a 100644
--- a/Create.c
+++ b/Create.c
@@ -930,6 +930,10 @@ int Create(struct supertype *st, char *mddev,
if (ioctl(mdfd, RUN_ARRAY, &param)) {
fprintf(stderr, Name ": RUN_ARRAY failed: %s\n",
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);
goto abort;
}
diff --git a/mdadm.8.in b/mdadm.8.in
index d9b51473..3fbfcce8 100644
--- a/mdadm.8.in
+++ b/mdadm.8.in
@@ -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.
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
Gigabytes respectively.
diff --git a/mdadm.c b/mdadm.c
index 662822d1..d55e9cfa 100644
--- a/mdadm.c
+++ b/mdadm.c
@@ -361,12 +361,12 @@ int main(int argc, char *argv[])
exit(2);
}
chunk = parse_size(optarg);
- if (chunk < 8 || ((chunk-1)&chunk)) {
+ if (chunk < 8 || (chunk&1)) {
fprintf(stderr, Name ": invalid chunk/rounding value: %s\n",
optarg);
exit(2);
}
- /* Covert sectors to K */
+ /* Convert sectors to K */
chunk /= 2;
continue;