* [PATCH 0/6] More DDF fixes and unit tests
@ 2013-07-19 19:04 mwilck
2013-07-19 19:04 ` [PATCH 1/6] DDF: err_bad_md_layout: fix return value mwilck
` (5 more replies)
0 siblings, 6 replies; 7+ messages in thread
From: mwilck @ 2013-07-19 19:04 UTC (permalink / raw)
To: neilb, linux-raid; +Cc: mwilck
Hi Neil,
here are some more fixes for the DDF patch series, and extended
DDF unit tests that helped me find the bugs.
Martin
*** BLURB HERE ***
Martin Wilck (6):
DDF: err_bad_md_layout: fix return value
DDF: kill_subarray_ddf: fix case without mdmon running
DDF: getinfo_super_ddf_bvd: fix offset calculation for SVDs
tests/10ddf-create: create RAID5 first
test: increase number of devices to 13
tests/10ddf-geometry: new unit test
super-ddf.c | 11 ++++--
test | 4 +-
tests/10ddf-create | 10 +++---
tests/10ddf-geometry | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 96 insertions(+), 11 deletions(-)
create mode 100644 tests/10ddf-geometry
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 1/6] DDF: err_bad_md_layout: fix return value
2013-07-19 19:04 [PATCH 0/6] More DDF fixes and unit tests mwilck
@ 2013-07-19 19:04 ` mwilck
2013-07-19 19:04 ` [PATCH 2/6] DDF: kill_subarray_ddf: fix case without mdmon running mwilck
` (4 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: mwilck @ 2013-07-19 19:04 UTC (permalink / raw)
To: neilb, linux-raid; +Cc: mwilck
This function must use -1 to indicate failure. Fix it.
---
super-ddf.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/super-ddf.c b/super-ddf.c
index 8c6fa6d..e23291f 100644
--- a/super-ddf.c
+++ b/super-ddf.c
@@ -500,7 +500,7 @@ static int err_bad_md_layout(const mdu_array_info_t *array)
{
pr_err("RAID%d layout %x with %d disks is unsupported for DDF\n",
array->level, array->layout, array->raid_disks);
- return DDF_INVALID_LEVEL;
+ return -1;
}
static int layout_md2ddf(const mdu_array_info_t *array,
--
1.7.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 2/6] DDF: kill_subarray_ddf: fix case without mdmon running
2013-07-19 19:04 [PATCH 0/6] More DDF fixes and unit tests mwilck
2013-07-19 19:04 ` [PATCH 1/6] DDF: err_bad_md_layout: fix return value mwilck
@ 2013-07-19 19:04 ` mwilck
2013-07-19 19:04 ` [PATCH 3/6] DDF: getinfo_super_ddf_bvd: fix offset calculation for SVDs mwilck
` (3 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: mwilck @ 2013-07-19 19:04 UTC (permalink / raw)
To: neilb, linux-raid; +Cc: mwilck
When mdmon wasn't runnning, meta data wasn't committed to disk.
Fixed.
---
super-ddf.c | 5 ++++-
1 files changed, 4 insertions(+), 1 deletions(-)
diff --git a/super-ddf.c b/super-ddf.c
index e23291f..dc3f69b 100644
--- a/super-ddf.c
+++ b/super-ddf.c
@@ -4253,8 +4253,11 @@ static int kill_subarray_ddf(struct supertype *st)
/* we use DDF_state_deleted as marker */
vd->entries[0].state = DDF_state_deleted;
append_metadata_update(st, vd, len);
- } else
+ } else {
_kill_subarray_ddf(ddf, conf->guid);
+ ddf_set_updates_pending(ddf);
+ ddf_sync_metadata(st);
+ }
return 0;
}
--
1.7.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 3/6] DDF: getinfo_super_ddf_bvd: fix offset calculation for SVDs
2013-07-19 19:04 [PATCH 0/6] More DDF fixes and unit tests mwilck
2013-07-19 19:04 ` [PATCH 1/6] DDF: err_bad_md_layout: fix return value mwilck
2013-07-19 19:04 ` [PATCH 2/6] DDF: kill_subarray_ddf: fix case without mdmon running mwilck
@ 2013-07-19 19:04 ` mwilck
2013-07-19 19:04 ` [PATCH 4/6] tests/10ddf-create: create RAID5 first mwilck
` (2 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: mwilck @ 2013-07-19 19:04 UTC (permalink / raw)
To: neilb, linux-raid; +Cc: mwilck
Fix a bug that caused the wrong conf record to be used to derive
data offset and size on secondary RAID (RAID10).
---
super-ddf.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/super-ddf.c b/super-ddf.c
index dc3f69b..d7da4c1 100644
--- a/super-ddf.c
+++ b/super-ddf.c
@@ -1881,11 +1881,11 @@ static void getinfo_super_ddf_bvd(struct supertype *st, struct mdinfo *info, cha
if (cd >= 0 && (unsigned)cd < ddf->mppe) {
info->data_offset =
- __be64_to_cpu(LBA_OFFSET(ddf, &vc->conf)[cd]);
+ __be64_to_cpu(LBA_OFFSET(ddf, conf)[cd]);
if (vc->block_sizes)
info->component_size = vc->block_sizes[cd];
else
- info->component_size = __be64_to_cpu(vc->conf.blocks);
+ info->component_size = __be64_to_cpu(conf->blocks);
}
for (dl = ddf->dlist; dl ; dl = dl->next)
--
1.7.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 4/6] tests/10ddf-create: create RAID5 first
2013-07-19 19:04 [PATCH 0/6] More DDF fixes and unit tests mwilck
` (2 preceding siblings ...)
2013-07-19 19:04 ` [PATCH 3/6] DDF: getinfo_super_ddf_bvd: fix offset calculation for SVDs mwilck
@ 2013-07-19 19:04 ` mwilck
2013-07-19 19:04 ` [PATCH 5/6] test: increase number of devices to 13 mwilck
2013-07-19 19:04 ` [PATCH 6/6] tests/10ddf-geometry: new unit test mwilck
5 siblings, 0 replies; 7+ messages in thread
From: mwilck @ 2013-07-19 19:04 UTC (permalink / raw)
To: neilb, linux-raid; +Cc: mwilck
Let the first created array be RAID5 rather than RAID0. This makes
the test harder than before, because everything after the first
Create has do be done indirectly through mdmon.
---
tests/10ddf-create | 10 +++++-----
1 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/tests/10ddf-create b/tests/10ddf-create
index 9eb1c5c..50c85ae 100644
--- a/tests/10ddf-create
+++ b/tests/10ddf-create
@@ -11,18 +11,18 @@
set -e
mdadm -CR /dev/md/ddf0 -e ddf -n 5 $dev8 $dev9 $dev10 $dev11 $dev12
-mdadm -CR r0 -l0 -n5 /dev/md/ddf0 -z 5000
-if mdadm -CR r0 -l1 -n2 /dev/md/ddf0 -z 5000
+mdadm -CR r5 -l5 -n5 /dev/md/ddf0 -z 5000
+if mdadm -CR r5 -l1 -n2 /dev/md/ddf0 -z 5000
then echo >&2 create with same name should fail ; exit 1
fi
mdadm -CR r10 -l10 -n4 -pn2 /dev/md/ddf0 -z 5000
mdadm -CR r1 -l1 -n2 /dev/md/ddf0
-mdadm -CR r5 -l5 -n3 /dev/md/ddf0
-testdev /dev/md/r0 5 5000 512
+mdadm -CR r0 -l0 -n3 /dev/md/ddf0
+testdev /dev/md/r5 4 5000 512
testdev /dev/md/r10 2 5000 512
# r0/r10 will use 4608 due to chunk size, so that leaves 23552 for the rest
testdev /dev/md/r1 1 23552 64
-testdev /dev/md/r5 2 23552 512
+testdev /dev/md/r0 3 23552 512
dd if=/dev/sda of=/dev/md/r0 || true
dd if=/dev/sda of=/dev/md/r10 || true
dd if=/dev/sda of=/dev/md/r1 || true
--
1.7.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 5/6] test: increase number of devices to 13
2013-07-19 19:04 [PATCH 0/6] More DDF fixes and unit tests mwilck
` (3 preceding siblings ...)
2013-07-19 19:04 ` [PATCH 4/6] tests/10ddf-create: create RAID5 first mwilck
@ 2013-07-19 19:04 ` mwilck
2013-07-19 19:04 ` [PATCH 6/6] tests/10ddf-geometry: new unit test mwilck
5 siblings, 0 replies; 7+ messages in thread
From: mwilck @ 2013-07-19 19:04 UTC (permalink / raw)
To: neilb, linux-raid; +Cc: mwilck
extended DDF/RAID10 tests need 6 disks for DDF.
---
test | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/test b/test
index 8a6418d..1c5aba1 100755
--- a/test
+++ b/test
@@ -64,7 +64,7 @@ config=/tmp/mdadm.conf
cleanup() {
udevadm settle
$mdadm -Ssq 2> /dev/null
- for d in 0 1 2 3 4 5 6 7 8 9 10 11 12
+ for d in 0 1 2 3 4 5 6 7 8 9 10 11 12 13
do
losetup -d /dev/loop$d ; # rm -f $targetdir/mdtest$d
rm -f /dev/disk/by-path/loop*
@@ -80,7 +80,7 @@ do_setup() {
trap ctrl_c 2
devlist=
- for d in 0 1 2 3 4 5 6 7 8 9 10 11 12
+ for d in 0 1 2 3 4 5 6 7 8 9 10 11 12 13
do
sz=$size
if [ $d -gt 7 ]; then sz=$ddfsize ; fi
--
1.7.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 6/6] tests/10ddf-geometry: new unit test
2013-07-19 19:04 [PATCH 0/6] More DDF fixes and unit tests mwilck
` (4 preceding siblings ...)
2013-07-19 19:04 ` [PATCH 5/6] test: increase number of devices to 13 mwilck
@ 2013-07-19 19:04 ` mwilck
5 siblings, 0 replies; 7+ messages in thread
From: mwilck @ 2013-07-19 19:04 UTC (permalink / raw)
To: neilb, linux-raid; +Cc: mwilck
Test various RAID geometries, creation and deletion of subarrays
---
tests/10ddf-geometry | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 82 insertions(+), 0 deletions(-)
create mode 100644 tests/10ddf-geometry
diff --git a/tests/10ddf-geometry b/tests/10ddf-geometry
new file mode 100644
index 0000000..75f5730
--- /dev/null
+++ b/tests/10ddf-geometry
@@ -0,0 +1,82 @@
+#
+# Test various RAID geometries, creation and deletion of subarrays
+#
+
+assert_fail() {
+ if mdadm "$@"; then
+ echo mdadm "$@" must fail
+ return 1
+ else
+ return 0
+ fi
+}
+
+assert_kill() {
+ local dev=$1 n=$2
+ mdadm -S $dev
+ mdadm --kill-subarray=$n /dev/md/ddf0
+ if mdadm -Dbs | grep -q $dev; then
+ echo >&2 $dev should be deleted
+ return 1
+ fi
+ return 0
+}
+
+set -e
+mdadm -CR /dev/md/ddf0 -e ddf -n 6 $dev8 $dev9 $dev10 $dev11 $dev12 $dev13
+
+# RAID1 geometries
+# Use different sizes to make offset calculation harder
+mdadm -CR l1s -l1 -n2 /dev/md/ddf0 -z 8000
+mdadm -CR l1m -l1 -n3 $dev8 $dev9 $dev10 -z 10000
+assert_fail -CR badl1 -l1 -n4 /dev/md/ddf0
+
+# RAID10 geometries
+assert_fail -CR badl10 -l10 -n3 /dev/md/ddf0
+assert_fail -CR badl10 -l10 -n5 /dev/md/ddf0
+assert_fail -CR badl10 -l10 -n4 -pn3 /dev/md/ddf0
+mdadm -CR l10_2 -l10 -n6 -pn2 /dev/md/ddf0 -z 5000
+mdadm -CR l10_3 -l10 -n6 -pn3 /dev/md/ddf0 -z 5000
+
+assert_fail -CR l10_2 -l10 -n6 -pn2 /dev/md/ddf0 -z 5000
+assert_kill /dev/md/l10_2 2
+# gone now, must be able to create it again
+mdadm -CR l10_2 -l10 -n6 -pn2 /dev/md/ddf0 -z 5000
+
+# Now stop and reassemble
+mdadm -Ss
+mdadm -A /dev/md/ddf0 $dev8 $dev9 $dev10 $dev11 $dev12 $dev13
+
+# Same as above, on inactive container
+assert_fail -CR l10_3 -l10 -n6 -pn2 /dev/md/ddf0 -z 5000
+# Kill subarray without having started anything (no mdmon)
+mdadm --kill-subarray=3 /dev/md/ddf0
+mdadm -I /dev/md/ddf0
+mdadm -CR l10_3 -l10 -n6 -pn3 /dev/md/ddf0 -z 5000
+
+assert_kill /dev/md/l10_2 2
+assert_kill /dev/md/l10_3 3
+
+# RAID5 geometries
+mdadm -CR l5la -l5 -n3 --layout=ddf-N-restart /dev/md/ddf0 -z 5000
+mdadm -CR l5ra -l5 -n3 --layout=ddf-zero-restart /dev/md/ddf0 -z 5000
+mdadm -CR l5ls -l5 -n3 --layout=ddf-N-continue /dev/md/ddf0 -z 5000
+assert_fail -CR l5rs -l5 -n3 -prs /dev/md/ddf0 -z 5000
+
+# Stop and reassemble
+mdadm -Ss
+mdadm -A /dev/md/ddf0 $dev8 $dev9 $dev10 $dev11 $dev12 $dev13
+mdadm -I /dev/md/ddf0
+
+assert_kill /dev/md/l5la 2
+assert_kill /dev/md/l5ls 4
+assert_kill /dev/md/l5ra 3
+
+# RAID6 geometries
+assert_fail -CR l6la -l6 -n3 -pla /dev/md/ddf0 -z 5000
+assert_fail -CR l6rs -l5 -n4 -prs /dev/md/ddf0 -z 5000
+mdadm -CR l6la -l6 -n4 --layout=ddf-N-restart /dev/md/ddf0 -z 5000
+mdadm -CR l6ra -l6 -n4 --layout=ddf-zero-restart $dev8 $dev9 $dev10 $dev11 -z 5000
+mdadm -CR l6ls -l6 -n4 --layout=ddf-N-continue $dev13 $dev8 $dev9 $dev12 -z 5000
+
+mdadm -Ss
--
1.7.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
end of thread, other threads:[~2013-07-19 19:04 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-07-19 19:04 [PATCH 0/6] More DDF fixes and unit tests mwilck
2013-07-19 19:04 ` [PATCH 1/6] DDF: err_bad_md_layout: fix return value mwilck
2013-07-19 19:04 ` [PATCH 2/6] DDF: kill_subarray_ddf: fix case without mdmon running mwilck
2013-07-19 19:04 ` [PATCH 3/6] DDF: getinfo_super_ddf_bvd: fix offset calculation for SVDs mwilck
2013-07-19 19:04 ` [PATCH 4/6] tests/10ddf-create: create RAID5 first mwilck
2013-07-19 19:04 ` [PATCH 5/6] test: increase number of devices to 13 mwilck
2013-07-19 19:04 ` [PATCH 6/6] tests/10ddf-geometry: new unit test mwilck
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).