linux-raid.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [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).