Dan Williams: teach imsm and ddf what st->subarray means at load_super time
Martin F. Krafft
madduck at alioth.debian.org
Tue Oct 27 19:45:11 UTC 2009
Module: mdadm
Branch: build
Commit: af99d9ca67a4dc898e7be1d4a947800deec93c83
URL: http://git.debian.org/?p=pkg-mdadm/mdadm.git;a=commit;h=af99d9ca67a4dc898e7be1d4a947800deec93c83
Author: Dan Williams <dan.j.williams at intel.com>
Date: Fri Jul 31 17:08:22 2009 -0700
teach imsm and ddf what st->subarray means at load_super time
RebuildMap wants to poll through mdstat and retrieve a (kernel name,
uuid, user name) tuple for each array. Teach imsm and ddf to honor
st->sub_array at ->load_super() time to set their internal subarray
pointers to the value specified in st->subarray, or return an error if
st->subarray specifies an invalid array.
Signed-off-by: Dan Williams <dan.j.williams at intel.com>
---
super-ddf.c | 12 ++++++++++++
super-intel.c | 15 ++++++++++++---
2 files changed, 24 insertions(+), 3 deletions(-)
diff --git a/super-ddf.c b/super-ddf.c
index 5ad89c2..517a586 100644
--- a/super-ddf.c
+++ b/super-ddf.c
@@ -835,6 +835,18 @@ static int load_super_ddf(struct supertype *st, int fd,
return rv;
}
+ if (st->subarray[0]) {
+ struct vcl *v;
+
+ for (v = super->conflist; v; v = v->next)
+ if (v->vcnum == atoi(st->subarray))
+ super->currentconf = v;
+ if (!super->currentconf) {
+ free(super);
+ return 1;
+ }
+ }
+
/* Should possibly check the sections .... */
st->sb = super;
diff --git a/super-intel.c b/super-intel.c
index 3abaca5..24827d0 100644
--- a/super-intel.c
+++ b/super-intel.c
@@ -2167,8 +2167,10 @@ static int load_super_imsm_all(struct supertype *st, int fd, void **sbp,
if (st->subarray[0]) {
if (atoi(st->subarray) <= super->anchor->num_raid_devs)
super->current_vol = atoi(st->subarray);
- else
+ else {
+ free_imsm(super);
return 1;
+ }
}
*sbp = super;
@@ -2193,8 +2195,6 @@ static int load_super_imsm(struct supertype *st, int fd, char *devname)
if (load_super_imsm_all(st, fd, &st->sb, devname, 1) == 0)
return 0;
#endif
- if (st->subarray[0])
- return 1; /* FIXME */
super = alloc_super(0);
if (!super) {
@@ -2215,6 +2215,15 @@ static int load_super_imsm(struct supertype *st, int fd, char *devname)
return rv;
}
+ if (st->subarray[0]) {
+ if (atoi(st->subarray) <= super->anchor->num_raid_devs)
+ super->current_vol = atoi(st->subarray);
+ else {
+ free_imsm(super);
+ return 1;
+ }
+ }
+
st->sb = super;
if (st->ss == NULL) {
st->ss = &super_imsm;
More information about the pkg-mdadm-commits
mailing list