Module Name:    src
Committed By:   martin
Date:           Tue Nov 11 10:31:16 UTC 2014

Modified Files:
        src/sys/dev/dkwedge [netbsd-7]: dkwedge_bsdlabel.c dkwedge_gpt.c
            dkwedge_mbr.c

Log Message:
Pull up following revision(s) (requested by mlelstv in ticket #200):
        sys/dev/dkwedge/dkwedge_bsdlabel.c: revision 1.23
        sys/dev/dkwedge/dkwedge_mbr.c: revision 1.8
        sys/dev/dkwedge/dkwedge_gpt.c: revision 1.14
Handle disks with non DEV_BSIZE sectors.
get sector size from disk structure.
Be less noisy when handling wedge name conflicts.


To generate a diff of this commit:
cvs rdiff -u -r1.19 -r1.19.4.1 src/sys/dev/dkwedge/dkwedge_bsdlabel.c
cvs rdiff -u -r1.12 -r1.12.34.1 src/sys/dev/dkwedge/dkwedge_gpt.c
cvs rdiff -u -r1.7 -r1.7.14.1 src/sys/dev/dkwedge/dkwedge_mbr.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/dev/dkwedge/dkwedge_bsdlabel.c
diff -u src/sys/dev/dkwedge/dkwedge_bsdlabel.c:1.19 src/sys/dev/dkwedge/dkwedge_bsdlabel.c:1.19.4.1
--- src/sys/dev/dkwedge/dkwedge_bsdlabel.c:1.19	Mon Mar 31 11:25:49 2014
+++ src/sys/dev/dkwedge/dkwedge_bsdlabel.c	Tue Nov 11 10:31:16 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: dkwedge_bsdlabel.c,v 1.19 2014/03/31 11:25:49 martin Exp $	*/
+/*	$NetBSD: dkwedge_bsdlabel.c,v 1.19.4.1 2014/11/11 10:31:16 martin Exp $	*/
 
 /*-
  * Copyright (c) 2004 The NetBSD Foundation, Inc.
@@ -79,7 +79,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: dkwedge_bsdlabel.c,v 1.19 2014/03/31 11:25:49 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dkwedge_bsdlabel.c,v 1.19.4.1 2014/11/11 10:31:16 martin Exp $");
 
 #include <sys/param.h>
 #ifdef _KERNEL
@@ -137,6 +137,7 @@ typedef struct mbr_args {
 	struct vnode	*vp;
 	void		*buf;
 	int		error;
+	uint32_t	secsize;
 } mbr_args_t;
 
 static const char *
@@ -283,7 +284,7 @@ validate_label(mbr_args_t *a, daddr_t la
 	int error, swapped;
 	uint16_t npartitions;
 
-	error = dkwedge_read(a->pdk, a->vp, label_sector, a->buf, DEV_BSIZE);
+	error = dkwedge_read(a->pdk, a->vp, label_sector, a->buf, a->secsize);
 	if (error) {
 		aprint_error("%s: unable to read BSD disklabel @ %" PRId64
 		    ", error = %d\n", a->pdk->dk_name, label_sector, error);
@@ -297,7 +298,7 @@ validate_label(mbr_args_t *a, daddr_t la
 	 * in the sector.
 	 */
 	lp = a->buf;
-	lp_lim = (char *)a->buf + DEV_BSIZE - DISKLABEL_MINSIZE;
+	lp_lim = (char *)a->buf + a->secsize - DISKLABEL_MINSIZE;
 	for (;; lp = (void *)((char *)lp + sizeof(uint32_t))) {
 		if ((char *)lp > (char *)lp_lim)
 			return (SCAN_CONTINUE);
@@ -316,7 +317,7 @@ validate_label(mbr_args_t *a, daddr_t la
 
 		/* Validate label length. */
 		if ((char *)lp + DISKLABEL_SIZE(npartitions) >
-		    (char *)a->buf + DEV_BSIZE) {
+		    (char *)a->buf + a->secsize) {
 			aprint_error("%s: BSD disklabel @ "
 			    "%" PRId64 "+%zd has bogus partition count (%u)\n",
 			    a->pdk->dk_name, label_sector, label_offset,
@@ -360,7 +361,7 @@ scan_mbr(mbr_args_t *a, int (*actn)(mbr_
 	this_ext = 0;
 	for (;;) {
 		a->error = dkwedge_read(a->pdk, a->vp, this_ext, a->buf,
-					DEV_BSIZE);
+					a->secsize);
 		if (a->error) {
 			aprint_error("%s: unable to read MBR @ %u, "
 			    "error = %d\n", a->pdk->dk_name, this_ext,
@@ -456,8 +457,9 @@ dkwedge_discover_bsdlabel(struct disk *p
 	int rval;
 
 	a.pdk = pdk;
+	a.secsize = DEV_BSIZE << pdk->dk_blkshift;
 	a.vp = vp;
-	a.buf = DKW_MALLOC(DEV_BSIZE);
+	a.buf = DKW_MALLOC(a.secsize);
 	a.error = 0;
 
 	/* MBR search. */

Index: src/sys/dev/dkwedge/dkwedge_gpt.c
diff -u src/sys/dev/dkwedge/dkwedge_gpt.c:1.12 src/sys/dev/dkwedge/dkwedge_gpt.c:1.12.34.1
--- src/sys/dev/dkwedge/dkwedge_gpt.c:1.12	Mon May 17 23:09:52 2010
+++ src/sys/dev/dkwedge/dkwedge_gpt.c	Tue Nov 11 10:31:16 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: dkwedge_gpt.c,v 1.12 2010/05/17 23:09:52 jakllsch Exp $	*/
+/*	$NetBSD: dkwedge_gpt.c,v 1.12.34.1 2014/11/11 10:31:16 martin Exp $	*/
 
 /*-
  * Copyright (c) 2004 The NetBSD Foundation, Inc.
@@ -34,7 +34,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: dkwedge_gpt.c,v 1.12 2010/05/17 23:09:52 jakllsch Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dkwedge_gpt.c,v 1.12.34.1 2014/11/11 10:31:16 martin Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -265,13 +265,15 @@ dkwedge_discover_gpt(struct disk *pdk, s
 		 * Try with the partition name first.  If that fails,
 		 * use the GUID string.  If that fails, punt.
 		 */
-		if ((error = dkwedge_add(&dkw)) == EEXIST) {
-			aprint_error("%s: wedge named '%s' already exists, "
-			    "trying '%s'\n", pdk->dk_name,
-			    dkw.dkw_wname, /* XXX Unicode */
-			    ent_guid_str);
+		if ((error = dkwedge_add(&dkw)) == EEXIST &&
+		    strcmp(dkw.dkw_wname, ent_guid_str) != 0) {
 			strcpy(dkw.dkw_wname, ent_guid_str);
 			error = dkwedge_add(&dkw);
+			if (!error)
+				aprint_error("%s: wedge named '%s' already "
+				    "existed, using '%s'\n", pdk->dk_name,
+				    dkw.dkw_wname, /* XXX Unicode */
+				    ent_guid_str);
 		}
 		if (error == EEXIST)
 			aprint_error("%s: wedge named '%s' already exists, "

Index: src/sys/dev/dkwedge/dkwedge_mbr.c
diff -u src/sys/dev/dkwedge/dkwedge_mbr.c:1.7 src/sys/dev/dkwedge/dkwedge_mbr.c:1.7.14.1
--- src/sys/dev/dkwedge/dkwedge_mbr.c:1.7	Sat Apr  7 05:09:09 2012
+++ src/sys/dev/dkwedge/dkwedge_mbr.c	Tue Nov 11 10:31:16 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: dkwedge_mbr.c,v 1.7 2012/04/07 05:09:09 christos Exp $	*/
+/*	$NetBSD: dkwedge_mbr.c,v 1.7.14.1 2014/11/11 10:31:16 martin Exp $	*/
 
 /*-
  * Copyright (c) 2004 The NetBSD Foundation, Inc.
@@ -34,7 +34,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: dkwedge_mbr.c,v 1.7 2012/04/07 05:09:09 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dkwedge_mbr.c,v 1.7.14.1 2014/11/11 10:31:16 martin Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -168,7 +168,7 @@ dkwedge_discover_mbr(struct disk *pdk, s
 	mbr_args_t a;
 
 	a.pdk = pdk;
-	a.secsize = pdk->dk_label->d_secsize;
+	a.secsize = DEV_BSIZE << pdk->dk_blkshift;  
 	a.vp = vp;
 	a.buf = malloc(a.secsize, M_DEVBUF, M_WAITOK);
 	a.error = 0;

Reply via email to