Module Name:    src
Committed By:   christos
Date:           Wed Apr  3 22:10:52 UTC 2019

Modified Files:
        src/sys/arch/alpha/alpha: disksubr.c
        src/sys/arch/amiga/amiga: disksubr.c
        src/sys/arch/arc/arc: disksubr.c
        src/sys/arch/arm/arm: disksubr.c
        src/sys/arch/atari/atari: disksubr.c
        src/sys/arch/cobalt/cobalt: disksubr.c
        src/sys/arch/evbmips/evbmips: disksubr.c
        src/sys/arch/evbmips/sbmips: disksubr.c
        src/sys/arch/evbppc/evbppc: disksubr.c
        src/sys/arch/ews4800mips/include: disklabel.h
        src/sys/arch/hp300/hp300: disksubr.c
        src/sys/arch/hpc/hpc: disksubr.c
        src/sys/arch/hppa/hppa: disksubr.c
        src/sys/arch/luna68k/luna68k: disksubr.c
        src/sys/arch/mac68k/include: disklabel.h
        src/sys/arch/mac68k/mac68k: disksubr.c
        src/sys/arch/macppc/include: disklabel.h
        src/sys/arch/mipsco/mipsco: disksubr.c
        src/sys/arch/mvme68k/mvme68k: disksubr.c
        src/sys/arch/news68k/news68k: disksubr.c
        src/sys/arch/newsmips/newsmips: disksubr.c
        src/sys/arch/next68k/next68k: disksubr.c
        src/sys/arch/ofppc/ofppc: disksubr.c
        src/sys/arch/playstation2/playstation2: disksubr.c
        src/sys/arch/pmax/pmax: disksubr.c
        src/sys/arch/sbmips/sbmips: disksubr.c
        src/sys/arch/sgimips/sgimips: disksubr.c
        src/sys/arch/sh3/sh3: disksubr.c
        src/sys/arch/vax/vax: disksubr.c
        src/sys/arch/x68k/x68k: disksubr.c
        src/sys/dev/sun: disksubr.c
        src/sys/kern: subr_disk.c subr_disk_mbr.c

Log Message:
centralize setdisklabel(9)


To generate a diff of this commit:
cvs rdiff -u -r1.41 -r1.42 src/sys/arch/alpha/alpha/disksubr.c
cvs rdiff -u -r1.69 -r1.70 src/sys/arch/amiga/amiga/disksubr.c
cvs rdiff -u -r1.29 -r1.30 src/sys/arch/arc/arc/disksubr.c
cvs rdiff -u -r1.25 -r1.26 src/sys/arch/arm/arm/disksubr.c
cvs rdiff -u -r1.43 -r1.44 src/sys/arch/atari/atari/disksubr.c
cvs rdiff -u -r1.25 -r1.26 src/sys/arch/cobalt/cobalt/disksubr.c
cvs rdiff -u -r1.17 -r1.18 src/sys/arch/evbmips/evbmips/disksubr.c
cvs rdiff -u -r1.1.1.1 -r1.2 src/sys/arch/evbmips/sbmips/disksubr.c
cvs rdiff -u -r1.17 -r1.18 src/sys/arch/evbppc/evbppc/disksubr.c
cvs rdiff -u -r1.4 -r1.5 src/sys/arch/ews4800mips/include/disklabel.h
cvs rdiff -u -r1.27 -r1.28 src/sys/arch/hp300/hp300/disksubr.c
cvs rdiff -u -r1.21 -r1.22 src/sys/arch/hpc/hpc/disksubr.c
cvs rdiff -u -r1.2 -r1.3 src/sys/arch/hppa/hppa/disksubr.c
cvs rdiff -u -r1.31 -r1.32 src/sys/arch/luna68k/luna68k/disksubr.c
cvs rdiff -u -r1.7 -r1.8 src/sys/arch/mac68k/include/disklabel.h
cvs rdiff -u -r1.57 -r1.58 src/sys/arch/mac68k/mac68k/disksubr.c
cvs rdiff -u -r1.15 -r1.16 src/sys/arch/macppc/include/disklabel.h
cvs rdiff -u -r1.27 -r1.28 src/sys/arch/mipsco/mipsco/disksubr.c
cvs rdiff -u -r1.35 -r1.36 src/sys/arch/mvme68k/mvme68k/disksubr.c
cvs rdiff -u -r1.31 -r1.32 src/sys/arch/news68k/news68k/disksubr.c
cvs rdiff -u -r1.28 -r1.29 src/sys/arch/newsmips/newsmips/disksubr.c
cvs rdiff -u -r1.29 -r1.30 src/sys/arch/next68k/next68k/disksubr.c
cvs rdiff -u -r1.28 -r1.29 src/sys/arch/ofppc/ofppc/disksubr.c
cvs rdiff -u -r1.19 -r1.20 src/sys/arch/playstation2/playstation2/disksubr.c
cvs rdiff -u -r1.54 -r1.55 src/sys/arch/pmax/pmax/disksubr.c
cvs rdiff -u -r1.21 -r1.22 src/sys/arch/sbmips/sbmips/disksubr.c
cvs rdiff -u -r1.23 -r1.24 src/sys/arch/sgimips/sgimips/disksubr.c
cvs rdiff -u -r1.29 -r1.30 src/sys/arch/sh3/sh3/disksubr.c
cvs rdiff -u -r1.53 -r1.54 src/sys/arch/vax/vax/disksubr.c
cvs rdiff -u -r1.34 -r1.35 src/sys/arch/x68k/x68k/disksubr.c
cvs rdiff -u -r1.15 -r1.16 src/sys/dev/sun/disksubr.c
cvs rdiff -u -r1.123 -r1.124 src/sys/kern/subr_disk.c
cvs rdiff -u -r1.49 -r1.50 src/sys/kern/subr_disk_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/arch/alpha/alpha/disksubr.c
diff -u src/sys/arch/alpha/alpha/disksubr.c:1.41 src/sys/arch/alpha/alpha/disksubr.c:1.42
--- src/sys/arch/alpha/alpha/disksubr.c:1.41	Sun Feb  5 21:14:11 2012
+++ src/sys/arch/alpha/alpha/disksubr.c	Wed Apr  3 18:10:49 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: disksubr.c,v 1.41 2012/02/06 02:14:11 matt Exp $ */
+/* $NetBSD: disksubr.c,v 1.42 2019/04/03 22:10:49 christos Exp $ */
 
 /*
  * Copyright (c) 1994, 1995, 1996 Carnegie-Mellon University.
@@ -29,7 +29,7 @@
 
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
 
-__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.41 2012/02/06 02:14:11 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.42 2019/04/03 22:10:49 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -141,59 +141,6 @@ done:
 }
 
 /*
- * Check new disk label for sensibility before setting it.
- */
-int
-setdisklabel(struct disklabel *olp, struct disklabel *nlp, u_long openmask, struct cpu_disklabel *clp)
-{
-	int i;
-	struct partition *opp, *npp;
-
-	/* sanity clause */
-	if (nlp->d_secpercyl == 0 || nlp->d_secsize == 0 ||
-	    (nlp->d_secsize % DEV_BSIZE) != 0)
-		return(EINVAL);
-
-#ifdef notdef
-	/* XXX WHY WAS THIS HERE?! */
-	/* special case to allow disklabel to be invalidated */
-	if (nlp->d_magic == 0xffffffff) {
-		*olp = *nlp;
-		return (0);
-	}
-#endif
-
-	if (nlp->d_magic != DISKMAGIC || nlp->d_magic2 != DISKMAGIC ||
-		dkcksum(nlp) != 0)
-		return (EINVAL);
-
-	while ((i = ffs(openmask)) != 0) {
-		i--;
-		openmask &= ~(1 << i);
-		if (nlp->d_npartitions <= i)
-			return (EBUSY);
-		opp = &olp->d_partitions[i];
-		npp = &nlp->d_partitions[i];
-		if (npp->p_offset != opp->p_offset || npp->p_size < opp->p_size)
-			return (EBUSY);
-		/*
-		* Copy internally-set partition information
-		* if new label doesn't include it.             XXX
-		*/
-		if (npp->p_fstype == FS_UNUSED && opp->p_fstype != FS_UNUSED) {
-			npp->p_fstype = opp->p_fstype;
-			npp->p_fsize = opp->p_fsize;
-			npp->p_frag = opp->p_frag;
-			npp->p_cpg = opp->p_cpg;
-		}
-	}
-	nlp->d_checksum = 0;
-	nlp->d_checksum = dkcksum(nlp);
-	*olp = *nlp;
-	return (0);
-}
-
-/*
  * Write disk label back to device after modification.
  * This means write out the rigid disk blocks to represent the
  * label.  Hope the user was careful.

Index: src/sys/arch/amiga/amiga/disksubr.c
diff -u src/sys/arch/amiga/amiga/disksubr.c:1.69 src/sys/arch/amiga/amiga/disksubr.c:1.70
--- src/sys/arch/amiga/amiga/disksubr.c:1.69	Mon Sep  3 12:29:22 2018
+++ src/sys/arch/amiga/amiga/disksubr.c	Wed Apr  3 18:10:49 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: disksubr.c,v 1.69 2018/09/03 16:29:22 riastradh Exp $	*/
+/*	$NetBSD: disksubr.c,v 1.70 2019/04/03 22:10:49 christos Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1988 Regents of the University of California.
@@ -66,7 +66,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.69 2018/09/03 16:29:22 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.70 2019/04/03 22:10:49 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -499,45 +499,6 @@ done:
 }
 
 /*
- * Check new disk label for sensibility
- * before setting it.
- */
-int
-setdisklabel(struct disklabel *olp, struct disklabel *nlp, u_long openmask, struct cpu_disklabel *clp)
-{
-	int i;
-	struct partition *opp, *npp;
-
-	if (nlp->d_magic != DISKMAGIC || nlp->d_magic2 != DISKMAGIC ||
-	    dkcksum(nlp) != 0)
-		return (EINVAL);
-	while ((i = ffs(openmask)) != 0) {
-		i--;
-		openmask &= ~(1 << i);
-		if (nlp->d_npartitions <= i)
-			return (EBUSY);
-		opp = &olp->d_partitions[i];
-		npp = &nlp->d_partitions[i];
-		if (npp->p_offset != opp->p_offset || npp->p_size < opp->p_size)
-			return (EBUSY);
-		/*
-		 * Copy internally-set partition information
-		 * if new label doesn't include it.		XXX
-		 */
-		if (npp->p_fstype == FS_UNUSED && opp->p_fstype != FS_UNUSED) {
-			npp->p_fstype = opp->p_fstype;
-			npp->p_fsize = opp->p_fsize;
-			npp->p_frag = opp->p_frag;
-			npp->p_cpg = opp->p_cpg;
-		}
-	}
- 	nlp->d_checksum = 0;
- 	nlp->d_checksum = dkcksum(nlp);
-	*olp = *nlp;
-	return (0);
-}
-
-/*
  * Write disk label back to device after modification.
  * this means write out the Rigid disk blocks to represent the
  * label.  Hope the user was carefull.

Index: src/sys/arch/arc/arc/disksubr.c
diff -u src/sys/arch/arc/arc/disksubr.c:1.29 src/sys/arch/arc/arc/disksubr.c:1.30
--- src/sys/arch/arc/arc/disksubr.c:1.29	Thu May 16 15:06:44 2013
+++ src/sys/arch/arc/arc/disksubr.c	Wed Apr  3 18:10:49 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: disksubr.c,v 1.29 2013/05/16 19:06:44 christos Exp $	*/
+/*	$NetBSD: disksubr.c,v 1.30 2019/04/03 22:10:49 christos Exp $	*/
 /*	$OpenBSD: disksubr.c,v 1.14 1997/05/08 00:14:29 deraadt Exp $	*/
 /*	NetBSD: disksubr.c,v 1.40 1999/05/06 15:45:51 christos Exp	*/
 
