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;