Re: [PATCH] second attempt at DDF1 support for dmraid

"Darrick J. Wong" <[email protected]>
Newsgroups gmane.linux.ataraid
Organization IBM LTC
Message-ID <[email protected]>
Heinz Mauelshagen wrote:
> Darrick,
> 
> this is the result of my first quick go through your code:
> 
> o streamlined various functions, e.g.
>   - introduced array for state definitions in disk_status()
>   - avoided dual find_or_alloc_set calls in ddf1_group()
>   - ...
> 
> o s/free/dbg_free/
> 
> o s/malloc/dbg_malloc/
> 
> o pretty printing

Looks good!  ddf1_group will likely change when I get my hands on a
RAID10 setup, but I'm (mostly) happy with the ddf1 driver for now.

> Please check if my patch doesn't break stuff for you and if you ike it ;-)
> 
> BTW: your code doesn't work with DELL privided DDV metadata
>      (goes into endless loop). Need to investogate more next week...

The loop that you put into disk_status() needs to increment s at the end
of the loop.  The attached patch corrects that error and adds a sanity
check in case name() returns NULL.

Can you send me a copy of this DDV metadata?  I'll send you some (big)
tarballs shortly, and off-list.

--D

_______________________________________________
Ataraid-list mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/ataraid-list
ddf6.patch (text/x-patch, 1019 B)
diff -Naurp v8.hm/lib/format/ataraid/ddf1.c v9/lib/format/ataraid/ddf1.c
--- v8.hm/lib/format/ataraid/ddf1.c	2006-05-12 14:53:21.000000000 -0700
+++ v9/lib/format/ataraid/ddf1.c	2006-05-12 14:55:07.000000000 -0700
@@ -109,6 +109,7 @@ static enum status disk_status(struct dd
 		do {
 			if (disk->state & s->flag)
 				return s->status;
+			s++;
 		} while (s->status != s_ok);
 	}
 
@@ -1129,11 +1130,17 @@ static struct raid_set *ddf1_group(struc
 	struct ddf1_phys_drive *pd;
 	struct ddf1_config_record *cr;
 	struct raid_set *rs;
+	char *set_name;
 
 	if (!(pd = get_this_phys_drive(ddf1)))
 		LOG_ERR(lc, NULL, "Cannot find physical drive description!\n");
 
-	if ((rs = find_or_alloc_raid_set(lc, name(lc, ddf1), FIND_TOP, rd,
+	set_name = name(lc, ddf1);
+	if (!set_name)
+		LOG_ERR(lc, NULL, "%s: Could not find RAID array name.\n",
+			rd->di->path);
+
+	if ((rs = find_or_alloc_raid_set(lc, set_name, FIND_TOP, rd,
 					 LC_RS(lc), NO_CREATE,
 					 NO_CREATE_ARG))) {
 		if ((cr = get_config(ddf1, pd))) {
signature.asc (application/pgp-signature, 191 B)
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2.2 (GNU/Linux)

iD8DBQFEZQ9sa6vRYYgWQuURAsHdAKChowxAMUfdhrnvPNQM4locZ5mMNwCeLxT8
E4BEbYdQ679Rl7ISRdQNoA4=
=OY0y
-----END PGP SIGNATURE-----
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.