@@ -34,7 +34,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.29 2013/05/16 19:06:44 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.30 2019/04/03 22:10:49 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -356,61 +356,6 @@ done:
 }
 
 /*
- * Check new disk label for sensibility
- * before setting it.
- */
-int
-setdisklabel(struct disklabel *olp, struct disklabel *nlp, u_long openmask,
-    struct cpu_disklabel *osdep)
-{
-	int i;
-	struct partition *opp, *npp;
-
-	/* sanity clause */
-	if (nlp->d_secpercyl == 0 || nlp->d_secsize == 0 ||
-	    (nlp->d_secsize % DEV_BSIZE) != 0)
-		return EINVAL;
-
-	/* special case to allow disklabel to be invalidated */
-	if (nlp->d_magic == 0xffffffff) {
-		*olp = *nlp;
-		return 0;
-	}
-
-	if (nlp->d_magic != DISKMAGIC || nlp->d_magic2 != DISKMAGIC ||
-	    dkcksum(nlp) != 0)
-		return EINVAL;
-
-	/* XXX missing check if other dos partitions will be overwritten */
-
-	while (openmask != 0) {
-		i = ffs(openmask) - 1;
-		openmask &= ~(1 << i);
-		if (nlp->d_npartitions <= i)
-			return EBUSY;
-		opp = &olp->d_partitions[i];
-		npp = &nlp->d_partitions[i];
-		if (npp->p_offset != opp->p_offset || npp->p_size < opp->p_size)
-			return EBUSY;
-		/*
-		 * Copy internally-set partition information
-		 * if new label doesn't include it.		XXX
-		 */
-		if (npp->p_fstype == FS_UNUSED && opp->p_fstype != FS_UNUSED) {
-			npp->p_fstype = opp->p_fstype;
-			npp->p_fsize = opp->p_fsize;
-			npp->p_frag = opp->p_frag;
-			npp->p_cpg = opp->p_cpg;
-		}
-	}
- 	nlp->d_checksum = 0;
- 	nlp->d_checksum = dkcksum(nlp);
-	*olp = *nlp;
-	return 0;
-}
-
-
-/*
  * Write disk label back to device after modification.
  */
 int

Index: src/sys/arch/arm/arm/disksubr.c
diff -u src/sys/arch/arm/arm/disksubr.c:1.25 src/sys/arch/arm/arm/disksubr.c:1.26
--- src/sys/arch/arm/arm/disksubr.c:1.25	Fri Apr 25 16:17:28 2014
+++ src/sys/arch/arm/arm/disksubr.c	Wed Apr  3 18:10:49 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: disksubr.c,v 1.25 2014/04/25 20:17:28 martin Exp $	*/
+/*	$NetBSD: disksubr.c,v 1.26 2019/04/03 22:10:49 christos Exp $	*/
 
 /*
  * Copyright (c) 1998 Christopher G. Demetriou.  All rights reserved.
@@ -97,7 +97,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.25 2014/04/25 20:17:28 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.26 2019/04/03 22:10:49 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -264,65 +264,6 @@ done:
 
 
 /*
- * Check new disk label for sensibility
- * before setting it.
- */
-
-int
-setdisklabel(struct disklabel *olp, struct disklabel *nlp, u_long openmask,
-    struct cpu_disklabel *osdep)
-{
-	int i;
-	struct partition *opp, *npp;
-
-	/* sanity clause */
-
-	if (nlp->d_secpercyl == 0 || nlp->d_secsize == 0
-	    || (nlp->d_secsize % DEV_BSIZE) != 0)
-		return(EINVAL);
-
-	/* special case to allow disklabel to be invalidated */
-
-	if (nlp->d_magic == 0xffffffff) {
-		*olp = *nlp;
-		return (0);
-	}
-
-	if (nlp->d_magic != DISKMAGIC || nlp->d_magic2 != DISKMAGIC
-	    || dkcksum(nlp) != 0)
-		return (EINVAL);
-
-	/* XXX add check if other acorn/dos partitions will be overwritten */
-
-	while (openmask != 0) {
-		i = ffs(openmask) - 1;
-		openmask &= ~(1 << i);
-		if (nlp->d_npartitions <= i)
-			return (EBUSY);
-		opp = &olp->d_partitions[i];
-		npp = &nlp->d_partitions[i];
-		if (npp->p_offset != opp->p_offset || npp->p_size < opp->p_size)
-			return (EBUSY);
-		/*
-		 * Copy internally-set partition information
-		 * if new label doesn't include it.		XXX
-		 */
-		if (npp->p_fstype == FS_UNUSED && opp->p_fstype != FS_UNUSED) {
-			npp->p_fstype = opp->p_fstype;
-			npp->p_fsize = opp->p_fsize;
-			npp->p_frag = opp->p_frag;
-			npp->p_cpg = opp->p_cpg;
-		}
-	}
-
-	nlp->d_checksum = 0;
-	nlp->d_checksum = dkcksum(nlp);
-	*olp = *nlp;
-	return (0);
-}
-
-
-/*
  * Write disk label back to device after modification.
  */
  

Index: src/sys/arch/atari/atari/disksubr.c
diff -u src/sys/arch/atari/atari/disksubr.c:1.43 src/sys/arch/atari/atari/disksubr.c:1.44
--- src/sys/arch/atari/atari/disksubr.c:1.43	Tue Apr 13 07:22:22 2010
+++ src/sys/arch/atari/atari/disksubr.c	Wed Apr  3 18:10:49 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: disksubr.c,v 1.43 2010/04/13 11:22:22 tsutsui Exp $	*/
+/*	$NetBSD: disksubr.c,v 1.44 2019/04/03 22:10:49 christos Exp $	*/
 
 /*
  * Copyright (c) 1995 Leo Weppelman.
@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.43 2010/04/13 11:22:22 tsutsui Exp $");
+__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.44 2019/04/03 22:10:49 christos Exp $");
 
 #ifndef DISKLABEL_NBDA
 #define	DISKLABEL_NBDA	/* required */
