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__)