[PATCH 03/27] DDF: load_ddf_headers: use secondary header as fallback

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



When the primary header can't be read, use the secondary header
as fallback.

Signed-off-by: Martin Wilck <mwilck@xxxxxxxx>
---
 super-ddf.c |   13 +++++++++----
 1 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/super-ddf.c b/super-ddf.c
index c445df2..45522f2 100644
--- a/super-ddf.c
+++ b/super-ddf.c
@@ -601,15 +601,15 @@ static int load_ddf_headers(int fd, struct ddf_super *super, char *devname)
 				DDF_REVISION_2, super->anchor.revision,devname);
 		return 2;
 	}
+	super->active = NULL;
 	if (load_ddf_header(fd, __be64_to_cpu(super->anchor.primary_lba),
 			    dsize >> 9,  1,
 			    &super->primary, &super->anchor) == 0) {
 		if (devname)
 			pr_err("Failed to load primary DDF header "
 			       "on %s\n", devname);
-		return 2;
-	}
-	super->active = &super->primary;
+	} else
+		super->active = &super->primary;
 	if (load_ddf_header(fd, __be64_to_cpu(super->anchor.secondary_lba),
 			    dsize >> 9,  2,
 			    &super->secondary, &super->anchor)) {
@@ -619,9 +619,14 @@ static int load_ddf_headers(int fd, struct ddf_super *super, char *devname)
 		    || (__be32_to_cpu(super->primary.seq)
 			== __be32_to_cpu(super->secondary.seq) &&
 			super->primary.openflag && !super->secondary.openflag)
+		    || super->active == NULL
 			)
 			super->active = &super->secondary;
-	}
+	} else if (devname)
+		pr_err("Failed to load secondary DDF header on %s\n",
+		       devname);
+	if (super->active == NULL)
+		return 2;
 	return 0;
 }
 
-- 
1.7.1
--
To unsubscribe from this list: send the line "unsubscribe linux-raid" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux RAID Wiki]     [ATA RAID]     [Linux SCSI Target Infrastructure]     [Linux Block]     [Linux IDE]     [Linux SCSI]     [Linux Hams]     [Device Mapper]     [Device Mapper Cryptographics]     [Kernel]     [Linux Admin]     [Linux Net]     [GFS]     [RPM]     [git]     [Yosemite Forum]


  Powered by Linux