@@ -135,58 +135,6 @@ readdisklabel(dev_t dev, void (*strat)(s
 }
 
 /*
- * Check new disk label for sensibility before setting it.
- */
-int
-setdisklabel(struct disklabel *olp, struct disklabel *nlp, u_long openmask,
-    struct cpu_disklabel *clp)
-{
-
-	/* special case to allow disklabel to be invalidated */
-	if (nlp->d_magic == 0xffffffff) {
-		*olp = *nlp;
-		return 0;
-	}
-
-	/* sanity clause */
-	if (nlp->d_secpercyl == 0 || nlp->d_npartitions > MAXPARTITIONS ||
-	    nlp->d_secsize  == 0 || (nlp->d_secsize % DEV_BSIZE) != 0 ||
-	    nlp->d_magic != DISKMAGIC || nlp->d_magic2 != DISKMAGIC ||
-	    dkcksum(nlp) != 0)
-		return EINVAL;
-
-#ifdef DISKLABEL_AHDI
-	if (clp && clp->cd_bblock)
-		ck_label(nlp, clp);
-#endif
-	while (openmask) {
-		struct partition *op, *np;
-		int i = ffs(openmask) - 1;
-		openmask &= ~(1 << i);
-		if (i >= nlp->d_npartitions)
-			return EBUSY;
-		op = &olp->d_partitions[i];
-		np = &nlp->d_partitions[i];
-		if (np->p_offset != op->p_offset || np->p_size < op->p_size)
-			return EBUSY;
-		/*
-		 * Copy internally-set partition information
-		 * if new label doesn't include it.		XXX
-		 */
-		if (np->p_fstype == FS_UNUSED && op->p_fstype != FS_UNUSED) {
-			np->p_fstype = op->p_fstype;
-			np->p_fsize  = op->p_fsize;
-			np->p_frag   = op->p_frag;
-			np->p_cpg    = op->p_cpg;
-		}
-	}
- 	nlp->d_checksum = 0;
- 	nlp->d_checksum = dkcksum(nlp);
-	*olp = *nlp;
-	return 0;
-}
-
-/*
  * Write disk label back to device after modification.
  */
 int

Index: src/sys/arch/cobalt/cobalt/disksubr.c
diff -u src/sys/arch/cobalt/cobalt/disksubr.c:1.25 src/sys/arch/cobalt/cobalt/disksubr.c:1.26
--- src/sys/arch/cobalt/cobalt/disksubr.c:1.25	Thu May 16 15:06:44 2013
+++ src/sys/arch/cobalt/cobalt/disksubr.c	Wed Apr  3 18:10:50 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: disksubr.c,v 1.25 2013/05/16 19:06:44 christos Exp $	*/
+/*	$NetBSD: disksubr.c,v 1.26 2019/04/03 22:10:50 christos Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1988 Regents of the University of California.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.25 2013/05/16 19:06:44 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.26 2019/04/03 22:10:50 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -258,61 +258,6 @@ done:
 }
 
 /*
- * Check new disk label for sensibility
- * before setting it.
- */
-int
-setdisklabel(struct disklabel *olp, struct disklabel *nlp, u_long openmask,
-    struct cpu_disklabel *osdep)
-{
-	int i;
-	struct partition *opp, *npp;
-
-	/* sanity clause */
-	if (nlp->d_secpercyl == 0 || nlp->d_secsize == 0 ||
-	    (nlp->d_secsize % DEV_BSIZE) != 0)
-			return EINVAL;
-
-	/* special case to allow disklabel to be invalidated */
-	if (nlp->d_magic == 0xffffffff) {
-		*olp = *nlp;
-		return 0;
-	}
-
-	if (nlp->d_magic != DISKMAGIC || nlp->d_magic2 != DISKMAGIC ||
-	    dkcksum(nlp) != 0)
-		return EINVAL;
-
-	/* XXX missing check if other dos partitions will be overwritten */
-
-	while (openmask != 0) {
-		i = ffs(openmask) - 1;
-		openmask &= ~(1 << i);
-		if (nlp->d_npartitions <= i)
-			return EBUSY;
-		opp = &olp->d_partitions[i];
-		npp = &nlp->d_partitions[i];
-		if (npp->p_offset != opp->p_offset || npp->p_size < opp->p_size)
-			return EBUSY;
-		/*
-		 * Copy internally-set partition information
-		 * if new label doesn't include it.		XXX
-		 */
-		if (npp->p_fstype == FS_UNUSED && opp->p_fstype != FS_UNUSED) {
-			npp->p_fstype = opp->p_fstype;
-			npp->p_fsize = opp->p_fsize;
-			npp->p_frag = opp->p_frag;
-			npp->p_cpg = opp->p_cpg;
-		}
-	}
-	nlp->d_checksum = 0;
-	nlp->d_checksum = dkcksum(nlp);
-	*olp = *nlp;
-	return 0;
-}
-
-
-/*
  * Write disk label back to device after modification.
  */
 int

Index: src/sys/arch/evbmips/evbmips/disksubr.c
diff -u src/sys/arch/evbmips/evbmips/disksubr.c:1.17 src/sys/arch/evbmips/evbmips/disksubr.c:1.18
--- src/sys/arch/evbmips/evbmips/disksubr.c:1.17	Wed Jan  2 06:48:24 2008
+++ src/sys/arch/evbmips/evbmips/disksubr.c	Wed Apr  3 18:10:50 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: disksubr.c,v 1.17 2008/01/02 11:48:24 ad Exp $ */
+/* $NetBSD: disksubr.c,v 1.18 2019/04/03 22:10:50 christos Exp $ */
 
 /*
  * Copyright (c) 1982, 1986, 1988 Regents of the University of California.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.17 2008/01/02 11:48:24 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.18 2019/04/03 22:10:50 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -146,51 +146,6 @@ done:
 }
 
 /*
- * Check new disk label for sensibility before setting it.
- */
-int
-setdisklabel(struct disklabel *olp, struct disklabel *nlp, u_long openmask,
-    struct cpu_disklabel *clp)
-{
-	int i;
-	struct partition *opp, *npp;
-
-	/* sanity clause */
-	if (nlp->d_secpercyl == 0 || nlp->d_secsize == 0 ||
-	    (nlp->d_secsize % DEV_BSIZE) != 0)
-		return(EINVAL);
-
-	if (nlp->d_magic != DISKMAGIC || nlp->d_magic2 != DISKMAGIC ||
-	    dkcksum(nlp) != 0)
-		return (EINVAL);
-
-	while ((i = ffs(openmask)) != 0) {
-		i--;
-		openmask &= ~(1 << i);
-		if (nlp->d_npartitions <= i)
-			return (EBUSY);
-		opp = &olp->d_partitions[i];
-		npp = &nlp->d_partitions[i];
-		if (npp->p_offset != opp->p_offset || npp->p_size < opp->p_size)
-			return (EBUSY);
-		/*
-		 * Copy internally-set partition information
-		 * if new label doesn't include it.		XXX
-		 */
-		if (npp->p_fstype == FS_UNUSED && opp->p_fstype != FS_UNUSED) {
-			npp->p_fstype = opp->p_fstype;
-			npp->p_fsize = opp->p_fsize;
-			npp->p_frag = opp->p_frag;
-			npp->p_cpg = opp->p_cpg;
-		}
-	}
- 	nlp->d_checksum = 0;
- 	nlp->d_checksum = dkcksum(nlp);
-	*olp = *nlp;
-	return (0);
-}
-
-/*
  * Write disk label back to device after modification.
  * this means write out the Rigid disk blocks to represent the 
  * label.  Hope the user was carefull.

Index: src/sys/arch/evbmips/sbmips/disksubr.c
diff -u src/sys/arch/evbmips/sbmips/disksubr.c:1.1.1.1 src/sys/arch/evbmips/sbmips/disksubr.c:1.2
--- src/sys/arch/evbmips/sbmips/disksubr.c:1.1.1.1	Mon Jul 24 04:56:29 2017
+++ src/sys/arch/evbmips/sbmips/disksubr.c	Wed Apr  3 18:10:50 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: disksubr.c,v 1.1.1.1 2017/07/24 08:56:29 mrg Exp $ */
+/* $NetBSD: disksubr.c,v 1.2 2019/04/03 22:10:50 christos Exp $ */
 
 /*
  * Copyright (c) 1982, 1986, 1988 Regents of the University of California.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.1.1.1 2017/07/24 08:56:29 mrg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.2 2019/04/03 22:10:50 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -261,60 +261,6 @@ done:
 }
 
 /*
- * Check new disk label for sensibility
- * before setting it.
- */
-int
-setdisklabel(struct disklabel *olp, struct disklabel *nlp, u_long openmask, struct cpu_disklabel *osdep)
-{
-	int i;
-	struct partition *opp, *npp;
-
-	/* sanity clause */
-	if (nlp->d_secpercyl == 0 || nlp->d_secsize == 0
-		|| (nlp->d_secsize % DEV_BSIZE) != 0)
-			return(EINVAL);
-
-	/* special case to allow disklabel to be invalidated */
-	if (nlp->d_magic == 0xffffffff) {
-		*olp = *nlp;
-		return (0);
-	}
-
-	if (nlp->d_magic != DISKMAGIC || nlp->d_magic2 != DISKMAGIC ||
-	    dkcksum(nlp) != 0)
-		return (EINVAL);
-
-	/* XXX missing check if other dos partitions will be overwritten */
-
-	while (openmask != 0) {
-		i = ffs(openmask) - 1;
-		openmask &= ~(1 << i);
-		if (nlp->d_npartitions <= i)
-			return (EBUSY);
-		opp = &olp->d_partitions[i];
-		npp = &nlp->d_partitions[i];
-		if (npp->p_offset != opp->p_offset || npp->p_size < opp->p_size)
-			return (EBUSY);
-		/*
-		 * Copy internally-set partition information
-		 * if new label doesn't include it.		XXX
-		 */
-		if (npp->p_fstype == FS_UNUSED && opp->p_fstype != FS_UNUSED) {
-			npp->p_fstype = opp->p_fstype;
-			npp->p_fsize = opp->p_fsize;
-			npp->p_frag = opp->p_frag;
-			npp->p_cpg = opp->p_cpg;
-		}
-	}
- 	nlp->d_checksum = 0;
- 	nlp->d_checksum = dkcksum(nlp);
-	*olp = *nlp;
-	return (0);
-}
-
-
-/*
  * Write disk label back to device after modification.
  */
 int

Index: src/sys/arch/evbppc/evbppc/disksubr.c
diff -u src/sys/arch/evbppc/evbppc/disksubr.c:1.17 src/sys/arch/evbppc/evbppc/disksubr.c:1.18
--- src/sys/arch/evbppc/evbppc/disksubr.c:1.17	Fri Jan 18 09:04:16 2013
+++ src/sys/arch/evbppc/evbppc/disksubr.c	Wed Apr  3 18:10:50 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: disksubr.c,v 1.17 2013/01/18 14:04:16 kiyohara Exp $	*/
+/*	$NetBSD: disksubr.c,v 1.18 2019/04/03 22:10:50 christos Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1988 Regents of the University of California.
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.17 2013/01/18 14:04:16 kiyohara Exp $");
+__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.18 2019/04/03 22:10:50 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -155,57 +155,6 @@ done:
 	return (msg);
 }
 
-/*
- * Check new disk label for sensibility before setting it.
- */
-int
-setdisklabel(struct disklabel *olp, struct disklabel *nlp, u_long openmask,
-	     struct cpu_disklabel *osdep)
-{
-	int i;
-	struct partition *opp, *npp;
-
-	/* sanity clause */
-	if (nlp->d_secpercyl == 0 || nlp->d_secsize == 0 ||
-	    (nlp->d_secsize % DEV_BSIZE) != 0)
-		return(EINVAL);
-
-	/* special case to allow disklabel to be invalidated */
-	if (nlp->d_magic == 0xffffffff) {
-		*olp = *nlp;
-		return (0);
-	}
-
-	if (nlp->d_magic != DISKMAGIC || nlp->d_magic2 != DISKMAGIC ||
-	    dkcksum(nlp) != 0)
-		return (EINVAL);
-
-	while (openmask != 0) {
-		i = ffs(openmask) - 1;
-		openmask &= ~(1 << i);
-		if (nlp->d_npartitions <= i)
-			return (EBUSY);
-		opp = &olp->d_partitions[i];
-		npp = &nlp->d_partitions[i];
-		if (npp->p_offset != opp->p_offset || npp->p_size < opp->p_size)
-			return (EBUSY);
-		/*
-		 * Copy internally-set partition information
-		 * if new label doesn't include it.		XXX
-		 */
-		if (npp->p_fstype == FS_UNUSED && opp->p_fstype != FS_UNUSED) {
-			npp->p_fstype = opp->p_fstype;
-			npp->p_fsize = opp->p_fsize;
-			npp->p_frag = opp->p_frag;
-			npp->p_cpg = opp->p_cpg;
-		}
-	}
- 	nlp->d_checksum = 0;
- 	nlp->d_checksum = dkcksum(nlp);
-	*olp = *nlp;
-	return (0);
-}
-
 
 /*
  * Write disk label back to device after modification.

Index: src/sys/arch/ews4800mips/include/disklabel.h
diff -u src/sys/arch/ews4800mips/include/disklabel.h:1.4 src/sys/arch/ews4800mips/include/disklabel.h:1.5
--- src/sys/arch/ews4800mips/include/disklabel.h:1.4	Tue Aug 30 08:39:54 2011
+++ src/sys/arch/ews4800mips/include/disklabel.h	Wed Apr  3 18:10:49 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: disklabel.h,v 1.4 2011/08/30 12:39:54 bouyer Exp $	*/
+/*	$NetBSD: disklabel.h,v 1.5 2019/04/03 22:10:49 christos Exp $	*/
 
 /*-
  * Copyright (c) 2004 The NetBSD Foundation, Inc.
@@ -74,6 +74,9 @@ void disklabel_to_vtoc(struct cpu_diskla
 void vtoc_to_disklabel(struct cpu_disklabel *, struct disklabel *);
 void disklabel_set_default(struct disklabel *);
 bool disklabel_sanity(struct disklabel *);
+
+#define __HAVE_SETDISKLABEL
 #endif
 
+
 #endif /* _EWS4800MIPS_DISKLABEL_H_ */

Index: src/sys/arch/hp300/hp300/disksubr.c
diff -u src/sys/arch/hp300/hp300/disksubr.c:1.27 src/sys/arch/hp300/hp300/disksubr.c:1.28
--- src/sys/arch/hp300/hp300/disksubr.c:1.27	Wed Jan  2 06:48:25 2008
+++ src/sys/arch/hp300/hp300/disksubr.c	Wed Apr  3 18:10:50 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: disksubr.c,v 1.27 2008/01/02 11:48:25 ad Exp $	*/
+/*	$NetBSD: disksubr.c,v 1.28 2019/04/03 22:10:50 christos Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1988, 1993
@@ -37,7 +37,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.27 2008/01/02 11:48:25 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.28 2019/04/03 22:10:50 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -108,45 +108,6 @@ readdisklabel(dev_t dev, void (*strat)(s
 }
 
 /*
- * Check new disk label for sensibility before setting it.
- */
-int
-setdisklabel(struct disklabel *olp, struct disklabel *nlp, u_long openmask,
-    struct cpu_disklabel *osdep)
-{
-	int i;
-	struct partition *opp, *npp;
-
-	if (nlp->d_magic != DISKMAGIC || nlp->d_magic2 != DISKMAGIC ||
-	    dkcksum(nlp) != 0)
-		return EINVAL;
-	while ((i = ffs(openmask)) != 0) {
-		i--;
-		openmask &= ~(1 << i);
-		if (nlp->d_npartitions <= i)
-			return EBUSY;
-		opp = &olp->d_partitions[i];
-		npp = &nlp->d_partitions[i];
-		if (npp->p_offset != opp->p_offset || npp->p_size < opp->p_size)
-			return EBUSY;
-		/*
-		 * Copy internally-set partition information
-		 * if new label doesn't include it.		XXX
-		 */
-		if (npp->p_fstype == FS_UNUSED && opp->p_fstype != FS_UNUSED) {
-			npp->p_fstype = opp->p_fstype;
-			npp->p_fsize = opp->p_fsize;
-			npp->p_frag = opp->p_frag;
-			npp->p_cpg = opp->p_cpg;
-		}
-	}
-	nlp->d_checksum = 0;
-	nlp->d_checksum = dkcksum(nlp);
-	*olp = *nlp;
-	return 0;
-}
-
-/*
  * Write disk label back to device after modification.
  */
 int

Index: src/sys/arch/hpc/hpc/disksubr.c
diff -u src/sys/arch/hpc/hpc/disksubr.c:1.21 src/sys/arch/hpc/hpc/disksubr.c:1.22
--- src/sys/arch/hpc/hpc/disksubr.c:1.21	Mon May 13 11:40:31 2013
+++ src/sys/arch/hpc/hpc/disksubr.c	Wed Apr  3 18:10:50 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: disksubr.c,v 1.21 2013/05/13 15:40:31 christos Exp $	*/
+/*	$NetBSD: disksubr.c,v 1.22 2019/04/03 22:10:50 christos Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1988 Regents of the University of California.
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.21 2013/05/13 15:40:31 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.22 2019/04/03 22:10:50 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -311,61 +311,6 @@ done:
 }
 
 /*
- * Check new disk label for sensibility
- * before setting it.
- */
-int
-setdisklabel(struct disklabel *olp, struct disklabel *nlp, u_long openmask,
-	     struct cpu_disklabel *osdep)
-{
-	int i;
-	struct partition *opp, *npp;
-
-	/* sanity clause */
-	if (nlp->d_secpercyl == 0 || nlp->d_secsize == 0
-		|| (nlp->d_secsize % DEV_BSIZE) != 0)
-			return(EINVAL);
-
-	/* special case to allow disklabel to be invalidated */
-	if (nlp->d_magic == 0xffffffff) {
-		*olp = *nlp;
-		return (0);
-	}
-
-	if (nlp->d_magic != DISKMAGIC || nlp->d_magic2 != DISKMAGIC ||
-	    dkcksum(nlp) != 0)
-		return (EINVAL);
-
-	/* XXX missing check if other dos partitions will be overwritten */
-
-	while (openmask != 0) {
-		i = ffs(openmask) - 1;
-		openmask &= ~(1 << i);
-		if (nlp->d_npartitions <= i)
-			return (EBUSY);
-		opp = &olp->d_partitions[i];
-		npp = &nlp->d_partitions[i];
-		if (npp->p_offset != opp->p_offset || npp->p_size < opp->p_size)
-			return (EBUSY);
-		/*
-		 * Copy internally-set partition information
-		 * if new label doesn't include it.		XXX
-		 */
-		if (npp->p_fstype == FS_UNUSED && opp->p_fstype != FS_UNUSED) {
-			npp->p_fstype = opp->p_fstype;
-			npp->p_fsize = opp->p_fsize;
-			npp->p_frag = opp->p_frag;
-			npp->p_cpg = opp->p_cpg;
-		}
-	}
- 	nlp->d_checksum = 0;
- 	nlp->d_checksum = dkcksum(nlp);
-	*olp = *nlp;
-	return (0);
-}
-
-
-/*
  * Write disk label back to device after modification.
  */
 int

Index: src/sys/arch/hppa/hppa/disksubr.c
diff -u src/sys/arch/hppa/hppa/disksubr.c:1.2 src/sys/arch/hppa/hppa/disksubr.c:1.3
--- src/sys/arch/hppa/hppa/disksubr.c:1.2	Sat Oct 18 04:33:25 2014
+++ src/sys/arch/hppa/hppa/disksubr.c	Wed Apr  3 18:10:50 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: disksubr.c,v 1.2 2014/10/18 08:33:25 snj Exp $	*/
+/*	$NetBSD: disksubr.c,v 1.3 2019/04/03 22:10:50 christos Exp $	*/
 
 /*	$OpenBSD: disksubr.c,v 1.6 2000/10/18 21:00:34 mickey Exp $	*/
 
@@ -68,7 +68,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.2 2014/10/18 08:33:25 snj Exp $");
+__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.3 2019/04/03 22:10:50 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -269,69 +269,6 @@ readliflabel(struct buf *bp, void (*stra
 }
 
 /*
- * Check new disk label for sensibility
- * before setting it.
- */
-int
-setdisklabel(struct disklabel *olp, struct disklabel *nlp, u_long openmask,
-    struct cpu_disklabel *osdep)
-{
-	int i;
-	struct partition *opp, *npp;
-
-	/* sanity clause */
-	if (nlp->d_secpercyl == 0 || nlp->d_secsize == 0 ||
-	    (nlp->d_secsize % DEV_BSIZE) != 0)
-		return(EINVAL);
-
-	/*
-	 * XXX Nice thought, but it doesn't work, if the intention was to
-	 * force a reread at the next *readdisklabel call.  That does not
-	 * happen.  There's still some use for it though as you can pseudo-
-	 * partition the disk.
-	 *
-	 * Special case to allow disklabel to be invalidated.
-	 */
-	if (nlp->d_magic == 0xffffffff) {
-		*olp = *nlp;
-		return (0);
-	}
-
-	if (nlp->d_magic != DISKMAGIC || nlp->d_magic2 != DISKMAGIC ||
-	    dkcksum(nlp) != 0)
-		return (EINVAL);
-
-	/* XXX missing check if other dos partitions will be overwritten */
-
-	while (openmask != 0) {
-		i = ffs((long)openmask) - 1;
-		openmask &= ~(1 << i);
-		if (nlp->d_npartitions <= i)
-			return (EBUSY);
-		opp = &olp->d_partitions[i];
-		npp = &nlp->d_partitions[i];
-		if (npp->p_offset != opp->p_offset ||
-		    npp->p_size < opp->p_size)
-			return (EBUSY);
-		/*
-		 * Copy internally-set partition information
-		 * if new label doesn't include it.		XXX
-		 */
-		if (npp->p_fstype == FS_UNUSED && opp->p_fstype != FS_UNUSED) {
-			npp->p_fstype = opp->p_fstype;
-			npp->p_fsize = opp->p_fsize;
-			npp->p_frag = opp->p_frag;
-			npp->p_cpg = opp->p_cpg;
-		}
-	}
-	nlp->d_checksum = 0;
-	nlp->d_checksum = dkcksum(nlp);
-	*olp = *nlp;
-	return (0);
-}
-
-
-/*
  * Write disk label back to device after modification.
  */
 int

Index: src/sys/arch/luna68k/luna68k/disksubr.c
diff -u src/sys/arch/luna68k/luna68k/disksubr.c:1.31 src/sys/arch/luna68k/luna68k/disksubr.c:1.32
--- src/sys/arch/luna68k/luna68k/disksubr.c:1.31	Fri Jan  2 14:42:05 2015
+++ src/sys/arch/luna68k/luna68k/disksubr.c	Wed Apr  3 18:10:50 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: disksubr.c,v 1.31 2015/01/02 19:42:05 christos Exp $ */
+/* $NetBSD: disksubr.c,v 1.32 2019/04/03 22:10:50 christos Exp $ */
 
 /*
  * Copyright (c) 1982, 1986, 1988 Regents of the University of California.
@@ -103,7 +103,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.31 2015/01/02 19:42:05 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.32 2019/04/03 22:10:50 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -237,50 +237,6 @@ readdisklabel(dev_t dev, void (*strat)(s
 }
 
 /*
- * Check new disk label for sensibility
- * before setting it.
- */
-int
-setdisklabel(struct disklabel *olp, struct disklabel *nlp, u_long openmask, struct cpu_disklabel *clp)
-{
-	struct partition *opp, *npp;
-	int i;
-
-	/* sanity clause */
-	if ((nlp->d_secpercyl == 0) || (nlp->d_secsize == 0) ||
-	    (nlp->d_secsize % DEV_BSIZE) != 0)
-		return (EINVAL);
-
-	/* special case to allow disklabel to be invalidated */
-	if (nlp->d_magic == 0xffffffff) {
-		*olp = *nlp;
-		return (0);
-	}
-
-	if (nlp->d_magic != DISKMAGIC ||
-	    nlp->d_magic2 != DISKMAGIC ||
-	    dkcksum(nlp) != 0)
-		return (EINVAL);
-
-	while (openmask != 0) {
-		i = ffs(openmask) - 1;
-		openmask &= ~(1 << i);
-		if (nlp->d_npartitions <= i)
-			return (EBUSY);
-		opp = &olp->d_partitions[i];
-		npp = &nlp->d_partitions[i];
-		if (npp->p_offset != opp->p_offset ||
-		    npp->p_size < opp->p_size)
-			return (EBUSY);
-	}
-
-	/* We did not modify the new label, so the checksum is OK. */
-	*olp = *nlp;
-	return (0);
-}
-
-
-/*
  * Write disk label back to device after modification.
  * Current label is already in clp->cd_block[]
  */

Index: src/sys/arch/mac68k/include/disklabel.h
diff -u src/sys/arch/mac68k/include/disklabel.h:1.7 src/sys/arch/mac68k/include/disklabel.h:1.8
--- src/sys/arch/mac68k/include/disklabel.h:1.7	Tue Aug 30 08:39:56 2011
+++ src/sys/arch/mac68k/include/disklabel.h	Wed Apr  3 18:10:49 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: disklabel.h,v 1.7 2011/08/30 12:39:56 bouyer Exp $	*/
+/*	$NetBSD: disklabel.h,v 1.8 2019/04/03 22:10:49 christos Exp $	*/
 
 /*
  * Copyright (c) 1994 Christopher G. Demetriou
@@ -174,4 +174,6 @@ struct blockzeroblock {
 #define BZB_ROOTFS	0x8000
 #define BZB_USRFS	0x4000
 
+#define __HAVE_SETDISKLABEL
+
 #endif /* _MACHINE_DISKLABEL_H_ */

Index: src/sys/arch/mac68k/mac68k/disksubr.c
diff -u src/sys/arch/mac68k/mac68k/disksubr.c:1.57 src/sys/arch/mac68k/mac68k/disksubr.c:1.58
--- src/sys/arch/mac68k/mac68k/disksubr.c:1.57	Wed Jan  2 06:48:26 2008
+++ src/sys/arch/mac68k/mac68k/disksubr.c	Wed Apr  3 18:10:50 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: disksubr.c,v 1.57 2008/01/02 11:48:26 ad Exp $	*/
+/*	$NetBSD: disksubr.c,v 1.58 2019/04/03 22:10:50 christos Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1988 Regents of the University of California.
@@ -65,7 +65,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.57 2008/01/02 11:48:26 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.58 2019/04/03 22:10:50 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -465,55 +465,7 @@ int
 setdisklabel(struct disklabel *olp, struct disklabel *nlp, u_long openmask,
     struct cpu_disklabel *osdep)
 {
-#if 0
-	int i;
-	struct partition *opp, *npp;
-
-	/* sanity clause */
-	if (nlp->d_secpercyl == 0 || nlp->d_secsize == 0 ||
-	    (nlp->d_secsize % DEV_BSIZE) != 0)
-		return(EINVAL);
-
-	/* special case to allow disklabel to be invalidated */
-	if (nlp->d_magic == 0xffffffff) {
-		*olp = *nlp;
-		return (0);
-	}
-
-	if (nlp->d_magic != DISKMAGIC || nlp->d_magic2 != DISKMAGIC ||
-	    dkcksum(nlp) != 0)
-		return (EINVAL);
-
-	/*
-	 * XXX We are missing any sort of check if other partition types,
-	 * e.g. Macintosh or (PC) BIOS, will be overwritten.
-	 */
-
-	while ((i = ffs(openmask)) != 0) {
-		i--;
-		openmask &= ~(1 << i);
-		if (nlp->d_npartitions <= i)
-			return (EBUSY);
-		opp = &olp->d_partitions[i];
-		npp = &nlp->d_partitions[i];
-		if (npp->p_offset != opp->p_offset || npp->p_size < opp->p_size)
-			return (EBUSY);
-		/*
-		 * Copy internally-set partition information
-		 * if new label doesn't include it.		XXX
-		 */
-		if (npp->p_fstype == FS_UNUSED && opp->p_fstype != FS_UNUSED) {
-			npp->p_fstype = opp->p_fstype;
-			npp->p_fsize = opp->p_fsize;
-			npp->p_frag = opp->p_frag;
-			npp->p_cpg = opp->p_cpg;
-		}
-	}
-	nlp->d_checksum = 0;
-	nlp->d_checksum = dkcksum(nlp);
-	*olp = *nlp;
-#endif
-	return (0);
+	return 0;
 }
 
 /*

Index: src/sys/arch/macppc/include/disklabel.h
diff -u src/sys/arch/macppc/include/disklabel.h:1.15 src/sys/arch/macppc/include/disklabel.h:1.16
--- src/sys/arch/macppc/include/disklabel.h:1.15	Tue Aug 30 08:39:56 2011
+++ src/sys/arch/macppc/include/disklabel.h	Wed Apr  3 18:10:49 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: disklabel.h,v 1.15 2011/08/30 12:39:56 bouyer Exp $	*/
+/*	$NetBSD: disklabel.h,v 1.16 2019/04/03 22:10:49 christos Exp $	*/
 
 /*-
  * Copyright (C) 1995, 1996 Wolfgang Solfrank.
@@ -224,4 +224,6 @@ struct blockzeroblock {
 #define BZB_USRFS	0x4000
 #define BZB_USRFS_NEW	0x0004
 
+#define __HAVE_SETDISKLABEL
+
 #endif	/* _MACHINE_DISKLABEL_H_ */

Index: src/sys/arch/mipsco/mipsco/disksubr.c
diff -u src/sys/arch/mipsco/mipsco/disksubr.c:1.27 src/sys/arch/mipsco/mipsco/disksubr.c:1.28
--- src/sys/arch/mipsco/mipsco/disksubr.c:1.27	Mon Mar 16 19:11:12 2009
+++ src/sys/arch/mipsco/mipsco/disksubr.c	Wed Apr  3 18:10:50 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: disksubr.c,v 1.27 2009/03/16 23:11:12 dsl Exp $	*/
+/*	$NetBSD: disksubr.c,v 1.28 2019/04/03 22:10:50 christos Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1988 Regents of the University of California.
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.27 2009/03/16 23:11:12 dsl Exp $");
+__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.28 2019/04/03 22:10:50 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -137,45 +137,6 @@ readdisklabel(dev_t dev, void (*strat)(s
 	return "no disk label";
 }
 
-/*
- * Check new disk label for sensibility
- * before setting it.
- */
-int
-setdisklabel(register struct disklabel *olp, register struct disklabel *nlp, u_long openmask, struct cpu_disklabel *clp)
-{
-	register int i;
-	register struct partition *opp, *npp;
-
-	if (nlp->d_magic != DISKMAGIC || nlp->d_magic2 != DISKMAGIC ||
-	    dkcksum(nlp) != 0)
-		return (EINVAL);
-	while ((i = ffs(openmask)) != 0) {
-		i--;
-		openmask &= ~(1 << i);
-		if (nlp->d_npartitions <= i)
-			return (EBUSY);
-		opp = &olp->d_partitions[i];
-		npp = &nlp->d_partitions[i];
-		if (npp->p_offset != opp->p_offset || npp->p_size < opp->p_size)
-			return (EBUSY);
-		/*
-		 * Copy internally-set partition information
-		 * if new label doesn't include it.		XXX
-		 */
-		if (npp->p_fstype == FS_UNUSED && opp->p_fstype != FS_UNUSED) {
-			npp->p_fstype = opp->p_fstype;
-			npp->p_fsize = opp->p_fsize;
-			npp->p_frag = opp->p_frag;
-			npp->p_cpg = opp->p_cpg;
-		}
-	}
- 	nlp->d_checksum = 0;
- 	nlp->d_checksum = dkcksum(nlp);
-	*olp = *nlp;
-	return (0);
-}
-
 /* encoding of disk minor numbers, should be elsewhere... */
 #define dkunit(dev)		(minor(dev) >> 3)
 #define dkpart(dev)		(minor(dev) & 07)

Index: src/sys/arch/mvme68k/mvme68k/disksubr.c
diff -u src/sys/arch/mvme68k/mvme68k/disksubr.c:1.35 src/sys/arch/mvme68k/mvme68k/disksubr.c:1.36
--- src/sys/arch/mvme68k/mvme68k/disksubr.c:1.35	Thu Oct 22 23:28:09 2009
+++ src/sys/arch/mvme68k/mvme68k/disksubr.c	Wed Apr  3 18:10:50 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: disksubr.c,v 1.35 2009/10/23 03:28:09 snj Exp $	*/
+/*	$NetBSD: disksubr.c,v 1.36 2019/04/03 22:10:50 christos Exp $	*/
 
 /*
  * Copyright (c) 1995 Dale Rahn.
@@ -28,7 +28,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.35 2009/10/23 03:28:09 snj Exp $");
+__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.36 2019/04/03 22:10:50 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -106,73 +106,6 @@ readdisklabel(dev_t dev, void (*strat)(s
 }
 
 /*
- * Check new disk label for sensibility
- * before setting it.
- */
-int
-setdisklabel(struct disklabel *olp, struct disklabel *nlp, u_long openmask,
-    struct cpu_disklabel *clp)
-{
-	int i;
-	struct partition *opp, *npp;
-
-#ifdef DEBUG
-	if (disksubr_debug > 0) {
-		printlp(nlp, "setdisklabel: new disklabel");
-		printlp(olp, "setdisklabel: old disklabel");
-		printclp(clp, "setdisklabel:cpu disklabel");
-	}
-#endif
-
-
-	/* sanity clause */
-	if (nlp->d_secpercyl == 0 || nlp->d_secsize == 0 ||
-	    (nlp->d_secsize % DEV_BSIZE) != 0)
-		return EINVAL;
-
-	/* special case to allow disklabel to be invalidated */
-	if (nlp->d_magic == 0xffffffff) {
-		*olp = *nlp;
-		return 0;
-	}
-
-	if (nlp->d_magic != DISKMAGIC || nlp->d_magic2 != DISKMAGIC ||
-	    dkcksum(nlp) != 0)
-		return EINVAL;
-
-	while ((i = ffs(openmask)) != 0) {
-		i--;
-		openmask &= ~(1 << i);
-		if (nlp->d_npartitions <= i)
-			return (EBUSY);
-		opp = &olp->d_partitions[i];
-		npp = &nlp->d_partitions[i];
-		if (npp->p_offset != opp->p_offset || npp->p_size < opp->p_size)
-			return EBUSY;
-		/*
-		 * Copy internally-set partition information
-		 * if new label doesn't include it.		XXX
-		 */
-		if (npp->p_fstype == FS_UNUSED && opp->p_fstype != FS_UNUSED) {
-			npp->p_fstype = opp->p_fstype;
-			npp->p_fsize = opp->p_fsize;
-			npp->p_frag = opp->p_frag;
-			npp->p_cpg = opp->p_cpg;
-		}
-	}
-
- 	nlp->d_checksum = 0;
- 	nlp->d_checksum = dkcksum(nlp);
-	*olp = *nlp;
-#ifdef DEBUG
-	if(disksubr_debug > 0) {
-		printlp(olp, "setdisklabel: old->new disklabel");
-	}
-#endif
-	return 0;
-}
-
-/*
  * Write disk label back to device after modification.
  */
 int

Index: src/sys/arch/news68k/news68k/disksubr.c
diff -u src/sys/arch/news68k/news68k/disksubr.c:1.31 src/sys/arch/news68k/news68k/disksubr.c:1.32
--- src/sys/arch/news68k/news68k/disksubr.c:1.31	Wed Jan  2 06:48:26 2008
+++ src/sys/arch/news68k/news68k/disksubr.c	Wed Apr  3 18:10:51 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: disksubr.c,v 1.31 2008/01/02 11:48:26 ad Exp $	*/
+/*	$NetBSD: disksubr.c,v 1.32 2019/04/03 22:10:51 christos Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1988 Regents of the University of California.
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.31 2008/01/02 11:48:26 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.32 2019/04/03 22:10:51 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -107,45 +107,6 @@ readdisklabel(dev_t dev, void (*strat)(s
 }
 
 /*
- * Check new disk label for sensibility before setting it.
- */
-int
-setdisklabel(struct disklabel *olp, struct disklabel *nlp, u_long openmask,
-    struct cpu_disklabel *osdep)
-{
-	int i;
-	struct partition *opp, *npp;
-
-	if (nlp->d_magic != DISKMAGIC || nlp->d_magic2 != DISKMAGIC ||
-	    dkcksum(nlp) != 0)
-		return EINVAL;
-	while ((i = ffs(openmask)) != 0) {
-		i--;
-		openmask &= ~(1 << i);
-		if (nlp->d_npartitions <= i)
-			return EBUSY;
-		opp = &olp->d_partitions[i];
-		npp = &nlp->d_partitions[i];
-		if (npp->p_offset != opp->p_offset || npp->p_size < opp->p_size)
-			return EBUSY;
-		/*
-		 * Copy internally-set partition information
-		 * if new label doesn't include it.		XXX
-		 */
-		if (npp->p_fstype == FS_UNUSED && opp->p_fstype != FS_UNUSED) {
-			npp->p_fstype = opp->p_fstype;
-			npp->p_fsize = opp->p_fsize;
-			npp->p_frag = opp->p_frag;
-			npp->p_cpg = opp->p_cpg;
-		}
-	}
-	nlp->d_checksum = 0;
-	nlp->d_checksum = dkcksum(nlp);
-	*olp = *nlp;
-	return 0;
-}
-
-/*
  * Write disk label back to device after modification.
  */
 int

Index: src/sys/arch/newsmips/newsmips/disksubr.c
diff -u src/sys/arch/newsmips/newsmips/disksubr.c:1.28 src/sys/arch/newsmips/newsmips/disksubr.c:1.29
--- src/sys/arch/newsmips/newsmips/disksubr.c:1.28	Wed Jan  2 06:48:26 2008
+++ src/sys/arch/newsmips/newsmips/disksubr.c	Wed Apr  3 18:10:51 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: disksubr.c,v 1.28 2008/01/02 11:48:26 ad Exp $	*/
+/*	$NetBSD: disksubr.c,v 1.29 2019/04/03 22:10:51 christos Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1988 Regents of the University of California.
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.28 2008/01/02 11:48:26 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.29 2019/04/03 22:10:51 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -107,45 +107,6 @@ readdisklabel(dev_t dev, void (*strat)(s
 }
 
 /*
- * Check new disk label for sensibility before setting it.
- */
-int
-setdisklabel(struct disklabel *olp, struct disklabel *nlp, u_long openmask,
-    struct cpu_disklabel *osdep)
-{
-	int i;
-	struct partition *opp, *npp;
-
-	if (nlp->d_magic != DISKMAGIC || nlp->d_magic2 != DISKMAGIC ||
-	    dkcksum(nlp) != 0)
-		return EINVAL;
-	while ((i = ffs(openmask)) != 0) {
-		i--;
-		openmask &= ~(1 << i);
-		if (nlp->d_npartitions <= i)
-			return EBUSY;
-		opp = &olp->d_partitions[i];
-		npp = &nlp->d_partitions[i];
-		if (npp->p_offset != opp->p_offset || npp->p_size < opp->p_size)
-			return EBUSY;
-		/*
-		 * Copy internally-set partition information
-		 * if new label doesn't include it.		XXX
-		 */
-		if (npp->p_fstype == FS_UNUSED && opp->p_fstype != FS_UNUSED) {
-			npp->p_fstype = opp->p_fstype;
-			npp->p_fsize = opp->p_fsize;
-			npp->p_frag = opp->p_frag;
-			npp->p_cpg = opp->p_cpg;
-		}
-	}
-	nlp->d_checksum = 0;
-	nlp->d_checksum = dkcksum(nlp);
-	*olp = *nlp;
-	return 0;
-}
-
-/*
  * Write disk label back to device after modification.
  */
 int

Index: src/sys/arch/next68k/next68k/disksubr.c
diff -u src/sys/arch/next68k/next68k/disksubr.c:1.29 src/sys/arch/next68k/next68k/disksubr.c:1.30
--- src/sys/arch/next68k/next68k/disksubr.c:1.29	Tue Sep  4 11:08:30 2018
+++ src/sys/arch/next68k/next68k/disksubr.c	Wed Apr  3 18:10:51 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: disksubr.c,v 1.29 2018/09/04 15:08:30 riastradh Exp $	*/
+/*	$NetBSD: disksubr.c,v 1.30 2019/04/03 22:10:51 christos Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1988, 1993
@@ -37,7 +37,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.29 2018/09/04 15:08:30 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.30 2019/04/03 22:10:51 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -397,44 +397,6 @@ readdisklabel(dev_t dev, void (*strat)(s
 }
 
 /*
- * Check new disk label for sensibility before setting it.
- */
-int
-setdisklabel(struct disklabel *olp, struct disklabel *nlp, u_long openmask, struct cpu_disklabel *osdep)
-{
-	int i;
-	struct partition *opp, *npp;
-
-	if (nlp->d_magic != DISKMAGIC || nlp->d_magic2 != DISKMAGIC ||
-	    dkcksum(nlp) != 0)
-		return (EINVAL);
-	while ((i = ffs(openmask)) != 0) {
-		i--;
-		openmask &= ~(1 << i);
-		if (nlp->d_npartitions <= i)
-			return (EBUSY);
-		opp = &olp->d_partitions[i];
-		npp = &nlp->d_partitions[i];
-		if (npp->p_offset != opp->p_offset || npp->p_size < opp->p_size)
-			return (EBUSY);
-		/*
-		 * Copy internally-set partition information
-		 * if new label doesn't include it.		XXX
-		 */
-		if (npp->p_fstype == FS_UNUSED && opp->p_fstype != FS_UNUSED) {
-			npp->p_fstype = opp->p_fstype;
-			npp->p_fsize = opp->p_fsize;
-			npp->p_frag = opp->p_frag;
-			npp->p_cpg = opp->p_cpg;
-		}
-	}
-	nlp->d_checksum = 0;
-	nlp->d_checksum = dkcksum(nlp);
-	*olp = *nlp;
-	return (0);
-}
-
-/*
  * Write disk label back to device after modification.
  */
 int

Index: src/sys/arch/ofppc/ofppc/disksubr.c
diff -u src/sys/arch/ofppc/ofppc/disksubr.c:1.28 src/sys/arch/ofppc/ofppc/disksubr.c:1.29
--- src/sys/arch/ofppc/ofppc/disksubr.c:1.28	Mon Sep  3 12:29:26 2018
+++ src/sys/arch/ofppc/ofppc/disksubr.c	Wed Apr  3 18:10:51 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: disksubr.c,v 1.28 2018/09/03 16:29:26 riastradh Exp $	*/
+/*	$NetBSD: disksubr.c,v 1.29 2019/04/03 22:10:51 christos Exp $	*/
 
 /*-
  * Copyright (c) 2010 Frank Wille.
@@ -63,7 +63,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.28 2018/09/03 16:29:26 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.29 2019/04/03 22:10:51 christos Exp $");
 
 #include "opt_disksubr.h"
 
@@ -787,58 +787,6 @@ readdisklabel(dev_t dev, void (*strat)(s
 }
 
 /*
- * Check new disk label for sensibility before setting it.
- */
-int
-setdisklabel(struct disklabel *olp, struct disklabel *nlp, u_long openmask,
-    struct cpu_disklabel *osdep)
-{
-	int i;
-	struct partition *opp, *npp;
-
-	/* sanity clause */
-	if (nlp->d_secpercyl == 0 || nlp->d_secsize == 0
-	    || (nlp->d_secsize % DEV_BSIZE) != 0)
-		return EINVAL;
-
-	/* special case to allow disklabel to be invalidated */
-	if (nlp->d_magic == 0xffffffff) {
-		*olp = *nlp;
-		return 0;
-	}
-
-	if (nlp->d_magic != DISKMAGIC || nlp->d_magic2 != DISKMAGIC
-	    || dkcksum(nlp) != 0)
-		return EINVAL;
-
-	while ((i = ffs(openmask)) != 0) {
-		i--;
-		openmask &= ~(1 << i);
-		if (nlp->d_npartitions <= i)
-			return EBUSY;
-		opp = &olp->d_partitions[i];
-		npp = &nlp->d_partitions[i];
-		if (npp->p_offset != opp->p_offset || npp->p_size < opp->p_size)
-			return EBUSY;
-		/*
-		 * Copy internally-set partition information
-		 * if new label doesn't include it.		XXX
-		 */
-		if (npp->p_fstype == FS_UNUSED && opp->p_fstype != FS_UNUSED) {
-			npp->p_fstype = opp->p_fstype;
-			npp->p_fsize = opp->p_fsize;
-			npp->p_frag = opp->p_frag;
-			npp->p_cpg = opp->p_cpg;
-		}
-	}
- 	nlp->d_checksum = 0;
- 	nlp->d_checksum = dkcksum(nlp);
-
-	*olp = *nlp;
-	return 0;
-}
-
-/*
  * Write disk label back to device after modification.
  */
 int

Index: src/sys/arch/playstation2/playstation2/disksubr.c
diff -u src/sys/arch/playstation2/playstation2/disksubr.c:1.19 src/sys/arch/playstation2/playstation2/disksubr.c:1.20
--- src/sys/arch/playstation2/playstation2/disksubr.c:1.19	Fri Jul  4 04:51:15 2014
+++ src/sys/arch/playstation2/playstation2/disksubr.c	Wed Apr  3 18:10:51 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: disksubr.c,v 1.19 2014/07/04 08:51:15 martin Exp $	*/
+/*	$NetBSD: disksubr.c,v 1.20 2019/04/03 22:10:51 christos Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1988 Regents of the University of California.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.19 2014/07/04 08:51:15 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.20 2019/04/03 22:10:51 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -259,61 +259,6 @@ done:
 }
 
 /*
- * Check new disk label for sensibility
- * before setting it.
- */
-int
-setdisklabel(struct disklabel *olp, struct disklabel *nlp, u_long openmask,
-    struct cpu_disklabel *osdep)
-{
-	int i;
-	struct partition *opp, *npp;
-
-	/* sanity clause */
-	if (nlp->d_secpercyl == 0 || nlp->d_secsize == 0
-		|| (nlp->d_secsize % DEV_BSIZE) != 0)
-			return(EINVAL);
-
-	/* special case to allow disklabel to be invalidated */
-	if (nlp->d_magic == 0xffffffff) {
-		*olp = *nlp;
-		return (0);
-	}
-
-	if (nlp->d_magic != DISKMAGIC || nlp->d_magic2 != DISKMAGIC ||
-	    dkcksum(nlp) != 0)
-		return (EINVAL);
-
-	/* XXX missing check if other dos partitions will be overwritten */
-
-	while (openmask != 0) {
-		i = ffs(openmask) - 1;
-		openmask &= ~(1 << i);
-		if (nlp->d_npartitions <= i)
-			return (EBUSY);
-		opp = &olp->d_partitions[i];
-		npp = &nlp->d_partitions[i];
-		if (npp->p_offset != opp->p_offset || npp->p_size < opp->p_size)
-			return (EBUSY);
-		/*
-		 * Copy internally-set partition information
-		 * if new label doesn't include it.		XXX
-		 */
-		if (npp->p_fstype == FS_UNUSED && opp->p_fstype != FS_UNUSED) {
-			npp->p_fstype = opp->p_fstype;
-			npp->p_fsize = opp->p_fsize;
-			npp->p_frag = opp->p_frag;
-			npp->p_cpg = opp->p_cpg;
-		}
-	}
- 	nlp->d_checksum = 0;
- 	nlp->d_checksum = dkcksum(nlp);
-	*olp = *nlp;
-	return (0);
-}
-
-
-/*
  * Write disk label back to device after modification.
  */
 int

Index: src/sys/arch/pmax/pmax/disksubr.c
diff -u src/sys/arch/pmax/pmax/disksubr.c:1.54 src/sys/arch/pmax/pmax/disksubr.c:1.55
--- src/sys/arch/pmax/pmax/disksubr.c:1.54	Sun Feb 20 02:50:25 2011
+++ src/sys/arch/pmax/pmax/disksubr.c	Wed Apr  3 18:10:51 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: disksubr.c,v 1.54 2011/02/20 07:50:25 matt Exp $	*/
+/*	$NetBSD: disksubr.c,v 1.55 2019/04/03 22:10:51 christos Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1988 Regents of the University of California.
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.54 2011/02/20 07:50:25 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.55 2019/04/03 22:10:51 christos Exp $");
 
 #include "opt_compat_ultrix.h"
 
@@ -192,46 +192,6 @@ done:
 }
 
 /*
- * Check new disk label for sensibility
- * before setting it.
- */
-int
-setdisklabel(struct disklabel *olp, struct disklabel *nlp, u_long openmask,
-    struct cpu_disklabel *osdep)
-{
-	int i;
-	struct partition *opp, *npp;
-
-	if (nlp->d_magic != DISKMAGIC || nlp->d_magic2 != DISKMAGIC ||
-	    dkcksum(nlp) != 0)
-		return EINVAL;
-	while ((i = ffs(openmask)) != 0) {
-		i--;
-		openmask &= ~(1 << i);
-		if (nlp->d_npartitions <= i)
-			return EBUSY;
-		opp = &olp->d_partitions[i];
-		npp = &nlp->d_partitions[i];
-		if (npp->p_offset != opp->p_offset || npp->p_size < opp->p_size)
-			return EBUSY;
-		/*
-		 * Copy internally-set partition information
-		 * if new label doesn't include it.		XXX
-		 */
-		if (npp->p_fstype == FS_UNUSED && opp->p_fstype != FS_UNUSED) {
-			npp->p_fstype = opp->p_fstype;
-			npp->p_fsize = opp->p_fsize;
-			npp->p_frag = opp->p_frag;
-			npp->p_cpg = opp->p_cpg;
-		}
-	}
- 	nlp->d_checksum = 0;
- 	nlp->d_checksum = dkcksum(nlp);
-	*olp = *nlp;
-	return 0;
-}
-
-/*
  * Write disk label back to device after modification.
  */
 int

Index: src/sys/arch/sbmips/sbmips/disksubr.c
diff -u src/sys/arch/sbmips/sbmips/disksubr.c:1.21 src/sys/arch/sbmips/sbmips/disksubr.c:1.22
--- src/sys/arch/sbmips/sbmips/disksubr.c:1.21	Thu May 16 15:06:45 2013
+++ src/sys/arch/sbmips/sbmips/disksubr.c	Wed Apr  3 18:10:51 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: disksubr.c,v 1.21 2013/05/16 19:06:45 christos Exp $ */
+/* $NetBSD: disksubr.c,v 1.22 2019/04/03 22:10:51 christos Exp $ */
 
 /*
  * Copyright (c) 1982, 1986, 1988 Regents of the University of California.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.21 2013/05/16 19:06:45 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.22 2019/04/03 22:10:51 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -261,60 +261,6 @@ done:
 }
 
 /*
- * Check new disk label for sensibility
- * before setting it.
- */
-int
-setdisklabel(struct disklabel *olp, struct disklabel *nlp, u_long openmask, struct cpu_disklabel *osdep)
-{
-	int i;
-	struct partition *opp, *npp;
-
-	/* sanity clause */
-	if (nlp->d_secpercyl == 0 || nlp->d_secsize == 0
-		|| (nlp->d_secsize % DEV_BSIZE) != 0)
-			return(EINVAL);
-
-	/* special case to allow disklabel to be invalidated */
-	if (nlp->d_magic == 0xffffffff) {
-		*olp = *nlp;
-		return (0);
-	}
-
-	if (nlp->d_magic != DISKMAGIC || nlp->d_magic2 != DISKMAGIC ||
-	    dkcksum(nlp) != 0)
-		return (EINVAL);
-
-	/* XXX missing check if other dos partitions will be overwritten */
-
-	while (openmask != 0) {
-		i = ffs(openmask) - 1;
-		openmask &= ~(1 << i);
-		if (nlp->d_npartitions <= i)
-			return (EBUSY);
-		opp = &olp->d_partitions[i];
-		npp = &nlp->d_partitions[i];
-		if (npp->p_offset != opp->p_offset || npp->p_size < opp->p_size)
-			return (EBUSY);
-		/*
-		 * Copy internally-set partition information
-		 * if new label doesn't include it.		XXX
-		 */
-		if (npp->p_fstype == FS_UNUSED && opp->p_fstype != FS_UNUSED) {
-			npp->p_fstype = opp->p_fstype;
-			npp->p_fsize = opp->p_fsize;
-			npp->p_frag = opp->p_frag;
-			npp->p_cpg = opp->p_cpg;
-		}
-	}
- 	nlp->d_checksum = 0;
- 	nlp->d_checksum = dkcksum(nlp);
-	*olp = *nlp;
-	return (0);
-}
-
-
-/*
  * Write disk label back to device after modification.
  */
 int

Index: src/sys/arch/sgimips/sgimips/disksubr.c
diff -u src/sys/arch/sgimips/sgimips/disksubr.c:1.23 src/sys/arch/sgimips/sgimips/disksubr.c:1.24
--- src/sys/arch/sgimips/sgimips/disksubr.c:1.23	Wed Jan  2 06:48:28 2008
+++ src/sys/arch/sgimips/sgimips/disksubr.c	Wed Apr  3 18:10:51 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: disksubr.c,v 1.23 2008/01/02 11:48:28 ad Exp $	*/
+/*	$NetBSD: disksubr.c,v 1.24 2019/04/03 22:10:51 christos Exp $	*/
 
 /*
  * Copyright (c) 2001 Christopher Sekiya
@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.23 2008/01/02 11:48:28 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.24 2019/04/03 22:10:51 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -128,41 +128,6 @@ readdisklabel(dev_t dev, void (*strat)(s
 	return disklabel_sgimips_to_bsd(slp, lp);
 }
 
-int
-setdisklabel(struct disklabel *olp, struct disklabel *nlp, unsigned long openmask, struct cpu_disklabel *clp)
-{
-	register int i;
-	register struct partition *opp, *npp;
-
-	if (nlp->d_magic != DISKMAGIC || nlp->d_magic2 != DISKMAGIC ||
-	    dkcksum(nlp) != 0)
-		return (EINVAL);
-	while ((i = ffs(openmask)) != 0) {
-		i--;
-		openmask &= ~(1 << i);
-		if (nlp->d_npartitions <= i)
-			return (EBUSY);
-		opp = &olp->d_partitions[i];
-		npp = &nlp->d_partitions[i];
-		if (npp->p_offset != opp->p_offset || npp->p_size < opp->p_size)
-			return (EBUSY);
-		/*
-		 * Copy internally-set partition information
-		 * if new label doesn't include it.		XXX
-		 */
-		if (npp->p_fstype == FS_UNUSED && opp->p_fstype != FS_UNUSED) {
-			npp->p_fstype = opp->p_fstype;
-			npp->p_fsize = opp->p_fsize;
-			npp->p_frag = opp->p_frag;
-			npp->p_cpg = opp->p_cpg;
-		}
-	}
-	nlp->d_checksum = 0;
-	nlp->d_checksum = dkcksum(nlp);
-	*olp = *nlp;
-	return (0);
-}
-
 #define dkpart(dev)		(minor(dev) & 07)
 #define dkminor(unit, part)	(((unit) << 3) | (part))
 

