From: NeilBrown Date: Mon, 14 Mar 2011 07:47:47 +0000 (+1100) Subject: ddf: set vcnum correctly when creating a new virtual device in conflist X-Git-Tag: mdadm-3.1.5~17 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1502a43a08d0648a6b03d89b7cf189f15bea8647;p=thirdparty%2Fmdadm.git ddf: set vcnum correctly when creating a new virtual device in conflist We weren't setting ->vcnum at all when an array was added. This meant that a subsequent device failure could be assigned to the wrong array. Reported-by: Albert Pauw Signed-off-by: NeilBrown --- diff --git a/super-ddf.c b/super-ddf.c index 8cc738ab..be15e43e 100644 --- a/super-ddf.c +++ b/super-ddf.c @@ -3417,6 +3417,14 @@ static void ddf_process_update(struct supertype *st, memcpy(&vcl->conf, vc, update->len); vcl->lba_offset = (__u64*) &vcl->conf.phys_refnum[mppe]; + for (ent = 0; + ent < __be16_to_cpu(ddf->virt->populated_vdes); + ent++) + if (memcmp(vc->guid, ddf->virt->entries[ent].guid, + DDF_GUID_LEN) == 0) { + vcl->vcnum = ent; + break; + } ddf->conflist = vcl; } /* Now make sure vlist is correct for each dl. */