Problems with GROUP sets for ISW and DDF1

Matthias Koenig mkoenig at suse.de
Mon Jun 2 11:29:08 UTC 2008


Hi,

there seems to be a problem when detecting RAID sets of type t_group.
This affects only ISW and DDF1 metaformats, as there is a t_group
superset constructed:

# dmraid -s -g
*** Superset
name   : isw_dfjchjjhdi
size   : 625163612
stride : 0
type   : GROUP
status : ok
subsets: 1
devs   : 2
spares : 0
--> Subset
name   : isw_dfjchjjhdi_foo1
size   : 312576000
stride : 128
type   : mirror
status : ok
subsets: 0
devs   : 2
spares : 0

When one tries to specify explicitly the name of the actual RAID set,
here "isw_dfjchjjhdi_foo1", it is not found:

# dmraid -s isw_dfjchjjhdi_foo1
No RAID sets and with names: "isw_dfjchjjhdi_foo1"

The reason seems to be that group_set() calls want_set() which compares
the names, which does not match in this case and then deletes the
superset which in turn deletes the actual RAID set.
So when the search for actual wanted RAID set is done, it is already
deleted.

I am not completely sure how to fix this problem, but I propose the
following patch, which seems to work here.

Matthias

Index: 1.0.0.rc14/lib/metadata/metadata.c
===================================================================
--- 1.0.0.rc14.orig/lib/metadata/metadata.c
+++ 1.0.0.rc14/lib/metadata/metadata.c
@@ -797,6 +797,10 @@ static void want_set(struct lib_context
        if (name) {
                size_t len1 = strlen(rs->name), len2 = strlen(name);
 
+               /* Do not delete RAID sets of type t_group here */
+               if (T_GROUP(rs))
+                       return;
+ 
                if (len2 > len1 ||
                    strncmp(rs->name, name, min(len1, len2))) {
                        log_notice(lc, "dropping unwanted RAID set \"%s\"",




More information about the Ataraid-list mailing list