Index: src/sys/arch/sh3/sh3/disksubr.c
diff -u src/sys/arch/sh3/sh3/disksubr.c:1.29 src/sys/arch/sh3/sh3/disksubr.c:1.30
--- src/sys/arch/sh3/sh3/disksubr.c:1.29	Thu May 16 15:06:45 2013
+++ src/sys/arch/sh3/sh3/disksubr.c	Wed Apr  3 18:10:51 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: disksubr.c,v 1.29 2013/05/16 19:06:45 christos Exp $	*/
+/*	$NetBSD: disksubr.c,v 1.30 2019/04/03 22:10:51 christos Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1988 Regents of the University of California.
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.29 2013/05/16 19:06:45 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.30 2019/04/03 22:10:51 christos Exp $");
 
 #include "opt_mbr.h"
 
@@ -529,61 +529,6 @@ readdisklabel(dev_t dev, void (*strat)(s
 }
 
 /*
- * Check new disk label for sensibility
- * before setting it.
- */
-int
-setdisklabel(struct disklabel *olp, struct disklabel *nlp, u_long openmask,
-    struct cpu_disklabel *osdep)
-{
-	int i;
-	struct partition *opp, *npp;
-
-	/* sanity clause */
-	if (nlp->d_secpercyl == 0 || nlp->d_secsize == 0
-	    || (nlp->d_secsize % DEV_BSIZE) != 0)
-		return(EINVAL);
-
-	/* special case to allow disklabel to be invalidated */
-	if (nlp->d_magic == 0xffffffff) {
-		*olp = *nlp;
-		return (0);
-	}
-
-	if (nlp->d_magic != DISKMAGIC || nlp->d_magic2 != DISKMAGIC ||
-	    dkcksum(nlp) != 0)
-		return (EINVAL);
-
-	/* XXX missing check if other dos partitions will be overwritten */
-
-	while (openmask != 0) {
-		i = ffs(openmask) - 1;
-		openmask &= ~(1 << i);
-		if (nlp->d_npartitions <= i)
-			return (EBUSY);
-		opp = &olp->d_partitions[i];
-		npp = &nlp->d_partitions[i];
-		if (npp->p_offset != opp->p_offset || npp->p_size < opp->p_size)
-			return (EBUSY);
-		/*
-		 * Copy internally-set partition information
-		 * if new label doesn't include it.		XXX
-		 */
-		if (npp->p_fstype == FS_UNUSED && opp->p_fstype != FS_UNUSED) {
-			npp->p_fstype = opp->p_fstype;
-			npp->p_fsize = opp->p_fsize;
-			npp->p_frag = opp->p_frag;
-			npp->p_cpg = opp->p_cpg;
-		}
-	}
-	nlp->d_checksum = 0;
-	nlp->d_checksum = dkcksum(nlp);
-	*olp = *nlp;
-	return (0);
-}
-
-
-/*
  * Write disk label back to device after modification.
  */
 int

