linux-raid.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: mwilck@arcor.de
To: neilb@suse.de, linux-raid@vger.kernel.org
Cc: mwilck@arcor.de
Subject: [PATCH 06/12] DDF: container_content_ddf: change array disk search loop
Date: Fri,  1 Mar 2013 23:28:27 +0100	[thread overview]
Message-ID: <1362176913-6804-7-git-send-email-mwilck@arcor.de> (raw)
In-Reply-To: <1362176913-6804-1-git-send-email-mwilck@arcor.de>

When searching for container elements, loop over the known phys
disks rather than the elements of the current configuration.

This patch changes nothing in the logic or return value of the code.
It just prepares extended logic for handling RAID10.

Signed-off-by: Martin Wilck <mwilck@arcor.de>
---
 super-ddf.c |   33 +++++++++++++++++++++------------
 1 files changed, 21 insertions(+), 12 deletions(-)

diff --git a/super-ddf.c b/super-ddf.c
index 5426d29..a5080dd 100644
--- a/super-ddf.c
+++ b/super-ddf.c
@@ -3051,6 +3051,17 @@ static int load_container_ddf(struct supertype *st, int fd,
 
 #endif /* MDASSEMBLE */
 
+#define NO_SUCH_REFNUM (0xFFFFFFFF)
+static unsigned int get_pd_index_from_refnum(const struct vcl *vc,
+					     __u32 refnum, unsigned int nmax)
+{
+	unsigned int i;
+	for (i = 0 ; i < nmax ; i++)
+		if (vc->conf.phys_refnum[i] == refnum)
+			return i;
+	return NO_SUCH_REFNUM;
+}
+
 static struct mdinfo *container_content_ddf(struct supertype *st, char *subarray)
 {
 	/* Given a container loaded by load_super_ddf_all,
@@ -3072,6 +3083,7 @@ static struct mdinfo *container_content_ddf(struct supertype *st, char *subarray
 		struct mdinfo *this;
 		char *ep;
 		__u32 *cptr;
+		unsigned int pd;
 
 		if (subarray &&
 		    (strtoul(subarray, &ep, 10) != vc->vcnum ||
@@ -3125,21 +3137,12 @@ static struct mdinfo *container_content_ddf(struct supertype *st, char *subarray
 			devnum2devname(st->container_dev),
 			this->container_member);
 
-		for (i = 0 ; i < ddf->mppe ; i++) {
+		for (pd = 0; pd < __be16_to_cpu(ddf->phys->used_pdes); pd++) {
 			struct mdinfo *dev;
 			struct dl *d;
 			int stt;
-			int pd;
 
-			if (vc->conf.phys_refnum[i] == 0xFFFFFFFF)
-				continue;
-
-			for (pd = __be16_to_cpu(ddf->phys->used_pdes);
-			     pd--;)
-				if (ddf->phys->entries[pd].refnum
-				    == vc->conf.phys_refnum[i])
-					break;
-			if (pd < 0)
+			if (ddf->phys->entries[pd].refnum == 0xFFFFFFFF)
 				continue;
 
 			stt = __be16_to_cpu(ddf->phys->entries[pd].state);
@@ -3147,10 +3150,16 @@ static struct mdinfo *container_content_ddf(struct supertype *st, char *subarray
 			    != DDF_Online)
 				continue;
 
+			i = get_pd_index_from_refnum(
+				vc, ddf->phys->entries[pd].refnum, ddf->mppe);
+			if (i == NO_SUCH_REFNUM)
+				continue;
+
 			this->array.working_disks++;
 
 			for (d = ddf->dlist; d ; d=d->next)
-				if (d->disk.refnum == vc->conf.phys_refnum[i])
+				if (d->disk.refnum ==
+				    ddf->phys->entries[pd].refnum)
 					break;
 			if (d == NULL)
 				/* Haven't found that one yet, maybe there are others */
-- 
1.7.3.4

  parent reply	other threads:[~2013-03-01 22:28 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-03-01 22:28 DDF / RAID10 patch series for mdadm mwilck
2013-03-01 22:28 ` [PATCH 01/12] DDF: cleanly save the secondary DDF structure mwilck
2013-03-01 22:28 ` [PATCH 02/12] DDF: use existing locations for primary and " mwilck
2013-03-01 22:28 ` [PATCH 03/12] DDF: increase seq number when writing meta data mwilck
2013-03-01 22:28 ` [PATCH 04/12] DDF: added other_bvd to struct vcl mwilck
2013-03-01 22:28 ` [PATCH 05/12] DDF: load_ddf_local: store VD conf for other BVDs mwilck
2013-03-01 22:28 ` mwilck [this message]
2013-03-01 22:28 ` [PATCH 07/12] DDF: container_content_ddf: check for secondary RAID mwilck
2013-03-01 22:28 ` [PATCH 08/12] DDF: container_content_ddf: handle RAID layout for RAID10 mwilck
2013-03-01 22:28 ` [PATCH 09/12] DDF: __write_init_super_ddf: use correct VD conf mwilck
2013-03-01 22:28 ` [PATCH 10/12] DDF: add sanity checks in compare_super_ddf mwilck
2013-03-01 22:28 ` [PATCH 11/12] DDF: compare_super_ddf: merge local info of other superblock mwilck
2013-03-01 22:28 ` [PATCH 12/12] Detail.c: call load_container for container subarrays mwilck
2013-03-02  7:47   ` Paul Menzel
2013-03-04  5:22 ` DDF / RAID10 patch series for mdadm NeilBrown
2013-03-06 18:26   ` Martin Wilck

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1362176913-6804-7-git-send-email-mwilck@arcor.de \
    --to=mwilck@arcor.de \
    --cc=linux-raid@vger.kernel.org \
    --cc=neilb@suse.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).