Module Name: src Committed By: christos Date: Wed Dec 31 19:58:59 UTC 2014
Modified Files: src/sys/kern: subr_disk.c Log Message: Mention which ioctls need to move to dk_ioctl, and don't allow wedges on wedges. To generate a diff of this commit: cvs rdiff -u -r1.108 -r1.109 src/sys/kern/subr_disk.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/kern/subr_disk.c diff -u src/sys/kern/subr_disk.c:1.108 src/sys/kern/subr_disk.c:1.109 --- src/sys/kern/subr_disk.c:1.108 Wed Dec 31 14:52:06 2014 +++ src/sys/kern/subr_disk.c Wed Dec 31 14:58:59 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: subr_disk.c,v 1.108 2014/12/31 19:52:06 christos Exp $ */ +/* $NetBSD: subr_disk.c,v 1.109 2014/12/31 19:58:59 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.108 2014/12/31 19:52:06 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: subr_disk.c,v 1.109 2014/12/31 19:58:59 christos Exp $"); #include <sys/param.h> #include <sys/kernel.h> @@ -498,16 +498,34 @@ disk_ioctl(struct disk *dk, dev_t dev, u #endif switch (cmd) { + case DIOCGDISKINFO: + if (dk->dk_info == NULL) + return ENOTSUP; + return prop_dictionary_copyout_ioctl(data, cmd, dk->dk_info); + + case DIOCGSECTORSIZE: + *(u_int *)data = dk->dk_geom.dg_secsize; + return 0; + + case DIOCGMEDIASIZE: + *(off_t *)data = (off_t)dk->dk_geom.dg_secsize * + dk->dk_geom.dg_secperunit; + return 0; + default: + break; + } + + if (dev == 0) + return EPASSTHROUGH; + + /* The following should be moved to dk_ioctl */ + 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; @@ -516,8 +534,6 @@ disk_ioctl(struct disk *dk, dev_t dev, u #endif case DIOCGPART: - if (dev == 0) - return EPASSTHROUGH; pt = data; pt->disklab = dk->dk_label; pt->part = &dk->dk_label->d_partitions[DISKPART(dev)]; @@ -549,20 +565,6 @@ disk_ioctl(struct disk *dk, dev_t dev, u dkwedge_discover(dk); return 0; - case DIOCGDISKINFO: - if (dk->dk_info == NULL) - return ENOTSUP; - return prop_dictionary_copyout_ioctl(data, cmd, dk->dk_info); - - case DIOCGSECTORSIZE: - *(u_int *)data = dk->dk_geom.dg_secsize; - return 0; - - case DIOCGMEDIASIZE: - *(off_t *)data = (off_t)dk->dk_geom.dg_secsize * - dk->dk_geom.dg_secperunit; - return 0; - default: return EPASSTHROUGH; }