Index: src/sys/arch/vax/vax/disksubr.c
diff -u src/sys/arch/vax/vax/disksubr.c:1.53 src/sys/arch/vax/vax/disksubr.c:1.54
--- src/sys/arch/vax/vax/disksubr.c:1.53	Fri Jun 22 16:42:23 2012
+++ src/sys/arch/vax/vax/disksubr.c	Wed Apr  3 18:10:51 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: disksubr.c,v 1.53 2012/06/22 20:42:23 abs Exp $	*/
+/*	$NetBSD: disksubr.c,v 1.54 2019/04/03 22:10:51 christos Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1988 Regents of the University of California.
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.53 2012/06/22 20:42:23 abs Exp $");
+__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.54 2019/04/03 22:10:51 christos Exp $");
 
 #include "opt_compat_ultrix.h"
 
@@ -199,46 +199,6 @@ done:
 #endif /* COMPAT_ULTRIX */
 
 /*
- * Check new disk label for sensibility
- * before setting it.
- */
-int
-setdisklabel(struct disklabel *olp, struct disklabel *nlp,
-    u_long openmask, struct cpu_disklabel *osdep)
-{
-	int i;
-	struct partition *opp, *npp;
-
-	if (nlp->d_magic != DISKMAGIC || nlp->d_magic2 != DISKMAGIC ||
-	    dkcksum(nlp) != 0)
-		return (EINVAL);
-	while ((i = ffs(openmask)) != 0) {
-		i--;
-		openmask &= ~(1 << i);
-		if (nlp->d_npartitions <= i)
-			return (EBUSY);
-		opp = &olp->d_partitions[i];
-		npp = &nlp->d_partitions[i];
-		if (npp->p_offset != opp->p_offset || npp->p_size < opp->p_size)
-			return (EBUSY);
-		/*
-		 * Copy internally-set partition information
-		 * if new label doesn't include it.		XXX
-		 */
-		if (npp->p_fstype == FS_UNUSED && opp->p_fstype != FS_UNUSED) {
-			npp->p_fstype = opp->p_fstype;
-			npp->p_fsize = opp->p_fsize;
-			npp->p_frag = opp->p_frag;
-			npp->p_cpg = opp->p_cpg;
-		}
-	}
-	nlp->d_checksum = 0;
-	nlp->d_checksum = dkcksum(nlp);
-	*olp = *nlp;
-	return (0);
-}
-
-/*
  * Write disk label back to device after modification.
  * Always allow writing of disk label; even if the disk is unlabeled.
  */

