Module Name:    src
Committed By:   christos
Date:           Wed Dec 31 19:52:06 UTC 2014

Modified Files:
        src/sys/arch/amiga/dev: fd.c
        src/sys/arch/atari/dev: fd.c hdfd.c
        src/sys/arch/emips/ebus: ace_ebus.c flash_ebus.c
        src/sys/arch/hp300/dev: rd.c
        src/sys/arch/mac68k/obio: iwm_fd.c
        src/sys/arch/sun3/dev: xd.c xy.c
        src/sys/arch/vax/mba: hp.c
        src/sys/arch/vax/vsa: hdc9224.c
        src/sys/arch/x68k/dev: bmd.c fd.c
        src/sys/dev: ccd.c cgd.c dksubr.c ld.c md.c vnd.c
        src/sys/dev/ata: wd.c
        src/sys/dev/dkwedge: dk.c
        src/sys/dev/gpib: rd.c
        src/sys/dev/isa: fd.c mcd.c
        src/sys/dev/mca: ed_mca.c
        src/sys/dev/mscp: mscp_disk.c
        src/sys/dev/ofw: ofdisk.c
        src/sys/dev/qbus: rf.c rl.c
        src/sys/dev/raidframe: rf_netbsdkintf.c
        src/sys/dev/scsipi: cd.c sd.c
        src/sys/dev/vme: xd.c xy.c
        src/sys/kern: subr_disk.c
        src/sys/sys: param.h

Log Message:
make more drivers use disk_ioctl, and add a dev parameter to it so that
we can merge the "easy" disklabel ioctls to it. Ultimately all this will
go do dk_ioctl once all the drivers have been converted.


To generate a diff of this commit:
cvs rdiff -u -r1.92 -r1.93 src/sys/arch/amiga/dev/fd.c
cvs rdiff -u -r1.80 -r1.81 src/sys/arch/atari/dev/fd.c
cvs rdiff -u -r1.78 -r1.79 src/sys/arch/atari/dev/hdfd.c
cvs rdiff -u -r1.15 -r1.16 src/sys/arch/emips/ebus/ace_ebus.c
cvs rdiff -u -r1.13 -r1.14 src/sys/arch/emips/ebus/flash_ebus.c
cvs rdiff -u -r1.98 -r1.99 src/sys/arch/hp300/dev/rd.c
cvs rdiff -u -r1.50 -r1.51 src/sys/arch/mac68k/obio/iwm_fd.c
cvs rdiff -u -r1.71 -r1.72 src/sys/arch/sun3/dev/xd.c
cvs rdiff -u -r1.76 -r1.77 src/sys/arch/sun3/dev/xy.c
cvs rdiff -u -r1.50 -r1.51 src/sys/arch/vax/mba/hp.c
cvs rdiff -u -r1.54 -r1.55 src/sys/arch/vax/vsa/hdc9224.c
cvs rdiff -u -r1.21 -r1.22 src/sys/arch/x68k/dev/bmd.c
cvs rdiff -u -r1.111 -r1.112 src/sys/arch/x68k/dev/fd.c
cvs rdiff -u -r1.160 -r1.161 src/sys/dev/ccd.c
cvs rdiff -u -r1.93 -r1.94 src/sys/dev/cgd.c
cvs rdiff -u -r1.57 -r1.58 src/sys/dev/dksubr.c
cvs rdiff -u -r1.79 -r1.80 src/sys/dev/ld.c
cvs rdiff -u -r1.71 -r1.72 src/sys/dev/md.c
cvs rdiff -u -r1.237 -r1.238 src/sys/dev/vnd.c
cvs rdiff -u -r1.416 -r1.417 src/sys/dev/ata/wd.c
cvs rdiff -u -r1.77 -r1.78 src/sys/dev/dkwedge/dk.c
cvs rdiff -u -r1.36 -r1.37 src/sys/dev/gpib/rd.c
cvs rdiff -u -r1.105 -r1.106 src/sys/dev/isa/fd.c
cvs rdiff -u -r1.113 -r1.114 src/sys/dev/isa/mcd.c
cvs rdiff -u -r1.60 -r1.61 src/sys/dev/mca/ed_mca.c
cvs rdiff -u -r1.83 -r1.84 src/sys/dev/mscp/mscp_disk.c
cvs rdiff -u -r1.49 -r1.50 src/sys/dev/ofw/ofdisk.c
cvs rdiff -u -r1.29 -r1.30 src/sys/dev/qbus/rf.c
cvs rdiff -u -r1.47 -r1.48 src/sys/dev/qbus/rl.c
cvs rdiff -u -r1.319 -r1.320 src/sys/dev/raidframe/rf_netbsdkintf.c
cvs rdiff -u -r1.326 -r1.327 src/sys/dev/scsipi/cd.c
cvs rdiff -u -r1.312 -r1.313 src/sys/dev/scsipi/sd.c
cvs rdiff -u -r1.93 -r1.94 src/sys/dev/vme/xd.c
cvs rdiff -u -r1.97 -r1.98 src/sys/dev/vme/xy.c
cvs rdiff -u -r1.107 -r1.108 src/sys/kern/subr_disk.c
cvs rdiff -u -r1.463 -r1.464 src/sys/sys/param.h

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/amiga/dev/fd.c
diff -u src/sys/arch/amiga/dev/fd.c:1.92 src/sys/arch/amiga/dev/fd.c:1.93
--- src/sys/arch/amiga/dev/fd.c:1.92	Fri Aug  8 17:13:52 2014
+++ src/sys/arch/amiga/dev/fd.c	Wed Dec 31 14:52:04 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: fd.c,v 1.92 2014/08/08 21:13:52 joerg Exp $ */
+/*	$NetBSD: fd.c,v 1.93 2014/12/31 19:52:04 christos Exp $ */
 
 /*
  * Copyright (c) 1994 Christian E. Hopps
@@ -33,7 +33,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: fd.c,v 1.92 2014/08/08 21:13:52 joerg Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fd.c,v 1.93 2014/12/31 19:52:04 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -573,6 +573,10 @@ fdioctl(dev_t dev, u_long cmd, void *add
 	if ((sc->flags & FDF_HAVELABEL) == 0)
 		return(EBADF);
 
+	error = disk_ioctl(&sk->dkdev, dev, cmd, addr, flag, l);
+	if (error != EPASSTHROUGH)
+		return error;
+
 	switch (cmd) {
 	case DIOCSBAD:
 		return(EINVAL);
@@ -586,14 +590,6 @@ fdioctl(dev_t dev, u_long cmd, void *add
 			return(EINVAL);
 		sc->dkdev.dk_label->d_trkseek = sc->stepdelay = *(int *)addr;
 		return(0);
-	case DIOCGDINFO:
-		*(struct disklabel *)addr = *(sc->dkdev.dk_label);
-		return(0);
-	case DIOCGPART:
-		((struct partinfo *)addr)->disklab = sc->dkdev.dk_label;
-		((struct partinfo *)addr)->part =
-		    &sc->dkdev.dk_label->d_partitions[FDPART(dev)];
-		return(0);
 	case DIOCSDINFO:
 		if ((flag & FWRITE) == 0)
 			return(EBADF);

Index: src/sys/arch/atari/dev/fd.c
diff -u src/sys/arch/atari/dev/fd.c:1.80 src/sys/arch/atari/dev/fd.c:1.81
--- src/sys/arch/atari/dev/fd.c:1.80	Sat Oct 18 04:33:25 2014
+++ src/sys/arch/atari/dev/fd.c	Wed Dec 31 14:52:04 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: fd.c,v 1.80 2014/10/18 08:33:25 snj Exp $	*/
+/*	$NetBSD: fd.c,v 1.81 2014/12/31 19:52:04 christos Exp $	*/
 
 /*
  * Copyright (c) 1995 Leo Weppelman.
@@ -44,7 +44,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: fd.c,v 1.80 2014/10/18 08:33:25 snj Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fd.c,v 1.81 2014/12/31 19:52:04 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -432,17 +432,13 @@ fdioctl(dev_t dev, u_long cmd, void * ad
 	if ((sc->flags & FLPF_HAVELAB) == 0)
 		return EBADF;
 
+	error = disk_ioctl(&sc->dkdev, RAW_PART, cmd, addr, flag, l);
+	if (error != EPASSTHROUGH)
+		return error;
+
 	switch (cmd) {
 	case DIOCSBAD:
 		return EINVAL;
-	case DIOCGDINFO:
-		*(struct disklabel *)addr = *(sc->dkdev.dk_label);
-		return 0;
-	case DIOCGPART:
-		((struct partinfo *)addr)->disklab = sc->dkdev.dk_label;
-		((struct partinfo *)addr)->part =
-		    &sc->dkdev.dk_label->d_partitions[RAW_PART];
-		return 0;
 #ifdef notyet /* XXX LWP */
 	case DIOCSRETRIES:
 	case DIOCSSTEP:

Index: src/sys/arch/atari/dev/hdfd.c
diff -u src/sys/arch/atari/dev/hdfd.c:1.78 src/sys/arch/atari/dev/hdfd.c:1.79
--- src/sys/arch/atari/dev/hdfd.c:1.78	Fri Jul 25 04:10:32 2014
+++ src/sys/arch/atari/dev/hdfd.c	Wed Dec 31 14:52:04 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: hdfd.c,v 1.78 2014/07/25 08:10:32 dholland Exp $	*/
+/*	$NetBSD: hdfd.c,v 1.79 2014/12/31 19:52:04 christos Exp $	*/
 
 /*-
  * Copyright (c) 1996 Leo Weppelman
@@ -91,7 +91,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: hdfd.c,v 1.78 2014/07/25 08:10:32 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: hdfd.c,v 1.79 2014/12/31 19:52:04 christos Exp $");
 
 #include "opt_ddb.h"
 
@@ -1304,17 +1304,16 @@ fdioctl(dev_t dev, u_long cmd, void *add
 
 	switch (cmd) {
 	case DIOCGDINFO:
-		fdgetdisklabel(fd, dev);
-		*(struct disklabel *)addr = *(fd->sc_dk.dk_label);
-		return 0;
-
 	case DIOCGPART:
 		fdgetdisklabel(fd, dev);
-		((struct partinfo *)addr)->disklab = fd->sc_dk.dk_label;
-		((struct partinfo *)addr)->part =
-			      &fd->sc_dk.dk_label->d_partitions[RAW_PART];
-		return 0;
+		break;
+	}
+
+	error = disk_ioctl(&fd->sc_dk, RAW_PART, cmd, addr, flag, l);
+	if (error != EPASSTHROUGH)
+		return error;
 
+	switch (cmd) {
 	case DIOCWLABEL:
 		if ((flag & FWRITE) == 0)
 			return EBADF;

Index: src/sys/arch/emips/ebus/ace_ebus.c
diff -u src/sys/arch/emips/ebus/ace_ebus.c:1.15 src/sys/arch/emips/ebus/ace_ebus.c:1.16
--- src/sys/arch/emips/ebus/ace_ebus.c:1.15	Wed Dec 31 12:06:48 2014
+++ src/sys/arch/emips/ebus/ace_ebus.c	Wed Dec 31 14:52:04 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: ace_ebus.c,v 1.15 2014/12/31 17:06:48 christos Exp $	*/
+/*	$NetBSD: ace_ebus.c,v 1.16 2014/12/31 19:52:04 christos Exp $	*/
 
 /*-
  * Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ace_ebus.c,v 1.15 2014/12/31 17:06:48 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ace_ebus.c,v 1.16 2014/12/31 19:52:04 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -2172,7 +2172,7 @@ aceioctl(dev_t dev, u_long xfer, void *a
 	if ((ace->sc_flags & ACEF_LOADED) == 0)
 		return EIO;
 
-	error = disk_ioctl(&ace->sc_dk, xfer, addr, flag, l);
+	error = disk_ioctl(&ace->sc_dk, dev, xfer, addr, flag, l);
 	if (error != EPASSTHROUGH)
 		return error;
 
@@ -2186,15 +2186,6 @@ aceioctl(dev_t dev, u_long xfer, void *a
 		bad144intern(ace);
 		return 0;
 #endif
-	case DIOCGDINFO:
-		*(struct disklabel *)addr = *(ace->sc_dk.dk_label);
-		return 0;
-
-	case DIOCGPART:
-		((struct partinfo *)addr)->disklab = ace->sc_dk.dk_label;
-		((struct partinfo *)addr)->part =
-		    &ace->sc_dk.dk_label->d_partitions[ACEPART(dev)];
-		return 0;
 
 	case DIOCWDINFO:
 	case DIOCSDINFO:

Index: src/sys/arch/emips/ebus/flash_ebus.c
diff -u src/sys/arch/emips/ebus/flash_ebus.c:1.13 src/sys/arch/emips/ebus/flash_ebus.c:1.14
--- src/sys/arch/emips/ebus/flash_ebus.c:1.13	Wed Dec 31 12:06:48 2014
+++ src/sys/arch/emips/ebus/flash_ebus.c	Wed Dec 31 14:52:04 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: flash_ebus.c,v 1.13 2014/12/31 17:06:48 christos Exp $	*/
+/*	$NetBSD: flash_ebus.c,v 1.14 2014/12/31 19:52:04 christos Exp $	*/
 
 /*-
  * Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
-__KERNEL_RCSID(0, "$NetBSD: flash_ebus.c,v 1.13 2014/12/31 17:06:48 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: flash_ebus.c,v 1.14 2014/12/31 19:52:04 christos Exp $");
 
 /* Driver for the Intel 28F320/640/128 (J3A150) StrataFlash memory device
  * Extended to include the Intel JS28F256P30T95.
@@ -2089,7 +2089,7 @@ eflashioctl(dev_t dev, u_long xfer, void
 	if ((sc->sc_flags & EFLASHF_LOADED) == 0)
 		return EIO;
 
-	error = disk_ioctl(&sc->sc_dk, xfer, addr, flag, l);
+	error = disk_ioctl(&sc->sc_dk, dev, xfer, addr, flag, l);
 	if (error != EPASSTHROUGH)
 		return (error);
 
@@ -2103,15 +2103,6 @@ eflashioctl(dev_t dev, u_long xfer, void
 		bad144intern(sc);
 		return 0;
 #endif
-	case DIOCGDINFO:
-		*(struct disklabel *)addr = *(sc->sc_dk.dk_label);
-		return 0;
-
-	case DIOCGPART:
-		((struct partinfo *)addr)->disklab = sc->sc_dk.dk_label;
-		((struct partinfo *)addr)->part =
-		    &sc->sc_dk.dk_label->d_partitions[EFLASHPART(dev)];
-		return 0;
 
 	case DIOCWDINFO:
 	case DIOCSDINFO:

Index: src/sys/arch/hp300/dev/rd.c
diff -u src/sys/arch/hp300/dev/rd.c:1.98 src/sys/arch/hp300/dev/rd.c:1.99
--- src/sys/arch/hp300/dev/rd.c:1.98	Sun Aug 10 12:44:34 2014
+++ src/sys/arch/hp300/dev/rd.c	Wed Dec 31 14:52:05 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: rd.c,v 1.98 2014/08/10 16:44:34 tls Exp $	*/
+/*	$NetBSD: rd.c,v 1.99 2014/12/31 19:52:05 christos Exp $	*/
 
 /*-
  * Copyright (c) 1996, 1997 The NetBSD Foundation, Inc.
@@ -72,7 +72,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rd.c,v 1.98 2014/08/10 16:44:34 tls Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rd.c,v 1.99 2014/12/31 19:52:05 christos Exp $");
 
 #include "opt_useleds.h"
 
@@ -1116,17 +1116,11 @@ rdioctl(dev_t dev, u_long cmd, void *dat
 	struct disklabel *lp = sc->sc_dkdev.dk_label;
 	int error, flags;
 
-	switch (cmd) {
-	case DIOCGDINFO:
-		*(struct disklabel *)data = *lp;
-		return 0;
-
-	case DIOCGPART:
-		((struct partinfo *)data)->disklab = lp;
-		((struct partinfo *)data)->part =
-		    &lp->d_partitions[rdpart(dev)];
-		return 0;
+	error = disk_ioctl(&sc->sc_dkdev, rdpart(dev), cmd, data, flag, l);
+	if (error != EPASSTHROUGH)
+		return error;
 
+	switch (cmd) {
 	case DIOCWLABEL:
 		if ((flag & FWRITE) == 0)
 			return EBADF;

Index: src/sys/arch/mac68k/obio/iwm_fd.c
diff -u src/sys/arch/mac68k/obio/iwm_fd.c:1.50 src/sys/arch/mac68k/obio/iwm_fd.c:1.51
--- src/sys/arch/mac68k/obio/iwm_fd.c:1.50	Fri Jul 25 04:10:34 2014
+++ src/sys/arch/mac68k/obio/iwm_fd.c	Wed Dec 31 14:52:05 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: iwm_fd.c,v 1.50 2014/07/25 08:10:34 dholland Exp $	*/
+/*	$NetBSD: iwm_fd.c,v 1.51 2014/12/31 19:52:05 christos Exp $	*/
 
 /*
  * Copyright (c) 1997, 1998 Hauke Fath.  All rights reserved.
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: iwm_fd.c,v 1.50 2014/07/25 08:10:34 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: iwm_fd.c,v 1.51 2014/12/31 19:52:05 christos Exp $");
 
 #include "locators.h"
 
@@ -720,14 +720,11 @@ fdioctl(dev_t dev, u_long cmd, void *dat
 	fd = iwm->fd[fdUnit];
 	result = 0;
 
-	switch (cmd) {
-	case DIOCGDINFO:
-		if (TRACE_IOCTL)
-			printf(" DIOCGDINFO: Get in-core disklabel.\n");
-		*(struct disklabel *) data = *(fd->diskInfo.dk_label);
-		result = 0;
-		break;
+	error = disk_ioctl(&fd->diskIndfo, fdType, cmd, data, flag, l);
+	if (error != EPASSTHROUGH)
+		return error;
 
+	switch (cmd) {
 	case DIOCSDINFO:
 		if (TRACE_IOCTL)
 			printf(" DIOCSDINFO: Set in-core disklabel.\n");
@@ -754,15 +751,6 @@ fdioctl(dev_t dev, u_long cmd, void *dat
 			    fd->diskInfo.dk_cpulabel);
 		break;
 
-	case DIOCGPART:
-		if (TRACE_IOCTL)
-			printf(" DIOCGPART: Get disklabel & partition table.\n");
-		((struct partinfo *)data)->disklab = fd->diskInfo.dk_label;
-		((struct partinfo *)data)->part =
-		    &fd->diskInfo.dk_label->d_partitions[fdType];
-		result = 0;
-		break;
-
 	case DIOCRFORMAT:
 	case DIOCWFORMAT:
 		if (TRACE_IOCTL)

Index: src/sys/arch/sun3/dev/xd.c
diff -u src/sys/arch/sun3/dev/xd.c:1.71 src/sys/arch/sun3/dev/xd.c:1.72
--- src/sys/arch/sun3/dev/xd.c:1.71	Fri Jul 25 04:10:35 2014
+++ src/sys/arch/sun3/dev/xd.c	Wed Dec 31 14:52:05 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: xd.c,v 1.71 2014/07/25 08:10:35 dholland Exp $	*/
+/*	$NetBSD: xd.c,v 1.72 2014/12/31 19:52:05 christos Exp $	*/
 
 /*
  * Copyright (c) 1995 Charles D. Cranor
@@ -46,7 +46,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: xd.c,v 1.71 2014/07/25 08:10:35 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: xd.c,v 1.72 2014/12/31 19:52:05 christos Exp $");
 
 #undef XDC_DEBUG		/* full debug */
 #define XDC_DIAG		/* extra sanity checks */
@@ -853,7 +853,7 @@ xd_getkauthreq(u_char cmd)
  * xdioctl: ioctls on XD drives.   based on ioctl's of other netbsd disks.
  */
 int 
