Module Name: src Committed By: haad Date: Fri Jun 5 21:52:32 UTC 2009
Modified Files: src/sbin/fsck: Makefile partutil.c src/sbin/fsck_ffs: Makefile src/sbin/newfs: Makefile src/sbin/newfs_ext2fs: Makefile src/sbin/newfs_lfs: Makefile src/sbin/newfs_msdos: Makefile src/sbin/resize_lfs: Makefile src/sys/dev/dm: device-mapper.c dm.h dm_ioctl.c src/sys/dev/isa: fd.c src/sys/dev/raidframe: rf_netbsdkintf.c src/sys/dev/scsipi: cd.c sd.c Log Message: Add support for DIOCGDISKINFO to disk like device drivers. Change partutil.c::getdiskinfo to use it to get disk geometry info. Use DIOCGWEDGEINFO ioctl to get information about partition size, if disk driver doesn't support it use old DIOCGDINFO. This patch adds support for wedge like devices(lvm logical volumes, ZFS zvol partitions) to newfs and other tools. No objections on tech-userle...@. To generate a diff of this commit: cvs rdiff -u -r1.17 -r1.18 src/sbin/fsck/Makefile cvs rdiff -u -r1.4 -r1.5 src/sbin/fsck/partutil.c cvs rdiff -u -r1.39 -r1.40 src/sbin/fsck_ffs/Makefile cvs rdiff -u -r1.32 -r1.33 src/sbin/newfs/Makefile cvs rdiff -u -r1.2 -r1.3 src/sbin/newfs_ext2fs/Makefile cvs rdiff -u -r1.7 -r1.8 src/sbin/newfs_lfs/Makefile cvs rdiff -u -r1.4 -r1.5 src/sbin/newfs_msdos/Makefile cvs rdiff -u -r1.4 -r1.5 src/sbin/resize_lfs/Makefile cvs rdiff -u -r1.6 -r1.7 src/sys/dev/dm/device-mapper.c cvs rdiff -u -r1.13 -r1.14 src/sys/dev/dm/dm.h cvs rdiff -u -r1.12 -r1.13 src/sys/dev/dm/dm_ioctl.c cvs rdiff -u -r1.92 -r1.93 src/sys/dev/isa/fd.c cvs rdiff -u -r1.262 -r1.263 src/sys/dev/raidframe/rf_netbsdkintf.c cvs rdiff -u -r1.292 -r1.293 src/sys/dev/scsipi/cd.c cvs rdiff -u -r1.286 -r1.287 src/sys/dev/scsipi/sd.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sbin/fsck/Makefile diff -u src/sbin/fsck/Makefile:1.17 src/sbin/fsck/Makefile:1.18 --- src/sbin/fsck/Makefile:1.17 Sat Aug 26 18:14:28 2006 +++ src/sbin/fsck/Makefile Fri Jun 5 21:52:31 2009 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.17 2006/08/26 18:14:28 christos Exp $ +# $NetBSD: Makefile,v 1.18 2009/06/05 21:52:31 haad Exp $ PROG= fsck SRCS= fsck.c fsutil.c preen.c @@ -7,4 +7,7 @@ LDADD+=-lutil DPADD+=${LIBUTIL} +LDADD+=-lprop +DPADD+=${LIBPROP} + .include <bsd.prog.mk> Index: src/sbin/fsck/partutil.c diff -u src/sbin/fsck/partutil.c:1.4 src/sbin/fsck/partutil.c:1.5 --- src/sbin/fsck/partutil.c:1.4 Sat Apr 11 06:48:36 2009 +++ src/sbin/fsck/partutil.c Fri Jun 5 21:52:31 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: partutil.c,v 1.4 2009/04/11 06:48:36 lukem Exp $ */ +/* $NetBSD: partutil.c,v 1.5 2009/06/05 21:52:31 haad Exp $ */ /*- * Copyright (c) 2006 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__RCSID("$NetBSD: partutil.c,v 1.4 2009/04/11 06:48:36 lukem Exp $"); +__RCSID("$NetBSD: partutil.c,v 1.5 2009/06/05 21:52:31 haad Exp $"); #include <sys/types.h> #include <sys/disklabel.h> @@ -38,31 +38,36 @@ #include <sys/ioctl.h> #include <sys/stat.h> + #include <disktab.h> +#include <err.h> +#include <errno.h> #include <fcntl.h> #include <util.h> #include <unistd.h> -#include <err.h> +#include <stdlib.h> #include <string.h> -#include <errno.h> + +#include <prop/proplib.h> #include "partutil.h" + +/* + * Set what we need to know about disk geometry. + */ static void -label2geom(struct disk_geom *geo, const struct disklabel *lp) +dict2geom(struct disk_geom *geo, prop_dictionary_t dict) { - geo->dg_secperunit = lp->d_secperunit; - geo->dg_secsize = lp->d_secsize; - geo->dg_nsectors = lp->d_nsectors; - geo->dg_ntracks = lp->d_ntracks; - geo->dg_ncylinders = lp->d_ncylinders; - geo->dg_secpercyl = lp->d_secpercyl; - geo->dg_pcylinders = lp->d_ncylinders; - geo->dg_sparespertrack = lp->d_sparespertrack; - geo->dg_sparespercyl = lp->d_sparespercyl; - geo->dg_acylinders = lp->d_acylinders; + memset(geo, 0, sizeof(struct disk_geom)); + prop_dictionary_get_int64(dict, "sectors-per-unit", &geo->dg_secperunit); + prop_dictionary_get_uint32(dict, "sector-size", &geo->dg_secsize); + prop_dictionary_get_uint32(dict, "sectors-per-track", &geo->dg_nsectors); + prop_dictionary_get_uint32(dict, "tracks-per-cylinder", &geo->dg_ntracks); + prop_dictionary_get_uint32(dict, "cylinders-per-unit", &geo->dg_ncylinders); } + static void part2wedge(struct dkwedge_info *dkw, const struct disklabel *lp, const char *s) { @@ -132,45 +137,32 @@ { struct disklabel lab; struct disklabel *lp = &lab; - char parent[1024]; + prop_dictionary_t disk_dict, geom_dict; if (dt) { lp = getdiskbyname(dt); if (lp == NULL) errx(1, "%s: unknown disk type", dt); - goto part; } - if (ioctl(fd, DIOCGDINFO, lp) == -1) { - if (errno == ENOTTY) { - int pfd; - if (ioctl(fd, DIOCGWEDGEINFO, dkw) == -1) { - warn("ioctl (DIOCGWEDGEINFO)"); - goto bad; - } - pfd = opendisk(dkw->dkw_parent, O_RDONLY, - parent, sizeof(parent), 0); - if (pfd == -1) { - warn("Cannot open `%s'", dkw->dkw_parent); - goto bad; - } - if (ioctl(pfd, DIOCGDINFO, lp) != -1) { - (void)close(pfd); - goto label; - } else { - int serrno = errno; - (void)close(pfd); - errno = serrno; - } - } - warn("ioctl (DIOCGDINFO)"); - goto bad; + /* Get disk description dictionary */ + if (prop_dictionary_recv_ioctl(fd, DIOCGDISKINFO, &disk_dict) != 0) { + warn("Please implement DIOCGDISKINFO for %s\n disk driver\n", s); + return (errno); } -part: - part2wedge(dkw, lp, s); -label: - label2geom(geo, lp); + + geom_dict = prop_dictionary_get(disk_dict, "geometry"); + dict2geom(geo, geom_dict); + + /* Get info about partition/wedge */ + if (ioctl(fd, DIOCGWEDGEINFO, dkw) == -1) { + warn("ioctl (DIOCGWEDGEINFO)"); + printf("Using old disklabel method\n"); + if (ioctl(fd, DIOCGDINFO, lp) == -1) + errx(errno, "Please implement DIOCGWEDGEINFO or DIOCGDINFO for disk device %s\n", s); + + part2wedge(dkw, lp, s); + } + return 0; -bad: - return -1; } Index: src/sbin/fsck_ffs/Makefile diff -u src/sbin/fsck_ffs/Makefile:1.39 src/sbin/fsck_ffs/Makefile:1.40 --- src/sbin/fsck_ffs/Makefile:1.39 Sat Apr 11 07:58:12 2009 +++ src/sbin/fsck_ffs/Makefile Fri Jun 5 21:52:31 2009 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.39 2009/04/11 07:58:12 lukem Exp $ +# $NetBSD: Makefile,v 1.40 2009/06/05 21:52:31 haad Exp $ # @(#)Makefile 8.2 (Berkeley) 4/27/95 WARNS?= 3 # XXX: sign-compare issues @@ -29,6 +29,9 @@ LDADD+=-lutil DPADD+=${LIBUTIL} +LDADD+=-lprop +DPADD+=${LIBPROP} + .if (defined(HAVE_GCC) && ${HAVE_GCC} == 4) || defined(HAVE_PCC) COPTS.ffs_appleufs.c+= -Wno-pointer-sign .endif Index: src/sbin/newfs/Makefile diff -u src/sbin/newfs/Makefile:1.32 src/sbin/newfs/Makefile:1.33 --- src/sbin/newfs/Makefile:1.32 Fri Aug 29 00:02:23 2008 +++ src/sbin/newfs/Makefile Fri Jun 5 21:52:31 2009 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.32 2008/08/29 00:02:23 gmcgarry Exp $ +# $NetBSD: Makefile,v 1.33 2009/06/05 21:52:31 haad Exp $ # @(#)Makefile 8.2 (Berkeley) 3/27/94 .include <bsd.own.mk> @@ -10,8 +10,15 @@ DISKLABEL=${NETBSDSRCDIR}/sbin/disklabel FSCK=${NETBSDSRCDIR}/sbin/fsck CPPFLAGS+=-DMFS -I${.CURDIR} -I${DISKLABEL} -I${FSCK} + +CFLAGS+= -g -O0 + DPADD+= ${LIBUTIL} LDADD+= -lutil + +LDADD+=-lprop +DPADD+=${LIBPROP} + .PATH: ${DISKLABEL} ${NETBSDSRCDIR}/sys/ufs/ffs ${FSCK} LINKS= ${BINDIR}/newfs ${BINDIR}/mount_mfs Index: src/sbin/newfs_ext2fs/Makefile diff -u src/sbin/newfs_ext2fs/Makefile:1.2 src/sbin/newfs_ext2fs/Makefile:1.3 --- src/sbin/newfs_ext2fs/Makefile:1.2 Sat Apr 11 07:58:13 2009 +++ src/sbin/newfs_ext2fs/Makefile Fri Jun 5 21:52:31 2009 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.2 2009/04/11 07:58:13 lukem Exp $ +# $NetBSD: Makefile,v 1.3 2009/06/05 21:52:31 haad Exp $ # @(#)Makefile 8.2 (Berkeley) 3/27/94 WARNS?= 3 # XXX: sign-compare issues @@ -11,8 +11,13 @@ FSCK=${NETBSDSRCDIR}/sbin/fsck CPPFLAGS+=-I${.CURDIR} -I${FSCK} + DPADD+= ${LIBUTIL} LDADD+= -lutil + +LDADD+=-lprop +DPADD+=${LIBPROP} + .PATH: ${NETBSDSRCDIR}/sys/ufs/ext2fs ${FSCK} .include <bsd.prog.mk> Index: src/sbin/newfs_lfs/Makefile diff -u src/sbin/newfs_lfs/Makefile:1.7 src/sbin/newfs_lfs/Makefile:1.8 --- src/sbin/newfs_lfs/Makefile:1.7 Sat Apr 11 07:58:13 2009 +++ src/sbin/newfs_lfs/Makefile Fri Jun 5 21:52:31 2009 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.7 2009/04/11 07:58:13 lukem Exp $ +# $NetBSD: Makefile,v 1.8 2009/06/05 21:52:31 haad Exp $ # @(#)Makefile 8.1 (Berkeley) 6/18/93 WARNS?= 3 # XXX: sign-compare issues @@ -18,6 +18,10 @@ DPADD= ${LIBUTIL} LDADD= -lutil + +LDADD+=-lprop +DPADD+=${LIBPROP} + CPPFLAGS+=-I${FSCK_LFS} -I${FSCK} "-Dmutex_enter(x)=" "-Dmutex_exit(x)=" # -DNDEBUG # -DVERBOSE_BLOCKMAP CPPFLAGS+="-DKASSERT(x)=" Index: src/sbin/newfs_msdos/Makefile diff -u src/sbin/newfs_msdos/Makefile:1.4 src/sbin/newfs_msdos/Makefile:1.5 --- src/sbin/newfs_msdos/Makefile:1.4 Mon Aug 11 10:56:54 2008 +++ src/sbin/newfs_msdos/Makefile Fri Jun 5 21:52:31 2009 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.4 2008/08/11 10:56:54 christos Exp $ +# $NetBSD: Makefile,v 1.5 2009/06/05 21:52:31 haad Exp $ # From: $FreeBSD: src/sbin/newfs_msdos/Makefile,v 1.5 2001/03/26 14:33:18 ru Exp $ .include <bsd.own.mk> @@ -10,6 +10,9 @@ LDADD+= -lutil DPADD+= ${LIBUTIL} +LDADD+=-lprop +DPADD+=${LIBPROP} + FSCK=${NETBSDSRCDIR}/sbin/fsck CPPFLAGS+=-I${.CURDIR} -I${FSCK} .PATH: ${FSCK} Index: src/sbin/resize_lfs/Makefile diff -u src/sbin/resize_lfs/Makefile:1.4 src/sbin/resize_lfs/Makefile:1.5 --- src/sbin/resize_lfs/Makefile:1.4 Sat Apr 11 07:58:13 2009 +++ src/sbin/resize_lfs/Makefile Fri Jun 5 21:52:31 2009 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.4 2009/04/11 07:58:13 lukem Exp $ +# $NetBSD: Makefile,v 1.5 2009/06/05 21:52:31 haad Exp $ WARNS?= 3 # XXX: sign-compare issues @@ -10,8 +10,13 @@ FSCK=${NETBSDSRCDIR}/sbin/fsck CPPFLAGS+=-I${FSCK} + DPADD+= ${LIBUTIL} LDADD+= -lutil + +LDADD+=-lprop +DPADD+=${LIBPROP} + .PATH: ${FSCK} .include <bsd.prog.mk> Index: src/sys/dev/dm/device-mapper.c diff -u src/sys/dev/dm/device-mapper.c:1.6 src/sys/dev/dm/device-mapper.c:1.7 --- src/sys/dev/dm/device-mapper.c:1.6 Mon Apr 6 22:58:10 2009 +++ src/sys/dev/dm/device-mapper.c Fri Jun 5 21:52:31 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: device-mapper.c,v 1.6 2009/04/06 22:58:10 haad Exp $ */ +/* $NetBSD: device-mapper.c,v 1.7 2009/06/05 21:52:31 haad Exp $ */ /* * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -329,37 +329,26 @@ dm_dev_unbusy(dmv); break; } - - case DIOCGDINFO: - { - if ((dmv = dm_dev_lookup(NULL, NULL, minor(dev))) == NULL) - return ENOENT; - - aprint_debug("DIOCGDINFO %d\n", dmv->diskp->dk_label->d_secsize); - - *(struct disklabel *)data = *(dmv->diskp->dk_label); - dm_dev_unbusy(dmv); - break; - } - - case DIOCGPART: + case DIOCGDISKINFO: { + struct plistref *pref = (struct plistref *) data; + if ((dmv = dm_dev_lookup(NULL, NULL, minor(dev))) == NULL) return ENOENT; - - ((struct partinfo *)data)->disklab = dmv->diskp->dk_label; - ((struct partinfo *)data)->part = &dmv->diskp->dk_label->d_partitions[0]; + + if (dmv->diskp->dk_info == NULL) { + dm_dev_unbusy(dmv); + return ENOTSUP; + } else + prop_dictionary_copyout_ioctl(pref, cmd, + dmv->diskp->dk_info); dm_dev_unbusy(dmv); + break; } - case DIOCWDINFO: - case DIOCSDINFO: - case DIOCKLABEL: - case DIOCWLABEL: - case DIOCGDEFLABEL: - + default: aprint_debug("unknown disk_ioctl called\n"); return 1; @@ -504,55 +493,38 @@ bp->b_bcount = MIN(bp->b_bcount, MAXPHYS); } - /* - * Load the label information on the named device - * Actually fabricate a disklabel. - * - * EVENTUALLY take information about different - * data tracks from the TOC and put it in the disklabel - * - * Copied from vnd code. - */ void -dmgetdisklabel(struct disklabel *lp, dm_table_head_t *head) +dmgetproperties(struct disk *disk, dm_table_head_t *head) { - struct partition *pp; + prop_dictionary_t disk_info, odisk_info, geom; int dmp_size; - + dmp_size = dm_table_size(head); + + disk_info = prop_dictionary_create(); - /* - * Size must be at least 2048 DEV_BSIZE blocks - * (1M) in order to use this geometry. - */ - - lp->d_secperunit = dmp_size; - lp->d_secsize = DEV_BSIZE; - lp->d_nsectors = 32; - lp->d_ntracks = 64; - lp->d_ncylinders = dmp_size / (lp->d_nsectors * lp->d_ntracks); - lp->d_secpercyl = lp->d_ntracks * lp->d_nsectors; - - strncpy(lp->d_typename, "lvm", sizeof(lp->d_typename)); - lp->d_type = DTYPE_DM; - strncpy(lp->d_packname, "fictitious", sizeof(lp->d_packname)); - lp->d_rpm = 3600; - lp->d_interleave = 1; - lp->d_flags = 0; + prop_dictionary_set_cstring_nocopy(disk_info, "type", "ESDI"); - pp = &lp->d_partitions[0]; - /* - * This is logical offset and therefore it can be 0 - * I will consider table offsets later in dmstrategy. - */ - pp->p_offset = 0; - pp->p_size = dmp_size * DEV_BSIZE; - pp->p_fstype = FS_BSDFFS; /* default value */ - lp->d_npartitions = 1; - - lp->d_magic = DISKMAGIC; - lp->d_magic2 = DISKMAGIC; - lp->d_checksum = dkcksum(lp); + geom = prop_dictionary_create(); + + prop_dictionary_set_uint64(geom, "sectors-per-unit", dmp_size); + + prop_dictionary_set_uint32(geom, "sector-size", + DEV_BSIZE /* XXX 512? */); + + prop_dictionary_set_uint32(geom, "sectors-per-track", 32); + + prop_dictionary_set_uint32(geom, "tracks-per-cylinder", 64); + + prop_dictionary_set_uint32(geom, "cylinders-per-unit", dmp_size / 2048); + + prop_dictionary_set(disk_info, "geometry", geom); + prop_object_release(geom); + + odisk_info = disk->dk_info; - return; -} + disk->dk_info = disk_info; + + if (odisk_info != NULL) + prop_object_release(odisk_info); +} Index: src/sys/dev/dm/dm.h diff -u src/sys/dev/dm/dm.h:1.13 src/sys/dev/dm/dm.h:1.14 --- src/sys/dev/dm/dm.h:1.13 Fri Jun 5 19:56:40 2009 +++ src/sys/dev/dm/dm.h Fri Jun 5 21:52:31 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: dm.h,v 1.13 2009/06/05 19:56:40 haad Exp $ */ +/* $NetBSD: dm.h,v 1.14 2009/06/05 21:52:31 haad Exp $ */ /* * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -244,7 +244,7 @@ }; /* device-mapper */ -void dmgetdisklabel(struct disklabel *, dm_table_head_t *); +void dmgetproperties(struct disk *, dm_table_head_t *); /* dm_ioctl.c */ int dm_dev_create_ioctl(prop_dictionary_t); Index: src/sys/dev/dm/dm_ioctl.c diff -u src/sys/dev/dm/dm_ioctl.c:1.12 src/sys/dev/dm/dm_ioctl.c:1.13 --- src/sys/dev/dm/dm_ioctl.c:1.12 Fri Jun 5 19:56:40 2009 +++ src/sys/dev/dm/dm_ioctl.c Fri Jun 5 21:52:31 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: dm_ioctl.c,v 1.12 2009/06/05 19:56:40 haad Exp $ */ +/* $NetBSD: dm_ioctl.c,v 1.13 2009/06/05 21:52:31 haad Exp $ */ /* * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -247,6 +247,8 @@ disk_init(dmv->diskp, dmv->name, &dmdkdriver); disk_attach(dmv->diskp); + + dmv->diskp->dk_info = NULL; if ((r = dm_dev_insert(dmv)) != 0) dm_dev_free(dmv); @@ -539,7 +541,7 @@ DM_ADD_FLAG(flags, DM_EXISTS_FLAG); - dmgetdisklabel(dmv->diskp->dk_label, &dmv->table_head); + dmgetproperties(dmv->diskp, &dmv->table_head); prop_dictionary_set_uint32(dm_dict, DM_IOCTL_OPEN, dmv->table_head.io_cnt); prop_dictionary_set_uint32(dm_dict, DM_IOCTL_FLAGS, dmv->flags); Index: src/sys/dev/isa/fd.c diff -u src/sys/dev/isa/fd.c:1.92 src/sys/dev/isa/fd.c:1.93 --- src/sys/dev/isa/fd.c:1.92 Tue May 12 08:44:19 2009 +++ src/sys/dev/isa/fd.c Fri Jun 5 21:52:31 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: fd.c,v 1.92 2009/05/12 08:44:19 cegger Exp $ */ +/* $NetBSD: fd.c,v 1.93 2009/06/05 21:52:31 haad 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.92 2009/05/12 08:44:19 cegger Exp $"); +__KERNEL_RCSID(0, "$NetBSD: fd.c,v 1.93 2009/06/05 21:52:31 haad Exp $"); #include "rnd.h" #include "opt_ddb.h" @@ -1400,6 +1400,10 @@ struct disklabel newlabel; #endif + error = disk_ioctl(&fd->sc_dk, cmd, addr, flag, l); + if (error != EPASSTHROUGH) + return (error); + switch (cmd) { case DIOCGDINFO: #ifdef __HAVE_OLD_DISKLABEL Index: src/sys/dev/raidframe/rf_netbsdkintf.c diff -u src/sys/dev/raidframe/rf_netbsdkintf.c:1.262 src/sys/dev/raidframe/rf_netbsdkintf.c:1.263 --- src/sys/dev/raidframe/rf_netbsdkintf.c:1.262 Tue May 12 13:19:50 2009 +++ src/sys/dev/raidframe/rf_netbsdkintf.c Fri Jun 5 21:52:32 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: rf_netbsdkintf.c,v 1.262 2009/05/12 13:19:50 cegger Exp $ */ +/* $NetBSD: rf_netbsdkintf.c,v 1.263 2009/06/05 21:52:32 haad Exp $ */ /*- * Copyright (c) 1996, 1997, 1998, 2008 The NetBSD Foundation, Inc. * All rights reserved. @@ -139,7 +139,7 @@ ***********************************************************/ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: rf_netbsdkintf.c,v 1.262 2009/05/12 13:19:50 cegger Exp $"); +__KERNEL_RCSID(0, "$NetBSD: rf_netbsdkintf.c,v 1.263 2009/06/05 21:52:32 haad Exp $"); #ifdef _KERNEL_OPT #include "opt_compat_netbsd.h" @@ -1731,6 +1731,10 @@ /* * Add support for "regular" device ioctls here. */ + + error = disk_ioctl(&rs->sc_dkdev, cmd, addr, flag, l); + if (error != EPASSTHROUGH) + return (error); switch (cmd) { case DIOCGDINFO: Index: src/sys/dev/scsipi/cd.c diff -u src/sys/dev/scsipi/cd.c:1.292 src/sys/dev/scsipi/cd.c:1.293 --- src/sys/dev/scsipi/cd.c:1.292 Tue Apr 7 18:35:17 2009 +++ src/sys/dev/scsipi/cd.c Fri Jun 5 21:52:32 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: cd.c,v 1.292 2009/04/07 18:35:17 dyoung Exp $ */ +/* $NetBSD: cd.c,v 1.293 2009/06/05 21:52:32 haad 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.292 2009/04/07 18:35:17 dyoung Exp $"); +__KERNEL_RCSID(0, "$NetBSD: cd.c,v 1.293 2009/06/05 21:52:32 haad Exp $"); #include "rnd.h" @@ -1325,6 +1325,10 @@ } } + error = disk_ioctl(&cd->sc_dk, cmd, addr, flag, l); + if (error != EPASSTHROUGH) + return (error); + switch (cmd) { case DIOCGDINFO: *(struct disklabel *)addr = *(cd->sc_dk.dk_label); Index: src/sys/dev/scsipi/sd.c diff -u src/sys/dev/scsipi/sd.c:1.286 src/sys/dev/scsipi/sd.c:1.287 --- src/sys/dev/scsipi/sd.c:1.286 Wed May 20 03:26:21 2009 +++ src/sys/dev/scsipi/sd.c Fri Jun 5 21:52:32 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: sd.c,v 1.286 2009/05/20 03:26:21 dyoung Exp $ */ +/* $NetBSD: sd.c,v 1.287 2009/06/05 21:52:32 haad 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.286 2009/05/20 03:26:21 dyoung Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sd.c,v 1.287 2009/06/05 21:52:32 haad Exp $"); #include "opt_scsi.h" #include "rnd.h" @@ -1030,6 +1030,10 @@ } } + error = disk_ioctl(&sd->sc_dk, cmd, addr, flag, l); + if (error != EPASSTHROUGH) + return (error); + switch (cmd) { case DIOCGDINFO: *(struct disklabel *)addr = *(sd->sc_dk.dk_label);