Index: src/sys/arch/x68k/x68k/disksubr.c
diff -u src/sys/arch/x68k/x68k/disksubr.c:1.34 src/sys/arch/x68k/x68k/disksubr.c:1.35
--- src/sys/arch/x68k/x68k/disksubr.c:1.34	Thu May  5 00:38:20 2011
+++ src/sys/arch/x68k/x68k/disksubr.c	Wed Apr  3 18:10:51 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: disksubr.c,v 1.34 2011/05/05 04:38:20 tsutsui Exp $	*/
+/*	$NetBSD: disksubr.c,v 1.35 2019/04/03 22:10:51 christos Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1988 Regents of the University of California.
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.34 2011/05/05 04:38:20 tsutsui Exp $");
+__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.35 2019/04/03 22:10:51 christos Exp $");
 
 #include "opt_compat_netbsd.h"
 
@@ -250,62 +250,6 @@ done:
 }
 
 /*
- * Check new disk label for sensibility
- * before setting it.
- */
-int
-setdisklabel(struct disklabel *olp, struct disklabel *nlp, u_long openmask,
-    struct cpu_disklabel *osdep)
-{
-	int i;
-	struct partition *opp, *npp;
-
-	/* sanity clause */
-	if (nlp->d_secpercyl == 0 || nlp->d_secsize == 0
-		/*|| (nlp->d_secsize % DEV_BSIZE) != 0*/)
-			return(EINVAL);
-
-	/* special case to allow disklabel to be invalidated */
-	if (nlp->d_magic == 0xffffffff) {
-		*olp = *nlp;
-		return (0);
-	}
-
-	if (nlp->d_magic != DISKMAGIC || nlp->d_magic2 != DISKMAGIC ||
-	    dkcksum(nlp) != 0)
-		return (EINVAL);
-
-	if (osdep)
-		parttbl_consistency_check(nlp, osdep->dosparts);
-	/* XXX missing check if other dos partitions will be overwritten */
-
-	while (openmask != 0) {
-		i = ffs(openmask) - 1;
-		openmask &= ~(1 << i);
-		if (nlp->d_npartitions <= i)
-			return (EBUSY);
-		opp = &olp->d_partitions[i];
-		npp = &nlp->d_partitions[i];
-		if (npp->p_offset != opp->p_offset || npp->p_size < opp->p_size)
-			return (EBUSY);
-		/*
-		 * Copy internally-set partition information
-		 * if new label doesn't include it.		XXX
-		 */
-		if (npp->p_fstype == FS_UNUSED && opp->p_fstype != FS_UNUSED) {
-			npp->p_fstype = opp->p_fstype;
-			npp->p_fsize = opp->p_fsize;
-			npp->p_frag = opp->p_frag;
-			npp->p_cpg = opp->p_cpg;
-		}
-	}
-	nlp->d_checksum = 0;
-	nlp->d_checksum = dkcksum(nlp);
-	*olp = *nlp;
-	return (0);
-}
-
-/*
  * Write disk label back to device after modification.
  */
 int