-xdioctl(dev_t dev, u_long command, void *addr, int flag, struct lwp *l)
+xdioctl(dev_t dev, u_long cmd, void *addr, int flag, struct lwp *l)
 {
 	struct xd_softc *xd;
 	struct xd_iocmd *xio;
@@ -865,9 +865,13 @@ xdioctl(dev_t dev, u_long command, void 
 	if (xd == NULL)
 		return (ENXIO);
 
+	error = disk_ioctl(&xd->sc_dk, dev, cmd, addr, flag, l);
+	if (error != EPASSTHROUGH)
+		return error;
+
 	/* switch on ioctl type */
 
-	switch (command) {
+	switch (cmd) {
 	case DIOCSBAD:		/* set bad144 info */
 		if ((flag & FWRITE) == 0)
 			return EBADF;
@@ -876,16 +880,6 @@ xdioctl(dev_t dev, u_long command, void 
 		splx(s);
 		return 0;
 
-	case DIOCGDINFO:	/* get disk label */
-		memcpy(addr, xd->sc_dk.dk_label, sizeof(struct disklabel));
-		return 0;
-
-	case DIOCGPART:	/* get partition info */
-		((struct partinfo *)addr)->disklab = xd->sc_dk.dk_label;
-		((struct partinfo *)addr)->part =
-		    &xd->sc_dk.dk_label->d_partitions[DISKPART(dev)];
-		return 0;
-
 	case DIOCSDINFO:	/* set disk label */
 		if ((flag & FWRITE) == 0)
 			return EBADF;

Index: src/sys/arch/sun3/dev/xy.c
diff -u src/sys/arch/sun3/dev/xy.c:1.76 src/sys/arch/sun3/dev/xy.c:1.77
--- src/sys/arch/sun3/dev/xy.c:1.76	Fri Jul 25 04:10:35 2014
+++ src/sys/arch/sun3/dev/xy.c	Wed Dec 31 14:52:05 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: xy.c,v 1.76 2014/07/25 08:10:35 dholland Exp $	*/
+/*	$NetBSD: xy.c,v 1.77 2014/12/31 19:52:05 christos Exp $	*/
 
 /*
  * Copyright (c) 1995 Charles D. Cranor
@@ -46,7 +46,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: xy.c,v 1.76 2014/07/25 08:10:35 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: xy.c,v 1.77 2014/12/31 19:52:05 christos Exp $");
 
 #undef XYC_DEBUG		/* full debug */
 #undef XYC_DIAG			/* extra sanity checks */
@@ -806,7 +806,7 @@ xy_getkauthreq(u_char cmd)
  * xyioctl: ioctls on XY drives.   based on ioctl's of other netbsd disks.
  */
 int 
-xyioctl(dev_t dev, u_long command, void *addr, int flag, struct lwp *l)
+xyioctl(dev_t dev, u_long cmd, void *addr, int flag, struct lwp *l)
 {
 	struct xy_softc *xy;
 	struct xd_iocmd *xio;
@@ -818,9 +818,13 @@ xyioctl(dev_t dev, u_long command, void 
 	if (xy == NULL)
 		return ENXIO;
 
+	error = disk_ioctl(&xy->sc_dk, dev, cmd, addr, flag, l);
+	if (error != EPASSTHROUGH)
+		return error;
+
 	/* switch on ioctl type */
 
-	switch (command) {
+	switch (cmd) {
 	case DIOCSBAD:		/* set bad144 info */
 		if ((flag & FWRITE) == 0)
 			return EBADF;
@@ -829,16 +833,6 @@ xyioctl(dev_t dev, u_long command, void 
 		splx(s);
 		return 0;
 
-	case DIOCGDINFO:	/* get disk label */
-		memcpy(addr, xy->sc_dk.dk_label, sizeof(struct disklabel));
-		return 0;
-
-	case DIOCGPART:	/* get partition info */
-		((struct partinfo *)addr)->disklab = xy->sc_dk.dk_label;
-		((struct partinfo *)addr)->part =
-		    &xy->sc_dk.dk_label->d_partitions[DISKPART(dev)];
-		return 0;
-
 	case DIOCSDINFO:	/* set disk label */
 		if ((flag & FWRITE) == 0)
 			return EBADF;

Index: src/sys/arch/vax/mba/hp.c
diff -u src/sys/arch/vax/mba/hp.c:1.50 src/sys/arch/vax/mba/hp.c:1.51
--- src/sys/arch/vax/mba/hp.c:1.50	Fri Jul 25 04:10:35 2014
+++ src/sys/arch/vax/mba/hp.c	Wed Dec 31 14:52:05 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: hp.c,v 1.50 2014/07/25 08:10:35 dholland Exp $ */
+/*	$NetBSD: hp.c,v 1.51 2014/12/31 19:52:05 christos Exp $ */
 /*
  * Copyright (c) 1996 Ludd, University of Lule}, Sweden.
  * All rights reserved.
@@ -42,7 +42,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: hp.c,v 1.50 2014/07/25 08:10:35 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: hp.c,v 1.51 2014/12/31 19:52:05 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -324,17 +324,11 @@ hpioctl(dev_t dev, u_long cmd, void *add
 	struct disklabel * const lp = sc->sc_disk.dk_label;
 	int	error;
 
-	switch (cmd) {
-	case DIOCGDINFO:
-		*(struct disklabel *)addr = *lp;
-		return 0;
-
-	case DIOCGPART:
-		((struct partinfo *)addr)->disklab = lp;
-		((struct partinfo *)addr)->part =
-		    &lp->d_partitions[DISKPART(dev)];
-		break;
+	error = disk_ioctl(&sc->sc_disk, dev, cmd, addr, flag, l); 
+	if (error != EPASSTHROUGH)
+		goto out;
 
+	switch (cmd) {
 	case DIOCSDINFO:
 		if ((flag & FWRITE) == 0)
 			return EBADF;

Index: src/sys/arch/vax/vsa/hdc9224.c
diff -u src/sys/arch/vax/vsa/hdc9224.c:1.54 src/sys/arch/vax/vsa/hdc9224.c:1.55
--- src/sys/arch/vax/vsa/hdc9224.c:1.54	Fri Jul 25 04:10:35 2014
+++ src/sys/arch/vax/vsa/hdc9224.c	Wed Dec 31 14:52:05 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: hdc9224.c,v 1.54 2014/07/25 08:10:35 dholland Exp $ */
+/*	$NetBSD: hdc9224.c,v 1.55 2014/12/31 19:52:05 christos Exp $ */
 /*
  * Copyright (c) 1996 Ludd, University of Lule}, Sweden.
  * All rights reserved.
@@ -51,7 +51,7 @@
 #undef	RDDEBUG
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: hdc9224.c,v 1.54 2014/07/25 08:10:35 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: hdc9224.c,v 1.55 2014/12/31 19:52:05 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -688,19 +688,14 @@ rdioctl(dev_t dev, u_long cmd, void *add
 {
 	struct rdsoftc * const rd = device_lookup_private(&rd_cd, DISKUNIT(dev));
 	struct disklabel * const lp = rd->sc_disk.dk_label;
-	int error = 0;
 
-	switch (cmd) {
-	case DIOCGDINFO:
-		*(struct disklabel *)addr = *lp;
-		break;
-
-	case DIOCGPART:
-		((struct partinfo *)addr)->disklab = lp;
-		((struct partinfo *)addr)->part =
-		  &lp->d_partitions[DISKPART(dev)];
-		break;
+	error = disk_ioctl(&rd->sc_disk, dev, cmd, addr, flag, l);
+	if (error != EPASSTHROUGH)
+		return error;
+	else
+		error = 0;
 
+	switch (cmd) {
 	case DIOCWDINFO:
 	case DIOCSDINFO:
 		if ((flag & FWRITE) == 0)

Index: src/sys/arch/x68k/dev/bmd.c
diff -u src/sys/arch/x68k/dev/bmd.c:1.21 src/sys/arch/x68k/dev/bmd.c:1.22
--- src/sys/arch/x68k/dev/bmd.c:1.21	Fri Jul 25 04:10:35 2014
+++ src/sys/arch/x68k/dev/bmd.c	Wed Dec 31 14:52:05 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: bmd.c,v 1.21 2014/07/25 08:10:35 dholland Exp $	*/
+/*	$NetBSD: bmd.c,v 1.22 2014/12/31 19:52:05 christos Exp $	*/
 
 /*
  * Copyright (c) 2002 Tetsuya Isaki. All rights reserved.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: bmd.c,v 1.21 2014/07/25 08:10:35 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: bmd.c,v 1.22 2014/12/31 19:52:05 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -350,14 +350,15 @@ bmdioctl(dev_t dev, u_long cmd, void *da
 	DPRINTF(("%s%d %ld\n", __func__, BMD_UNIT(dev), cmd));
 
 	sc = device_lookup_private(&bmd_cd, BMD_UNIT(dev));
+
 	if (sc == NULL)
 		return ENXIO;
 
-	switch (cmd) {
-	case DIOCGDINFO:
-		*(struct disklabel *)data = *(sc->sc_dkdev.dk_label);
-		break;
+	error = disk_ioctl(&sc->sc_dkdev, dev, cmd, data, flag, l); 
+	if (error != EPASSTHROUGH)
+		return error;
 
+	switch (cmd) {
 	case DIOCWDINFO:
 		if ((flag & FWRITE) == 0)
 			return EBADF;

Index: src/sys/arch/x68k/dev/fd.c
diff -u src/sys/arch/x68k/dev/fd.c:1.111 src/sys/arch/x68k/dev/fd.c:1.112
--- src/sys/arch/x68k/dev/fd.c:1.111	Sun Aug 10 12:44:34 2014
+++ src/sys/arch/x68k/dev/fd.c	Wed Dec 31 14:52:05 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: fd.c,v 1.111 2014/08/10 16:44:34 tls Exp $	*/
+/*	$NetBSD: fd.c,v 1.112 2014/12/31 19:52:05 christos Exp $	*/
 
 /*-
  * Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -64,7 +64,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: fd.c,v 1.111 2014/08/10 16:44:34 tls Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fd.c,v 1.112 2014/12/31 19:52:05 christos Exp $");
 
 #include "opt_ddb.h"
 #include "opt_m68k_arch.h"
@@ -1608,41 +1608,18 @@ fdioctl(dev_t dev, u_long cmd, void *add
 	struct fdformat_parms *form_parms;
 	struct fdformat_cmd *form_cmd;
 	struct ne7_fd_formb *fd_formb;
-	int part = DISKPART(dev);
 	struct disklabel buffer;
 	int error;
 	unsigned int scratch;
 	int il[FD_MAX_NSEC + 1];
 	int i, j;
 
+	error = disk_ioctl(&fd->sc_dk, dev, cmd, addr, flag, l);
+	if (error != EPASSTHROUGH)
+		return error;
+
 	DPRINTF(("fdioctl:"));
 	switch (cmd) {
-	case DIOCGDINFO:
-		DPRINTF(("DIOCGDINFO\n"));
-#if 1
-		*(struct disklabel *)addr = *fd->sc_dk.dk_label;
-		return 0;
-#else
-		memset(&buffer, 0, sizeof(buffer));
-
-		buffer.d_secpercyl = fd->sc_type->seccyl;
-		buffer.d_type = DTYPE_FLOPPY;
-		buffer.d_secsize = 128 << fd->sc_type->secsize;
-
-		if (readdisklabel(dev, fdstrategy, &buffer, NULL) != NULL)
-			return EINVAL;
-
-		*(struct disklabel *)addr = buffer;
-		return 0;
-#endif
-
-	case DIOCGPART:
-		DPRINTF(("DIOCGPART\n"));
-		((struct partinfo *)addr)->disklab = fd->sc_dk.dk_label;
-		((struct partinfo *)addr)->part =
-		    &fd->sc_dk.dk_label->d_partitions[part];
-		return 0;
-
 	case DIOCWLABEL:
 		DPRINTF(("DIOCWLABEL\n"));
 		if ((flag & FWRITE) == 0)

Index: src/sys/dev/ccd.c
diff -u src/sys/dev/ccd.c:1.160 src/sys/dev/ccd.c:1.161
--- src/sys/dev/ccd.c:1.160	Wed Dec 31 12:06:48 2014
+++ src/sys/dev/ccd.c	Wed Dec 31 14:52:05 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: ccd.c,v 1.160 2014/12/31 17:06:48 christos Exp $	*/
+/*	$NetBSD: ccd.c,v 1.161 2014/12/31 19:52:05 christos Exp $	*/
 
 /*-
  * Copyright (c) 1996, 1997, 1998, 1999, 2007, 2009 The NetBSD Foundation, Inc.
@@ -88,7 +88,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ccd.c,v 1.160 2014/12/31 17:06:48 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ccd.c,v 1.161 2014/12/31 19:52:05 christos Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_compat_netbsd.h"
@@ -1196,7 +1196,7 @@ ccdioctl(dev_t dev, u_long cmd, void *da
 		}
 	}
 
-	error = disk_ioctl(&cs->sc_dkdev, cmd, data, flag, l); 
+	error = disk_ioctl(&cs->sc_dkdev, dev, cmd, data, flag, l); 
 	if (error != EPASSTHROUGH)
 		goto out;
 
@@ -1383,25 +1383,6 @@ ccdioctl(dev_t dev, u_long cmd, void *da
 		/* Don't break, otherwise cs is read again. */
 		return 0;
 
-	case DIOCGDINFO:
-		*(struct disklabel *)data = *(cs->sc_dkdev.dk_label);
-		break;
-
-#ifdef __HAVE_OLD_DISKLABEL
-	case ODIOCGDINFO:
-		newlabel = *(cs->sc_dkdev.dk_label);
-		if (newlabel.d_npartitions > OLDMAXPARTITIONS)
-			return ENOTTY;
-		memcpy(data, &newlabel, sizeof (struct olddisklabel));
-		break;
-#endif
-
-	case DIOCGPART:
-		((struct partinfo *)data)->disklab = cs->sc_dkdev.dk_label;
-		((struct partinfo *)data)->part =
-		    &cs->sc_dkdev.dk_label->d_partitions[DISKPART(dev)];
-		break;
-
 	case DIOCCACHESYNC:
 		/*
 		 * We pass this call down to all components and report

Index: src/sys/dev/cgd.c
diff -u src/sys/dev/cgd.c:1.93 src/sys/dev/cgd.c:1.94
--- src/sys/dev/cgd.c:1.93	Tue Dec 30 15:18:44 2014
+++ src/sys/dev/cgd.c	Wed Dec 31 14:52:05 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: cgd.c,v 1.93 2014/12/30 20:18:44 christos Exp $ */
+/* $NetBSD: cgd.c,v 1.94 2014/12/31 19:52:05 christos Exp $ */
 
 /*-
  * Copyright (c) 2002 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cgd.c,v 1.93 2014/12/30 20:18:44 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cgd.c,v 1.94 2014/12/31 19:52:05 christos Exp $");
 
 #include <sys/types.h>
 #include <sys/param.h>
@@ -567,7 +567,7 @@ cgdioctl(dev_t dev, u_long cmd, void *da
 		break;
 	}
 
-	error = disk_ioctl(&dksc->sc_dkdev, cmd, data, flag, l);
+	error = disk_ioctl(&dksc->sc_dkdev, dev, cmd, data, flag, l);
 	if (error != EPASSTHROUGH)
 		return (error);
 

Index: src/sys/dev/dksubr.c
diff -u src/sys/dev/dksubr.c:1.57 src/sys/dev/dksubr.c:1.58
--- src/sys/dev/dksubr.c:1.57	Wed Dec 31 12:06:48 2014
+++ src/sys/dev/dksubr.c	Wed Dec 31 14:52:05 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: dksubr.c,v 1.57 2014/12/31 17:06:48 christos Exp $ */
+/* $NetBSD: dksubr.c,v 1.58 2014/12/31 19:52:05 christos Exp $ */
 
 /*-
  * Copyright (c) 1996, 1997, 1998, 1999, 2002, 2008 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: dksubr.c,v 1.57 2014/12/31 17:06:48 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dksubr.c,v 1.58 2014/12/31 19:52:05 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -332,32 +332,13 @@ dk_ioctl(struct dk_intf *di, struct dk_s
 			return ENXIO;
 	}
 
-	error = disk_ioctl(dk, cmd, data, flag, l);
+	error = disk_ioctl(dk, dev, cmd, data, flag, l);
 	if (error != EPASSTHROUGH)
 		return error;
 	else
 		error = 0;
 
 	switch (cmd) {
-	case DIOCGDINFO:
-		*(struct disklabel *)data = *(dksc->sc_dkdev.dk_label);
-		break;
-
-#ifdef __HAVE_OLD_DISKLABEL
-	case ODIOCGDINFO:
-		newlabel = *(dksc->sc_dkdev.dk_label);
-		if (newlabel.d_npartitions > OLDMAXPARTITIONS)
-			return ENOTTY;
-		memcpy(data, &newlabel, sizeof (struct olddisklabel));
-		break;
-#endif
-
-	case DIOCGPART:
-		((struct partinfo *)data)->disklab = dksc->sc_dkdev.dk_label;
-		((struct partinfo *)data)->part =
-		    &dksc->sc_dkdev.dk_label->d_partitions[DISKPART(dev)];
-		break;
-
 	case DIOCWDINFO:
 	case DIOCSDINFO:
 #ifdef __HAVE_OLD_DISKLABEL

Index: src/sys/dev/ld.c
diff -u src/sys/dev/ld.c:1.79 src/sys/dev/ld.c:1.80
--- src/sys/dev/ld.c:1.79	Wed Dec 31 12:06:48 2014
+++ src/sys/dev/ld.c	Wed Dec 31 14:52:05 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: ld.c,v 1.79 2014/12/31 17:06:48 christos Exp $	*/
+/*	$NetBSD: ld.c,v 1.80 2014/12/31 19:52:05 christos Exp $	*/
 
 /*-
  * Copyright (c) 1998, 2000 The NetBSD Foundation, Inc.
@@ -34,7 +34,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ld.c,v 1.79 2014/12/31 17:06:48 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ld.c,v 1.80 2014/12/31 19:52:05 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -407,41 +407,21 @@ static int
 ldioctl(dev_t dev, u_long cmd, void *addr, int32_t flag, struct lwp *l)
 {
 	struct ld_softc *sc;
-	int part, unit, error;
+	int unit, error;
 #ifdef __HAVE_OLD_DISKLABEL
 	struct disklabel newlabel;
 #endif
 	struct disklabel *lp;
 
 	unit = DISKUNIT(dev);
-	part = DISKPART(dev);
 	sc = device_lookup_private(&ld_cd, unit);
 
-	error = disk_ioctl(&sc->sc_dk, cmd, addr, flag, l);
+	error = disk_ioctl(&sc->sc_dk, dev, cmd, addr, flag, l);
 	if (error != EPASSTHROUGH)
 		return (error);
 
 	error = 0;
 	switch (cmd) {
-	case DIOCGDINFO:
-		memcpy(addr, sc->sc_dk.dk_label, sizeof(struct disklabel));
-		return (0);
-
-#ifdef __HAVE_OLD_DISKLABEL
-	case ODIOCGDINFO:
-		newlabel = *(sc->sc_dk.dk_label);
-		if (newlabel.d_npartitions > OLDMAXPARTITIONS)
-			return ENOTTY;
-		memcpy(addr, &newlabel, sizeof(struct olddisklabel));
-		return (0);
-#endif
-
-	case DIOCGPART:
-		((struct partinfo *)addr)->disklab = sc->sc_dk.dk_label;
-		((struct partinfo *)addr)->part =
-		    &sc->sc_dk.dk_label->d_partitions[part];
-		break;
-
 	case DIOCWDINFO:
 	case DIOCSDINFO:
 #ifdef __HAVE_OLD_DISKLABEL

Index: src/sys/dev/md.c
diff -u src/sys/dev/md.c:1.71 src/sys/dev/md.c:1.72
--- src/sys/dev/md.c:1.71	Fri Jul 25 04:10:35 2014
+++ src/sys/dev/md.c	Wed Dec 31 14:52:05 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: md.c,v 1.71 2014/07/25 08:10:35 dholland Exp $	*/
+/*	$NetBSD: md.c,v 1.72 2014/12/31 19:52:05 christos Exp $	*/
 
 /*
  * Copyright (c) 1995 Gordon W. Ross, Leo Weppelman.
@@ -40,7 +40,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: md.c,v 1.71 2014/07/25 08:10:35 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: md.c,v 1.72 2014/12/31 19:52:05 christos Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_md.h"
@@ -474,8 +474,6 @@ mdioctl(dev_t dev, u_long cmd, void *dat
 {
 	struct md_softc *sc;
 	struct md_conf *umd;
-	struct disklabel *lp;
-	struct partinfo *pp;
 	int error;
 
 	if ((sc = device_lookup_private(&md_cd, MD_UNIT(dev))) == NULL)
@@ -483,18 +481,8 @@ mdioctl(dev_t dev, u_long cmd, void *dat
 
 	mutex_enter(&sc->sc_lock);
 	if (sc->sc_type != MD_UNCONFIGURED) {
-		switch (cmd) {
-		case DIOCGDINFO:
-			lp = (struct disklabel *)data;
-			*lp = *sc->sc_dkdev.dk_label;
-			mutex_exit(&sc->sc_lock);
-			return 0;
-
-		case DIOCGPART:
-			pp = (struct partinfo *)data;
-			pp->disklab = sc->sc_dkdev.dk_label;
-			pp->part =
-			    &sc->sc_dkdev.dk_label->d_partitions[DISKPART(dev)];
+		error = disk_ioctl(&sc->sc_dkdev, dev, cmd, data, flag, l); 
+		if (error != EPASSTHROUGH) {
 			mutex_exit(&sc->sc_lock);
 			return 0;
 		}

Index: src/sys/dev/vnd.c
diff -u src/sys/dev/vnd.c:1.237 src/sys/dev/vnd.c:1.238
--- src/sys/dev/vnd.c:1.237	Wed Dec 31 12:06:48 2014
+++ src/sys/dev/vnd.c	Wed Dec 31 14:52:05 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: vnd.c,v 1.237 2014/12/31 17:06:48 christos Exp $	*/
+/*	$NetBSD: vnd.c,v 1.238 2014/12/31 19:52:05 christos Exp $	*/
 
 /*-
  * Copyright (c) 1996, 1997, 1998, 2008 The NetBSD Foundation, Inc.
@@ -91,7 +91,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vnd.c,v 1.237 2014/12/31 17:06:48 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vnd.c,v 1.238 2014/12/31 19:52:05 christos Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_vnd.h"
@@ -1059,10 +1059,6 @@ vndioctl(dev_t dev, u_long cmd, void *da
 		return ENXIO;
 	vio = (struct vnd_ioctl *)data;
 
-	error = disk_ioctl(&vnd->sc_dkdev, cmd, data, flag, l);
-	if (error != EPASSTHROUGH)
-		return (error);
-
 	/* Must be open for writes for these commands... */
 	switch (cmd) {
 	case VNDIOCSET:
@@ -1107,6 +1103,11 @@ vndioctl(dev_t dev, u_long cmd, void *da
 			return ENXIO;
 	}
 
+	error = disk_ioctl(&vnd->sc_dkdev, dev, cmd, data, flag, l);
+	if (error != EPASSTHROUGH)
+		return error;
+
+
 	switch (cmd) {
 #ifdef VNDIOCSET50
 	case VNDIOCSET50:
@@ -1464,25 +1465,6 @@ unlock_and_exit:
 		break;
 	}
 
-	case DIOCGDINFO:
-		*(struct disklabel *)data = *(vnd->sc_dkdev.dk_label);
-		break;
-
-#ifdef __HAVE_OLD_DISKLABEL
-	case ODIOCGDINFO:
-		newlabel = *(vnd->sc_dkdev.dk_label);
-		if (newlabel.d_npartitions > OLDMAXPARTITIONS)
-			return ENOTTY;
-		memcpy(data, &newlabel, sizeof (struct olddisklabel));
-		break;
-#endif
-
-	case DIOCGPART:
-		((struct partinfo *)data)->disklab = vnd->sc_dkdev.dk_label;
-		((struct partinfo *)data)->part =
-		    &vnd->sc_dkdev.dk_label->d_partitions[DISKPART(dev)];
-		break;
-
 	case DIOCWDINFO:
 	case DIOCSDINFO:
 #ifdef __HAVE_OLD_DISKLABEL

Index: src/sys/dev/ata/wd.c
diff -u src/sys/dev/ata/wd.c:1.416 src/sys/dev/ata/wd.c:1.417
--- src/sys/dev/ata/wd.c:1.416	Wed Dec 31 12:06:48 2014
+++ src/sys/dev/ata/wd.c	Wed Dec 31 14:52:05 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: wd.c,v 1.416 2014/12/31 17:06:48 christos Exp $ */
+/*	$NetBSD: wd.c,v 1.417 2014/12/31 19:52:05 christos Exp $ */
 
 /*
  * Copyright (c) 1998, 2001 Manuel Bouyer.  All rights reserved.
@@ -54,7 +54,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: wd.c,v 1.416 2014/12/31 17:06:48 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: wd.c,v 1.417 2014/12/31 19:52:05 christos Exp $");
 
 #include "opt_ata.h"
 
@@ -1202,9 +1202,9 @@ wdioctl(dev_t dev, u_long xfer, void *ad
 	if ((wd->sc_flags & WDF_LOADED) == 0)
 		return EIO;
 
-	error = disk_ioctl(&wd->sc_dk, xfer, addr, flag, l);
+	error = disk_ioctl(&wd->sc_dk, dev, xfer, addr, flag, l);
 	if (error != EPASSTHROUGH)
-		return (error);
+		return error;
 
 	error = 0;
 	switch (xfer) {
@@ -1272,28 +1272,6 @@ wdioctl(dev_t dev, u_long xfer, void *ad
 		wd->sc_bscount = 0;
 		return 0;
 #endif
-	case DIOCGDINFO:
-		*(struct disklabel *)addr = *(wd->sc_dk.dk_label);
-		return 0;
-#ifdef __HAVE_OLD_DISKLABEL
-	case ODIOCGDINFO:
-		newlabel = malloc(sizeof *newlabel, M_TEMP, M_WAITOK);
-		if (newlabel == NULL)
-			return EIO;
-		*newlabel = *(wd->sc_dk.dk_label);
-		if (newlabel->d_npartitions <= OLDMAXPARTITIONS)
-			memcpy(addr, newlabel, sizeof (struct olddisklabel));
-		else
-			error = ENOTTY;
-		free(newlabel, M_TEMP);
-		return error;
-#endif
-
-	case DIOCGPART:
-		((struct partinfo *)addr)->disklab = wd->sc_dk.dk_label;
-		((struct partinfo *)addr)->part =
-		    &wd->sc_dk.dk_label->d_partitions[WDPART(dev)];
-		return 0;
 
 	case DIOCWDINFO:
 	case DIOCSDINFO:

Index: src/sys/dev/dkwedge/dk.c
diff -u src/sys/dev/dkwedge/dk.c:1.77 src/sys/dev/dkwedge/dk.c:1.78
--- src/sys/dev/dkwedge/dk.c:1.77	Wed Dec 31 03:24:50 2014
+++ src/sys/dev/dkwedge/dk.c	Wed Dec 31 14:52:05 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: dk.c,v 1.77 2014/12/31 08:24:50 mlelstv Exp $	*/
+/*	$NetBSD: dk.c,v 1.78 2014/12/31 19:52:05 christos Exp $	*/
 
 /*-
  * Copyright (c) 2004, 2005, 2006, 2007 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: dk.c,v 1.77 2014/12/31 08:24:50 mlelstv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dk.c,v 1.78 2014/12/31 19:52:05 christos Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_dkwedge.h"
@@ -1358,7 +1358,11 @@ dkioctl(dev_t dev, u_long cmd, void *dat
 	if (sc->sc_parent->dk_rawvp == NULL)
 		return (ENXIO);
 
-	error = disk_ioctl(&sc->sc_dk, cmd, data, flag, l);
+	/*
+	 * We pass 0 instead of our device to indicate we don't
+	 * want to handle disklabel ioctls
+	 */
+	error = disk_ioctl(&sc->sc_dk, 0, cmd, data, flag, l);
 	if (error != EPASSTHROUGH)
 		return (error);
 

Index: src/sys/dev/gpib/rd.c
diff -u src/sys/dev/gpib/rd.c:1.36 src/sys/dev/gpib/rd.c:1.37
--- src/sys/dev/gpib/rd.c:1.36	Sun Aug 10 12:44:35 2014
+++ src/sys/dev/gpib/rd.c	Wed Dec 31 14:52:05 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: rd.c,v 1.36 2014/08/10 16:44:35 tls Exp $ */
+/*	$NetBSD: rd.c,v 1.37 2014/12/31 19:52:05 christos Exp $ */
 
 /*-
  * Copyright (c) 1996-2003 The NetBSD Foundation, Inc.
@@ -72,7 +72,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rd.c,v 1.36 2014/08/10 16:44:35 tls Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rd.c,v 1.37 2014/12/31 19:52:05 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -972,17 +972,11 @@ rdioctl(dev_t dev, u_long cmd, void *dat
 
 	DPRINTF(RDB_FOLLOW, ("rdioctl: sc=%p\n", sc));
 
-	switch (cmd) {
-	case DIOCGDINFO:
-		*(struct disklabel *)data = *lp;
-		return (0);
-
-	case DIOCGPART:
-		((struct partinfo *)data)->disklab = lp;
-		((struct partinfo *)data)->part =
-		    &lp->d_partitions[RDPART(dev)];
-		return (0);
+	error = disk_ioctl(&sk->sc_dk, dev, cmd, data, flag, l);
+	if (error != EPASSTHROUGH)
+		return error;
 
+	switch (cmd) {
 	case DIOCWLABEL:
 		if ((flag & FWRITE) == 0)
 			return (EBADF);

Index: src/sys/dev/isa/fd.c
diff -u src/sys/dev/isa/fd.c:1.105 src/sys/dev/isa/fd.c:1.106
--- src/sys/dev/isa/fd.c:1.105	Sun Aug 10 12:44:35 2014
+++ src/sys/dev/isa/fd.c	Wed Dec 31 14:52:05 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: fd.c,v 1.105 2014/08/10 16:44:35 tls Exp $	*/
+/*	$NetBSD: fd.c,v 1.106 2014/12/31 19:52:05 christos Exp $	*/
 
 /*-
  * Copyright (c) 1998, 2003, 2008 The NetBSD Foundation, Inc.
@@ -81,7 +81,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: fd.c,v 1.105 2014/08/10 16:44:35 tls Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fd.c,v 1.106 2014/12/31 19:52:05 christos Exp $");
 
 #include "opt_ddb.h"
 
@@ -1398,7 +1398,7 @@ fdioctl(dev_t dev, u_long cmd, void *add
 	struct fdformat_parms *form_parms;
 	struct fdformat_cmd *form_cmd;
 	struct ne7_fd_formb *fd_formb;
-	struct disklabel buffer;
+	struct disklabel *lp = fd->sc_dk.dk_label;
 	int error;
 	unsigned int scratch;
 	int il[FD_MAX_NSEC + 1];
@@ -1407,38 +1407,32 @@ fdioctl(dev_t dev, u_long cmd, void *add
 	struct disklabel newlabel;
 #endif
 
-	error = disk_ioctl(&fd->sc_dk, cmd, addr, flag, l);
-	if (error != EPASSTHROUGH)
-		return (error);
-
 	switch (cmd) {
+	case DIOCGPART:
 	case DIOCGDINFO:
 #ifdef __HAVE_OLD_DISKLABEL
 	case ODIOCGDINFO:
 #endif
-		memset(&buffer, 0, sizeof(buffer));
+		memset(lp, 0, sizeof(*lp));
 
-		buffer.d_type = DTYPE_FLOPPY;
-		buffer.d_secsize = FDC_BSIZE;
-		buffer.d_nsectors = fd->sc_type->sectrac;
-		buffer.d_ntracks = fd->sc_type->heads;
-		buffer.d_ncylinders = fd->sc_type->cyls;
-		buffer.d_secpercyl = fd->sc_type->seccyl;
-		buffer.d_secperunit = fd->sc_type->size;
+		lp->d_type = DTYPE_FLOPPY;
+		lp->d_secsize = FDC_BSIZE;
+		lp->d_nsectors = fd->sc_type->sectrac;
+		lp->d_ntracks = fd->sc_type->heads;
+		lp->d_ncylinders = fd->sc_type->cyls;
+		lp->d_secpercyl = fd->sc_type->seccyl;
+		lp->d_secperunit = fd->sc_type->size;
 
-		if (readdisklabel(dev, fdstrategy, &buffer, NULL) != NULL)
+		if (readdisklabel(dev, fdstrategy, lp, NULL) != NULL)
 			return EINVAL;
+		break;
+	}
 
-#ifdef __HAVE_OLD_DISKLABEL
-		if (cmd == ODIOCGDINFO) {
-			if (buffer.d_npartitions > OLDMAXPARTITIONS)
-				return ENOTTY;
-			memcpy(addr, &buffer, sizeof (struct olddisklabel));
-		} else
-#endif
-		*(struct disklabel *)addr = buffer;
-		return 0;
+	error = disk_ioctl(&fd->sc_dk, dev, cmd, addr, flag, l);
+	if (error != EPASSTHROUGH)
+		return error;
 
+	switch (cmd) {
 	case DIOCWLABEL:
 		if ((flag & FWRITE) == 0)
 			return EBADF;
@@ -1450,24 +1444,20 @@ fdioctl(dev_t dev, u_long cmd, void *add
 	case ODIOCWDINFO:
 #endif
 	{
-		struct disklabel *lp;
-
 		if ((flag & FWRITE) == 0)
 			return EBADF;
 #ifdef __HAVE_OLD_DISKLABEL
 		if (cmd == ODIOCWDINFO) {
 			memset(&newlabel, 0, sizeof newlabel);
 			memcpy(&newlabel, addr, sizeof (struct olddisklabel));
-			lp = &newlabel;
-		} else
+			addr = &newlabel;
+		}
 #endif
-		lp = (struct disklabel *)addr;
-
-		error = setdisklabel(&buffer, lp, 0, NULL);
+		error = setdisklabel(lp, addr, 0, NULL);
 		if (error)
 			return error;
 
-		error = writedisklabel(dev, fdstrategy, &buffer, NULL);
+		error = writedisklabel(dev, fdstrategy, lp, NULL);
 		return error;
 	}
 

Index: src/sys/dev/isa/mcd.c
diff -u src/sys/dev/isa/mcd.c:1.113 src/sys/dev/isa/mcd.c:1.114
--- src/sys/dev/isa/mcd.c:1.113	Fri Jul 25 04:10:37 2014
+++ src/sys/dev/isa/mcd.c	Wed Dec 31 14:52:05 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: mcd.c,v 1.113 2014/07/25 08:10:37 dholland Exp $	*/
+/*	$NetBSD: mcd.c,v 1.114 2014/12/31 19:52:05 christos Exp $	*/
 
 /*
  * Copyright (c) 1993, 1994, 1995 Charles M. Hannum.  All rights reserved.
@@ -56,7 +56,7 @@
 /*static char COPYRIGHT[] = "mcd-driver (C)1993 by H.Veit & B.Moore";*/
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: mcd.c,v 1.113 2014/07/25 08:10:37 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mcd.c,v 1.114 2014/12/31 19:52:05 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -579,26 +579,12 @@ mcdioctl(dev_t dev, u_long cmd, void *ad
 	if ((sc->flags & MCDF_LOADED) == 0)
 		return EIO;
 
+	error = disk_ioctl(&sc->sc_dk, dev, cmd, addr, flag, l);
+	if (error != EPASSTHROUGH)
+		return error;
+
 	part = MCDPART(dev);
 	switch (cmd) {
-	case DIOCGDINFO:
-		*(struct disklabel *)addr = *(sc->sc_dk.dk_label);
-		return 0;
-#ifdef __HAVE_OLD_DISKLABEL
-	case ODIOCGDINFO:
-		newlabel = *(sc->sc_dk.dk_label);
-		if (newlabel.d_npartitions > OLDMAXPARTITIONS)
-			return ENOTTY;
-		memcpy(addr, &newlabel, sizeof (struct olddisklabel));
-		return 0;
-#endif
-
-	case DIOCGPART:
-		((struct partinfo *)addr)->disklab = sc->sc_dk.dk_label;
-		((struct partinfo *)addr)->part =
-		    &sc->sc_dk.dk_label->d_partitions[part];
-		return 0;
-
 	case DIOCWDINFO:
 	case DIOCSDINFO:
 #ifdef __HAVE_OLD_DISKLABEL

Index: src/sys/dev/mca/ed_mca.c
diff -u src/sys/dev/mca/ed_mca.c:1.60 src/sys/dev/mca/ed_mca.c:1.61
--- src/sys/dev/mca/ed_mca.c:1.60	Wed Dec 31 12:06:48 2014
+++ src/sys/dev/mca/ed_mca.c	Wed Dec 31 14:52:05 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: ed_mca.c,v 1.60 2014/12/31 17:06:48 christos Exp $	*/
+/*	$NetBSD: ed_mca.c,v 1.61 2014/12/31 19:52:05 christos Exp $	*/
 
 /*
  * Copyright (c) 2001 The NetBSD Foundation, Inc.
@@ -34,7 +34,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ed_mca.c,v 1.60 2014/12/31 17:06:48 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ed_mca.c,v 1.61 2014/12/31 19:52:05 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -478,21 +478,11 @@ edmcaioctl(dev_t dev, u_long xfer, void 
 	if ((ed->sc_flags & WDF_LOADED) == 0)
 		return EIO;
 
-        error = disk_ioctl(&ed->sc_dk, xfer, addr, flag, l);
+        error = disk_ioctl(&ed->sc_dk, dev, xfer, addr, flag, l);
 	if (error != EPASSTHROUGH)
 		return error;
 
 	switch (xfer) {
-	case DIOCGDINFO:
-		*(struct disklabel *)addr = *(ed->sc_dk.dk_label);
-		return 0;
-
-	case DIOCGPART:
-		((struct partinfo *)addr)->disklab = ed->sc_dk.dk_label;
-		((struct partinfo *)addr)->part =
-		    &ed->sc_dk.dk_label->d_partitions[DISKPART(dev)];
-		return 0;
-
 	case DIOCWDINFO:
 	case DIOCSDINFO:
 	{

Index: src/sys/dev/mscp/mscp_disk.c
diff -u src/sys/dev/mscp/mscp_disk.c:1.83 src/sys/dev/mscp/mscp_disk.c:1.84
--- src/sys/dev/mscp/mscp_disk.c:1.83	Wed Dec 31 12:06:48 2014
+++ src/sys/dev/mscp/mscp_disk.c	Wed Dec 31 14:52:05 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: mscp_disk.c,v 1.83 2014/12/31 17:06:48 christos Exp $	*/
+/*	$NetBSD: mscp_disk.c,v 1.84 2014/12/31 19:52:05 christos Exp $	*/
 /*
  * Copyright (c) 1988 Regents of the University of California.
  * All rights reserved.
@@ -82,7 +82,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: mscp_disk.c,v 1.83 2014/12/31 17:06:48 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mscp_disk.c,v 1.84 2014/12/31 19:52:05 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/buf.h>
@@ -412,32 +412,13 @@ raioctl(dev_t dev, u_long cmd, void *dat
 
 	lp = ra->ra_disk.dk_label;
 
-	error = disk_ioctl(&ra->ra_disk, cmd, data, flag, l);
+	error = disk_ioctl(&ra->ra_disk, dev, cmd, data, flag, l);
 	if (error != EPASSTHROUGH)
 		return error;
 	else
 		error = 0;
 
 	switch (cmd) {
-
-	case DIOCGDINFO:
-		memcpy(data, lp, sizeof (struct disklabel));
-		break;
-#ifdef __HAVE_OLD_DISKLABEL
-	case ODIOCGDINFO:
-		memcpy(&newlabel, lp, sizeof newlabel);
-		if (newlabel.d_npartitions > OLDMAXPARTITIONS)
-			return ENOTTY;
-		memcpy(data, &newlabel, sizeof (struct olddisklabel));
-		break;
-#endif
-
-	case DIOCGPART:
-		((struct partinfo *)data)->disklab = lp;
-		((struct partinfo *)data)->part =
-		    &lp->d_partitions[DISKPART(dev)];
-		break;
-
 	case DIOCWDINFO:
 	case DIOCSDINFO:
 #ifdef __HAVE_OLD_DISKLABEL
@@ -877,25 +858,13 @@ rxioctl(dev_t dev, u_long cmd, void *dat
 
 	lp = rx->ra_disk.dk_label;
 
-        error = disk_ioctl(&rx->ra_disk, cmd, data, flag, l);
+        error = disk_ioctl(&rx->ra_disk, dev, cmd, data, flag, l);
 	if (error != EPASSTHROUGH)
 		return error;
 	else
 		error = 0;
 
 	switch (cmd) {
-
-	case DIOCGDINFO:
-		memcpy(data, lp, sizeof (struct disklabel));
-		break;
-
-	case DIOCGPART:
-		((struct partinfo *)data)->disklab = lp;
-		((struct partinfo *)data)->part =
-		    &lp->d_partitions[DISKPART(dev)];
-		break;
-
-
 	case DIOCWDINFO:
 	case DIOCSDINFO:
 	case DIOCWLABEL:

Index: src/sys/dev/ofw/ofdisk.c
diff -u src/sys/dev/ofw/ofdisk.c:1.49 src/sys/dev/ofw/ofdisk.c:1.50
--- src/sys/dev/ofw/ofdisk.c:1.49	Wed Dec 31 12:06:48 2014
+++ src/sys/dev/ofw/ofdisk.c	Wed Dec 31 14:52:06 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: ofdisk.c,v 1.49 2014/12/31 17:06:48 christos Exp $	*/
+/*	$NetBSD: ofdisk.c,v 1.50 2014/12/31 19:52:06 christos Exp $	*/
 
 /*
  * Copyright (C) 1995, 1996 Wolfgang Solfrank.
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ofdisk.c,v 1.49 2014/12/31 17:06:48 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ofdisk.c,v 1.50 2014/12/31 19:52:06 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/buf.h>
@@ -369,29 +369,11 @@ ofdisk_ioctl(dev_t dev, u_long cmd, void
 			return ENOTTY;
 	}
 
-	error = disk_ioctl(&of->sc_dk, cmd, data, flag, l);
+	error = disk_ioctl(&of->sc_dk, dev, cmd, data, flag, l);
 	if (error != EPASSTHROUGH)
 		return error;
 
 	switch (cmd) {
-	case DIOCGDINFO:
-		*(struct disklabel *)data = *of->sc_dk.dk_label;
-		return 0;
-#ifdef __HAVE_OLD_DISKLABEL
-	case ODIOCGDINFO:
-		newlabel = *of->sc_dk.dk_label;
-		if (newlabel.d_npartitions > OLDMAXPARTITIONS)
-			return ENOTTY;
-		memcpy(data, &newlabel, sizeof (struct olddisklabel));
-		return 0;
-#endif
-
-	case DIOCGPART:
-		((struct partinfo *)data)->disklab = of->sc_dk.dk_label;
-		((struct partinfo *)data)->part =
-			&of->sc_dk.dk_label->d_partitions[DISKPART(dev)];
-		return 0;
-
 	case DIOCWDINFO:
 	case DIOCSDINFO:
 #ifdef __HAVE_OLD_DISKLABEL

Index: src/sys/dev/qbus/rf.c
diff -u src/sys/dev/qbus/rf.c:1.29 src/sys/dev/qbus/rf.c:1.30
--- src/sys/dev/qbus/rf.c:1.29	Mon Aug  4 10:20:33 2014
+++ src/sys/dev/qbus/rf.c	Wed Dec 31 14:52:06 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: rf.c,v 1.29 2014/08/04 14:20:33 ryoon Exp $	*/
+/*	$NetBSD: rf.c,v 1.30 2014/12/31 19:52:06 christos Exp $	*/
 /*
  * Copyright (c) 2002 Jochen Kunz.
  * All rights reserved.
@@ -36,7 +36,7 @@ TODO:
 */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rf.c,v 1.29 2014/08/04 14:20:33 ryoon Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rf.c,v 1.30 2014/12/31 19:52:06 christos Exp $");
 
 /* autoconfig stuff */
 #include <sys/param.h>
@@ -1090,27 +1090,22 @@ int
 rfioctl(dev_t dev, u_long cmd, void *data, int fflag, struct lwp *l)
 {
 	struct rf_softc *rf_sc = device_lookup_private(&rf_cd, DISKUNIT(dev));
+	int error;
 
 	/* We are going to operate on a non-open dev? PANIC! */
 	if ((rf_sc->sc_state & 1 << (DISKPART(dev) + RFS_OPEN_SHIFT)) == 0)
 		panic("rfioctl: can not operate on non-open drive %s "
 		    "partition %"PRIu32, device_xname(rf_sc->sc_dev), DISKPART(dev));
+	error = disk_ioctl(&rf_sc->sc_disk, dev, cmd, data, fflag, l);
+	if (error != EPASSTHROUGH)
+		return error;
+
 	switch (cmd) {
 	/* get and set disklabel; DIOCGPART used internally */
-	case DIOCGDINFO: /* get */
-		memcpy(data, rf_sc->sc_disk.dk_label,
-		    sizeof(struct disklabel));
-		return(0);
 	case DIOCSDINFO: /* set */
 		return(0);
 	case DIOCWDINFO: /* set, update disk */
 		return(0);
-	case DIOCGPART:  /* get partition */
-		((struct partinfo *)data)->disklab = rf_sc->sc_disk.dk_label;
-		((struct partinfo *)data)->part =
-		    &rf_sc->sc_disk.dk_label->d_partitions[DISKPART(dev)];
-		return(0);
-
 	/* do format operation, read or write */
 	case DIOCRFORMAT:
 	break;

Index: src/sys/dev/qbus/rl.c
diff -u src/sys/dev/qbus/rl.c:1.47 src/sys/dev/qbus/rl.c:1.48
--- src/sys/dev/qbus/rl.c:1.47	Wed Dec 31 12:06:48 2014
+++ src/sys/dev/qbus/rl.c	Wed Dec 31 14:52:06 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: rl.c,v 1.47 2014/12/31 17:06:48 christos Exp $	*/
+/*	$NetBSD: rl.c,v 1.48 2014/12/31 19:52:06 christos Exp $	*/
 
 /*
  * Copyright (c) 2000 Ludd, University of Lule}, Sweden. All rights reserved.
@@ -43,7 +43,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rl.c,v 1.47 2014/12/31 17:06:48 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rl.c,v 1.48 2014/12/31 19:52:06 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/device.h>
@@ -445,35 +445,16 @@ rlioctl(dev_t dev, u_long cmd, void *add
 	struct disklabel *lp = rc->rc_disk.dk_label;
 	int error;
 #ifdef __HAVE_OLD_DISKLABEL
-	struct diklabel newlabel;
+	struct disklabel newlabel;
 #endif
 
-	error = disk_ioctl(&rc->rc_disk, xfer, addr, flag, l);
+	error = disk_ioctl(&rc->rc_disk, dev, cmd, addr, flag, l);
 	if (error != EPASSTHROUGH)
 		return error;
 	else
 		error = 0;
 
 	switch (cmd) {
-	case DIOCGDINFO:
-		memcpy(addr, lp, sizeof (struct disklabel));
-		break;
-
-#ifdef __HAVE_OLD_DISKLABEL
-	case ODIOCGDINFO:
-		newlabel = *lp;
-		if (newlabel.d_npartitions > OLDMAXPARTITIONS)
-			return ENOTTY;
-		memcpy(addr, &newlabel, sizeof (struct olddisklabel));
-		break;
-#endif
-
-	case DIOCGPART:
-		((struct partinfo *)addr)->disklab = lp;
-		((struct partinfo *)addr)->part =
-		    &lp->d_partitions[DISKPART(dev)];
-		break;
-
 	case DIOCSDINFO:
 	case DIOCWDINFO:
 #ifdef __HAVE_OLD_DISKLABEL

Index: src/sys/dev/raidframe/rf_netbsdkintf.c
diff -u src/sys/dev/raidframe/rf_netbsdkintf.c:1.319 src/sys/dev/raidframe/rf_netbsdkintf.c:1.320
--- src/sys/dev/raidframe/rf_netbsdkintf.c:1.319	Wed Dec 31 12:06:48 2014
+++ src/sys/dev/raidframe/rf_netbsdkintf.c	Wed Dec 31 14:52:06 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: rf_netbsdkintf.c,v 1.319 2014/12/31 17:06:48 christos Exp $	*/
+/*	$NetBSD: rf_netbsdkintf.c,v 1.320 2014/12/31 19:52:06 christos Exp $	*/
 
 /*-
  * Copyright (c) 1996, 1997, 1998, 2008-2011 The NetBSD Foundation, Inc.
@@ -101,7 +101,7 @@
  ***********************************************************/
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rf_netbsdkintf.c,v 1.319 2014/12/31 17:06:48 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rf_netbsdkintf.c,v 1.320 2014/12/31 19:52:06 christos Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_compat_netbsd.h"
@@ -1826,29 +1826,11 @@ raidioctl(dev_t dev, u_long cmd, void *d
 	 * Add support for "regular" device ioctls here.
 	 */
 	
-	error = disk_ioctl(&rs->sc_dkdev, cmd, data, flag, l); 
+	error = disk_ioctl(&rs->sc_dkdev, dev, cmd, data, flag, l); 
 	if (error != EPASSTHROUGH)
 		return (error);
 
 	switch (cmd) {
-	case DIOCGDINFO:
-		*(struct disklabel *) data = *(rs->sc_dkdev.dk_label);
-		break;
-#ifdef __HAVE_OLD_DISKLABEL
-	case ODIOCGDINFO:
-		newlabel = *(rs->sc_dkdev.dk_label);
-		if (newlabel.d_npartitions > OLDMAXPARTITIONS)
-			return ENOTTY;
-		memcpy(data, &newlabel, sizeof (struct olddisklabel));
-		break;
-#endif
-
-	case DIOCGPART:
-		((struct partinfo *) data)->disklab = rs->sc_dkdev.dk_label;
-		((struct partinfo *) data)->part =
-		    &rs->sc_dkdev.dk_label->d_partitions[DISKPART(dev)];
-		break;
-
 	case DIOCWDINFO:
 	case DIOCSDINFO:
 #ifdef __HAVE_OLD_DISKLABEL

Index: src/sys/dev/scsipi/cd.c
diff -u src/sys/dev/scsipi/cd.c:1.326 src/sys/dev/scsipi/cd.c:1.327
--- src/sys/dev/scsipi/cd.c:1.326	Wed Dec 31 14:37:35 2014
+++ src/sys/dev/scsipi/cd.c	Wed Dec 31 14:52:06 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: cd.c,v 1.326 2014/12/31 19:37:35 mlelstv Exp $	*/
+/*	$NetBSD: cd.c,v 1.327 2014/12/31 19:52:06 christos Exp $	*/
 
 /*-
  * Copyright (c) 1998, 2001, 2003, 2004, 2005, 2008 The NetBSD Foundation,
@@ -50,7 +50,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cd.c,v 1.326 2014/12/31 19:37:35 mlelstv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cd.c,v 1.327 2014/12/31 19:52:06 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -1321,35 +1321,12 @@ cdioctl(dev_t dev, u_long cmd, void *add
 		}
 	}
 
-	error = disk_ioctl(&cd->sc_dk, cmd, addr, flag, l); 
+	error = disk_ioctl(&cd->sc_dk, dev, cmd, addr, flag, l); 
 	if (error != EPASSTHROUGH)
 		return (error);
 
 	error = 0;
 	switch (cmd) {
-	case DIOCGDINFO:
-		*(struct disklabel *)addr = *(cd->sc_dk.dk_label);
-		return (0);
-#ifdef __HAVE_OLD_DISKLABEL
-	case ODIOCGDINFO:
-		newlabel = malloc(sizeof (*newlabel), M_TEMP, M_WAITOK);
-		if (newlabel == NULL)
-			return (EIO);
-		memcpy(newlabel, cd->sc_dk.dk_label, sizeof (*newlabel));
-		if (newlabel->d_npartitions > OLDMAXPARTITIONS)
-			error = ENOTTY;
-		else
-			memcpy(addr, newlabel, sizeof (struct olddisklabel));
-		free(newlabel, M_TEMP);
-		return error;
-#endif
-
-	case DIOCGPART:
-		((struct partinfo *)addr)->disklab = cd->sc_dk.dk_label;
-		((struct partinfo *)addr)->part =
-		    &cd->sc_dk.dk_label->d_partitions[part];
-		return (0);
-
 	case DIOCWDINFO:
 	case DIOCSDINFO:
 #ifdef __HAVE_OLD_DISKLABEL

Index: src/sys/dev/scsipi/sd.c
diff -u src/sys/dev/scsipi/sd.c:1.312 src/sys/dev/scsipi/sd.c:1.313
--- src/sys/dev/scsipi/sd.c:1.312	Wed Dec 31 12:06:48 2014
+++ src/sys/dev/scsipi/sd.c	Wed Dec 31 14:52:06 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: sd.c,v 1.312 2014/12/31 17:06:48 christos Exp $	*/
+/*	$NetBSD: sd.c,v 1.313 2014/12/31 19:52:06 christos Exp $	*/
 
 /*-
  * Copyright (c) 1998, 2003, 2004 The NetBSD Foundation, Inc.
@@ -47,7 +47,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sd.c,v 1.312 2014/12/31 17:06:48 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sd.c,v 1.313 2014/12/31 19:52:06 christos Exp $");
 
 #include "opt_scsi.h"
 
@@ -1053,36 +1053,12 @@ sdioctl(dev_t dev, u_long cmd, void *add
 		}
 	}
 
-	error = disk_ioctl(&sd->sc_dk, cmd, addr, flag, l); 
+	error = disk_ioctl(&sd->sc_dk, dev, cmd, addr, flag, l); 
 	if (error != EPASSTHROUGH)
 		return (error);
 
 	error = 0;
 	switch (cmd) {
-	case DIOCGDINFO:
-		*(struct disklabel *)addr = *(sd->sc_dk.dk_label);
-		return (0);
-
-#ifdef __HAVE_OLD_DISKLABEL
-	case ODIOCGDINFO:
-		newlabel = malloc(sizeof *newlabel, M_TEMP, M_WAITOK);
-		if (newlabel == NULL)
-			return EIO;
-		memcpy(newlabel, sd->sc_dk.dk_label, sizeof (*newlabel));
-		if (newlabel->d_npartitions <= OLDMAXPARTITIONS)
-			memcpy(addr, newlabel, sizeof (struct olddisklabel));
-		else
-			error = ENOTTY;
-		free(newlabel, M_TEMP);
-		return error;
-#endif
-
-	case DIOCGPART:
-		((struct partinfo *)addr)->disklab = sd->sc_dk.dk_label;
-		((struct partinfo *)addr)->part =
-		    &sd->sc_dk.dk_label->d_partitions[part];
-		return (0);
-
 	case DIOCWDINFO:
 	case DIOCSDINFO:
 #ifdef __HAVE_OLD_DISKLABEL

Index: src/sys/dev/vme/xd.c
diff -u src/sys/dev/vme/xd.c:1.93 src/sys/dev/vme/xd.c:1.94
--- src/sys/dev/vme/xd.c:1.93	Fri Jul 25 04:10:39 2014
+++ src/sys/dev/vme/xd.c	Wed Dec 31 14:52:06 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: xd.c,v 1.93 2014/07/25 08:10:39 dholland Exp $	*/
+/*	$NetBSD: xd.c,v 1.94 2014/12/31 19:52:06 christos Exp $	*/
 
 /*
  * Copyright (c) 1995 Charles D. Cranor
@@ -45,7 +45,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: xd.c,v 1.93 2014/07/25 08:10:39 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: xd.c,v 1.94 2014/12/31 19:52:06 christos Exp $");
 
 #undef XDC_DEBUG		/* full debug */
 #define XDC_DIAG		/* extra sanity checks */
@@ -1034,6 +1034,10 @@ xdioctl(dev_t dev, u_long command, void 
 	if ((xd = device_lookup_private(&xd_cd, unit)) == NULL)
 		return (ENXIO);
 
+	error = disk_ioctl(&xd->sc_dk, dev, command, addr, flag, l);
+	if (error != EPASSTHROUGH)
+		return error;
+
 	/* switch on ioctl type */
 
 	switch (command) {
@@ -1045,24 +1049,6 @@ xdioctl(dev_t dev, u_long command, void 
 		splx(s);
 		return 0;
 
-	case DIOCGDINFO:	/* get disk label */
-		memcpy(addr, xd->sc_dk.dk_label, sizeof(struct disklabel));
-		return 0;
-#ifdef __HAVE_OLD_DISKLABEL
-	case ODIOCGDINFO:
-		newlabel = *(xd->sc_dk.dk_label);
-		if (newlabel.d_npartitions > OLDMAXPARTITIONS)
-			return ENOTTY;
-		memcpy(addr, &newlabel, sizeof (struct olddisklabel));
-		return 0;
-#endif
-
-	case DIOCGPART:	/* get partition info */
-		((struct partinfo *) addr)->disklab = xd->sc_dk.dk_label;
-		((struct partinfo *) addr)->part =
-		    &xd->sc_dk.dk_label->d_partitions[DISKPART(dev)];
-		return 0;
-
 	case DIOCSDINFO:	/* set disk label */
 #ifdef __HAVE_OLD_DISKLABEL
 	case ODIOCSDINFO:

Index: src/sys/dev/vme/xy.c
diff -u src/sys/dev/vme/xy.c:1.97 src/sys/dev/vme/xy.c:1.98
--- src/sys/dev/vme/xy.c:1.97	Fri Jul 25 04:10:39 2014
+++ src/sys/dev/vme/xy.c	Wed Dec 31 14:52:06 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: xy.c,v 1.97 2014/07/25 08:10:39 dholland Exp $	*/
+/*	$NetBSD: xy.c,v 1.98 2014/12/31 19:52:06 christos Exp $	*/
 
 /*
  * Copyright (c) 1995 Charles D. Cranor
@@ -45,7 +45,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: xy.c,v 1.97 2014/07/25 08:10:39 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: xy.c,v 1.98 2014/12/31 19:52:06 christos Exp $");
 
 #undef XYC_DEBUG		/* full debug */
 #undef XYC_DIAG			/* extra sanity checks */
@@ -953,6 +953,10 @@ xyioctl(dev_t dev, u_long command, void 
 	if ((xy = device_lookup_private(&xy_cd, unit)) == NULL)
 		return (ENXIO);
 
+	error = disk_ioctl(&xy->sc_dk, dev, command, addr, flag, l);
+	if (error != EPASSTHROUGH)
+		return error;
+
 	/* switch on ioctl type */
 
 	switch (command) {
@@ -964,24 +968,6 @@ xyioctl(dev_t dev, u_long command, void 
 		splx(s);
 		return 0;
 
-	case DIOCGDINFO:	/* get disk label */
-		memcpy(addr, xy->sc_dk.dk_label, sizeof(struct disklabel));
-		return 0;
-#ifdef __HAVE_OLD_DISKLABEL
-	case ODIOCGDINFO:
-		newlabel = *(xy->sc_dk.dk_label);
-		if (newlabel.d_npartitions > OLDMAXPARTITIONS)
-			return ENOTTY;
-		memcpy(addr, &newlabel, sizeof (struct olddisklabel));
-		return 0;
-#endif
-
-	case DIOCGPART:	/* get partition info */
-		((struct partinfo *) addr)->disklab = xy->sc_dk.dk_label;
-		((struct partinfo *) addr)->part =
-		    &xy->sc_dk.dk_label->d_partitions[DISKPART(dev)];
-		return 0;
-
 	case DIOCSDINFO:	/* set disk label */
 #ifdef __HAVE_OLD_DISKLABEL
 	case ODIOCSDINFO:

Index: src/sys/kern/subr_disk.c
diff -u src/sys/kern/subr_disk.c:1.107 src/sys/kern/subr_disk.c:1.108
--- src/sys/kern/subr_disk.c:1.107	Wed Dec 31 12:06:49 2014
+++ src/sys/kern/subr_disk.c	Wed Dec 31 14:52:06 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: subr_disk.c,v 1.107 2014/12/31 17:06:49 christos Exp $	*/
+/*	$NetBSD: subr_disk.c,v 1.108 2014/12/31 19:52:06 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.107 2014/12/31 17:06:49 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: subr_disk.c,v 1.108 2014/12/31 19:52:06 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/kernel.h>
@@ -488,11 +488,41 @@ convertdisklabel(struct disklabel *lp, v
  *	Generic disk ioctl handling.
  */
 int
-disk_ioctl(struct disk *dk, u_long cmd, void *data, int flag, struct lwp *l)
+disk_ioctl(struct disk *dk, dev_t dev, u_long cmd, void *data, int flag,
+    struct lwp *l)
 {
 	struct dkwedge_info *dkw;
+	struct partinfo *pt;
+#ifdef __HAVE_OLD_DISKLABEL
+	struct disklabel newlabel;
+#endif
 
 	switch (cmd) {
+	case DIOCGDINFO:
+		if (dev == 0)
+			return EPASSTHROUGH;
+		memcpy(data, dk->dk_label, sizeof (*dk->dk_label));
+		return 0;
+
+#ifdef __HAVE_OLD_DISKLABEL
+	case ODIOCGDINFO:
+		if (dev == 0)
+			return EPASSTHROUGH;
+		memcpy(&newlabel, dk->dk_label, sizeof(newlabel));
+		if (newlabel.d_npartitions > OLDMAXPARTITIONS)
+			return ENOTTY;
+		memcpy(data, &newlabel, sizeof(struct olddisklabel));
+		return 0;
+#endif
+
+	case DIOCGPART:
+		if (dev == 0)
+			return EPASSTHROUGH;
+		pt = data;
+		pt->disklab = dk->dk_label;
+		pt->part = &dk->dk_label->d_partitions[DISKPART(dev)];
+		return 0;
+
 	case DIOCAWEDGE:
 		if ((flag & FWRITE) == 0)
 			return EBADF;

Index: src/sys/sys/param.h
diff -u src/sys/sys/param.h:1.463 src/sys/sys/param.h:1.464
--- src/sys/sys/param.h:1.463	Sun Dec 14 18:49:45 2014
+++ src/sys/sys/param.h	Wed Dec 31 14:52:06 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: param.h,v 1.463 2014/12/14 23:49:45 chs Exp $	*/
+/*	$NetBSD: param.h,v 1.464 2014/12/31 19:52:06 christos Exp $	*/
 
 /*-
  * Copyright (c) 1982, 1986, 1989, 1993
@@ -63,7 +63,7 @@
  *	2.99.9		(299000900)
  */
 
-#define	__NetBSD_Version__	799000300	/* NetBSD 7.99.3 */
+#define	__NetBSD_Version__	799000400	/* NetBSD 7.99.4 */
 
 #define __NetBSD_Prereq__(M,m,p) (((((M) * 100000000) + \
     (m) * 1000000) + (p) * 100) <= __NetBSD_Version__)

Reply via email to