]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
DDF: compare_super_ddf: fix sequence number check
authormwilck@arcor.de <mwilck@arcor.de>
Sat, 14 Sep 2013 20:47:12 +0000 (22:47 +0200)
committerNeilBrown <neilb@suse.de>
Wed, 16 Oct 2013 04:29:43 +0000 (15:29 +1100)
The sequence number check in compare_super_ddf was broken,
anchor sequence number is always -1.

With this patch, mdadm will refuse to add a disk with non-matching
sequence number.

This fixes Francis Moreau's problem reported with subject
"mdadm 3.3 fails to kick out non fresh disk".

FIXME: More work is needed here. Currently mdadm won't even add the
disk to the container, that's wrong. It should be added as a spare.

Signed-off-by: NeilBrown <neilb@suse.de>
super-ddf.c

index 3673cb33cfeebd17c7fa1a86089a2bbc36d85a3a..002b2717fc581f2b3c7f305ffe7bbcd5cdc68d05 100644 (file)
@@ -3892,10 +3892,10 @@ static int compare_super_ddf(struct supertype *st, struct supertype *tst)
        if (memcmp(first->anchor.guid, second->anchor.guid, DDF_GUID_LEN) != 0)
                return 2;
 
-       if (!be32_eq(first->anchor.seq, second->anchor.seq)) {
-               dprintf("%s: sequence number mismatch %u/%u\n", __func__,
-                       be32_to_cpu(first->anchor.seq),
-                       be32_to_cpu(second->anchor.seq));
+       if (!be32_eq(first->active->seq, second->active->seq)) {
+               dprintf("%s: sequence number mismatch %u<->%u\n", __func__,
+                       be32_to_cpu(first->active->seq),
+                       be32_to_cpu(second->active->seq));
                return 3;
        }
        if (first->max_part != second->max_part ||