Index: src/sys/dev/sun/disksubr.c
diff -u src/sys/dev/sun/disksubr.c:1.15 src/sys/dev/sun/disksubr.c:1.16
--- src/sys/dev/sun/disksubr.c:1.15	Sun Feb 26 04:49:40 2017
+++ src/sys/dev/sun/disksubr.c	Wed Apr  3 18:10:52 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: disksubr.c,v 1.15 2017/02/26 09:49:40 martin Exp $ */
+/*	$NetBSD: disksubr.c,v 1.16 2019/04/03 22:10:52 christos Exp $ */
 
 /*
  * Copyright (c) 1982, 1986, 1988 Regents of the University of California.
@@ -55,7 +55,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.15 2017/02/26 09:49:40 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: disksubr.c,v 1.16 2019/04/03 22:10:52 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -164,46 +164,6 @@ readdisklabel(dev_t dev, void (*strat)(s
 }
 
 /*
- * Check new disk label for sensibility
- * before setting it.
- */
-int
-setdisklabel(struct disklabel *olp, struct disklabel *nlp, u_long openmask, struct cpu_disklabel *clp)
-{
-	int i;
-	struct partition *opp, *npp;
-
-	/* sanity clause */
-	if (nlp->d_secpercyl == 0 || nlp->d_secsize == 0 ||
-	    (nlp->d_secsize % DEV_BSIZE) != 0)
-		return(EINVAL);
-
-	/* special case to allow disklabel to be invalidated */
-	if (nlp->d_magic == 0xffffffff) {
-		*olp = *nlp;
-		return (0);
-	}
-
-	if (nlp->d_magic != DISKMAGIC || nlp->d_magic2 != DISKMAGIC ||
-	    dkcksum(nlp) != 0)
-		return (EINVAL);
-
-	while ((i = ffs(openmask)) != 0) {
-		i--;
-		openmask &= ~(1 << i);
-		if (nlp->d_npartitions <= i)
-			return (EBUSY);
-		opp = &olp->d_partitions[i];
-		npp = &nlp->d_partitions[i];
-		if (npp->p_offset != opp->p_offset || npp->p_size < opp->p_size)
-			return (EBUSY);
-	}
-
-	*olp = *nlp;
-	return (0);
-}
-
-/*
  * Write disk label back to device after modification.
  * Current label is already in clp->cd_block[]
  */

Index: src/sys/kern/subr_disk.c
diff -u src/sys/kern/subr_disk.c:1.123 src/sys/kern/subr_disk.c:1.124
--- src/sys/kern/subr_disk.c:1.123	Wed Mar 27 15:13:33 2019
+++ src/sys/kern/subr_disk.c	Wed Apr  3 18:10:52 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: subr_disk.c,v 1.123 2019/03/27 19:13:33 martin Exp $	*/
+/*	$NetBSD: subr_disk.c,v 1.124 2019/04/03 22:10:52 christos Exp $	*/
 
 /*-
  * Copyright (c) 1996, 1997, 1999, 2000, 2009 The NetBSD Foundation, Inc.
@@ -67,7 +67,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: subr_disk.c,v 1.123 2019/03/27 19:13:33 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: subr_disk.c,v 1.124 2019/04/03 22:10:52 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/kernel.h>
@@ -740,3 +740,75 @@ disk_set_info(device_t dev, struct disk 
 	if (odisk_info)
 		prop_object_release(odisk_info);
 }
+
+#ifndef __HAVE_SETDISKLABEL
+
+#ifdef DEBUG
+#define DPRINTF(a, ...) printf(a, __VA_ARGS__)
+#else
+#define DPRINTF(a, ...) __nothing
+#endif
+
+/*
+ * Check new disk label for sensibility
+ * before setting it.
+ */
+int
+setdisklabel(struct disklabel *olp, struct disklabel *nlp, u_long openmask,
+    struct cpu_disklabel *osdep)
+{
+	int i;
+	struct partition *opp, *npp;
+
+	/* sanity clause */
+	if (nlp->d_secpercyl == 0 || nlp->d_secsize == 0
+		|| (nlp->d_secsize % DEV_BSIZE) != 0) {
+		DPRINTF("%s: secpercyl/secsize %u/%u\n", __func__,
+		    nlp->d_secpercyl, nlp->d_secsize);
+		return EINVAL;
+	}
+
+	/* special case to allow disklabel to be invalidated */
+	if (nlp->d_magic == 0xffffffff) {
+		*olp = *nlp;
+		return 0;
+	}
+
+	if (nlp->d_magic != DISKMAGIC || nlp->d_magic2 != DISKMAGIC ||
+	    nlp->d_npartitions > MAXPARTITIONS || dkcksum(nlp) != 0) {
+		DPRINTF("%s: bad magic %#x/%#x != %#x, partitions %u != %u"
+		    ", bad sum=%#x\n", __func__,
+		    nlp->d_magic, nlp->d_magic2, DISKMAGIC,
+		    nlp->d_npartitions, MAXPARTITIONS, dkcksum(nlp));
+		return EINVAL;
+	}
+
+	while (openmask != 0) {
+		i = ffs(openmask) - 1;
+		openmask &= ~(1 << i);
+		if (i >= nlp->d_npartitions) {
+			DPRINTF("partition not found\n");
+			return EBUSY;
+		}
+		opp = &olp->d_partitions[i];
+		npp = &nlp->d_partitions[i];
+		/*
+		 * Copy internally-set partition information
+		 * if new label doesn't include it.		XXX
+		 */
+		if (npp->p_fstype == FS_UNUSED && opp->p_fstype != FS_UNUSED) {
+			*npp = *opp;
+			continue;
+		}
+		if (npp->p_offset != opp->p_offset || npp->p_size < opp->p_size)
+		{
+			DPRINTF("%s: mismatched offset/size", __func__);
+			return EBUSY;
+		}
+	}
+ 	nlp->d_checksum = 0;
+ 	nlp->d_checksum = dkcksum(nlp);
+	*olp = *nlp;
+	return 0;
+}
+#endif

Index: src/sys/kern/subr_disk_mbr.c
diff -u src/sys/kern/subr_disk_mbr.c:1.49 src/sys/kern/subr_disk_mbr.c:1.50
--- src/sys/kern/subr_disk_mbr.c:1.49	Sun Jan 21 11:55:25 2018
+++ src/sys/kern/subr_disk_mbr.c	Wed Apr  3 18:10:52 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: subr_disk_mbr.c,v 1.49 2018/01/21 16:55:25 christos Exp $	*/
+/*	$NetBSD: subr_disk_mbr.c,v 1.50 2019/04/03 22:10:52 christos Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1988 Regents of the University of California.
@@ -54,7 +54,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: subr_disk_mbr.c,v 1.49 2018/01/21 16:55:25 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: subr_disk_mbr.c,v 1.50 2019/04/03 22:10:52 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -694,59 +694,6 @@ corrupted:
 }
 
 /*
- * Check new disk label for sensibility
- * before setting it.
- */
-int
-setdisklabel(struct disklabel *olp, struct disklabel *nlp, u_long openmask,
-    struct cpu_disklabel *osdep)
-{
-	int i;
-	struct partition *opp, *npp;
-
-	/* sanity clause */
-	if (nlp->d_secpercyl == 0 || nlp->d_secsize == 0
-		|| (nlp->d_secsize % DEV_BSIZE) != 0)
-			return (EINVAL);
-
-	/* special case to allow disklabel to be invalidated */
-	if (nlp->d_magic == 0xffffffff) {
-		*olp = *nlp;
-		return (0);
-	}
-
-	if (nlp->d_magic != DISKMAGIC || nlp->d_magic2 != DISKMAGIC ||
-	    nlp->d_npartitions > MAXPARTITIONS || dkcksum(nlp) != 0)
-		return (EINVAL);
-
-	/* XXX missing check if other dos partitions will be overwritten */
-
-	while (openmask != 0) {
-		i = ffs(openmask) - 1;
-		openmask &= ~(1 << i);
-		if (i >= nlp->d_npartitions)
-			return (EBUSY);
-		opp = &olp->d_partitions[i];
-		npp = &nlp->d_partitions[i];
-		/*
-		 * Copy internally-set partition information
-		 * if new label doesn't include it.		XXX
-		 */
-		if (npp->p_fstype == FS_UNUSED && opp->p_fstype != FS_UNUSED) {
-			*npp = *opp;
-			continue;
-		}
-		if (npp->p_offset != opp->p_offset || npp->p_size < opp->p_size)
-			return (EBUSY);
-	}
- 	nlp->d_checksum = 0;
- 	nlp->d_checksum = dkcksum(nlp);
-	*olp = *nlp;
-	return (0);
-}
-
-
-/*
  * Write disk label back to device after modification.
  */
 int

Reply via email to