Module Name:    src
Committed By:   tls
Date:           Sun Dec  2 05:46:40 UTC 2012

Modified Files:
        src/sys/arch/hp300/dev [tls-maxphys]: rd.c
        src/sys/arch/vax/mba [tls-maxphys]: hp.c
        src/sys/arch/vax/vsa [tls-maxphys]: hdc9224.c
        src/sys/dev [tls-maxphys]: ccd.c ccdvar.h fss.c
        src/sys/dev/dkwedge [tls-maxphys]: dk.c
        src/sys/dev/gpib [tls-maxphys]: rd.c
        src/sys/kern [tls-maxphys]: subr_disk.c

Log Message:
Don't pass NULL struct dkdriver to disk_init.  That's seriously bogus.


To generate a diff of this commit:
cvs rdiff -u -r1.92.6.1 -r1.92.6.2 src/sys/arch/hp300/dev/rd.c
cvs rdiff -u -r1.48 -r1.48.18.1 src/sys/arch/vax/mba/hp.c
cvs rdiff -u -r1.51 -r1.51.18.1 src/sys/arch/vax/vsa/hdc9224.c
cvs rdiff -u -r1.143 -r1.143.10.1 src/sys/dev/ccd.c
cvs rdiff -u -r1.32 -r1.32.14.1 src/sys/dev/ccdvar.h
cvs rdiff -u -r1.83 -r1.83.2.1 src/sys/dev/fss.c
cvs rdiff -u -r1.64.2.1 -r1.64.2.2 src/sys/dev/dkwedge/dk.c
cvs rdiff -u -r1.30.6.1 -r1.30.6.2 src/sys/dev/gpib/rd.c
cvs rdiff -u -r1.100.18.1 -r1.100.18.2 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/arch/hp300/dev/rd.c
diff -u src/sys/arch/hp300/dev/rd.c:1.92.6.1 src/sys/arch/hp300/dev/rd.c:1.92.6.2
--- src/sys/arch/hp300/dev/rd.c:1.92.6.1	Tue Nov 20 03:01:21 2012
+++ src/sys/arch/hp300/dev/rd.c	Sun Dec  2 05:46:39 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: rd.c,v 1.92.6.1 2012/11/20 03:01:21 tls Exp $	*/
+/*	$NetBSD: rd.c,v 1.92.6.2 2012/12/02 05:46:39 tls 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.92.6.1 2012/11/20 03:01:21 tls Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rd.c,v 1.92.6.2 2012/12/02 05:46:39 tls Exp $");
 
 #include "opt_useleds.h"
 
@@ -290,6 +290,19 @@ const struct cdevsw rd_cdevsw = {
 	nostop, notty, nopoll, nommap, nokqfilter, D_DISK
 };
 
+static void
+rdminphys(struct buf *bp)
+{
+    struct rd_softc *sc = device_lookup_private(&rd_cd, rdunit(bp->b_dev));
+
+    long xmax;
+    xmax = sc->sc_dev->dv_maxphys;
+    if (bp->b_bcount > xmax)
+	bp->b_bcount = xmax;
+}
+
+const struct dkdriver rd_dkdriver = { rdstrategy, rdminphys };
+
 static int
 rdmatch(device_t parent, cfdata_t cf, void *aux)
 {
@@ -334,7 +347,7 @@ rdattach(device_t parent, device_t self,
 	 * Initialize and attach the disk structure.
 	 */
 	memset(&sc->sc_dkdev, 0, sizeof(sc->sc_dkdev));
-	disk_init(&sc->sc_dkdev, device_xname(sc->sc_dev), NULL);
+	disk_init(&sc->sc_dkdev, device_xname(sc->sc_dev), &rd_dkdriver);
 	disk_attach(&sc->sc_dkdev);
 
 	sc->sc_slave = ha->ha_slave;

Index: src/sys/arch/vax/mba/hp.c
diff -u src/sys/arch/vax/mba/hp.c:1.48 src/sys/arch/vax/mba/hp.c:1.48.18.1
--- src/sys/arch/vax/mba/hp.c:1.48	Tue Dec 14 23:38:30 2010
+++ src/sys/arch/vax/mba/hp.c	Sun Dec  2 05:46:39 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: hp.c,v 1.48 2010/12/14 23:38:30 matt Exp $ */
+/*	$NetBSD: hp.c,v 1.48.18.1 2012/12/02 05:46:39 tls 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.48 2010/12/14 23:38:30 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: hp.c,v 1.48.18.1 2012/12/02 05:46:39 tls Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -118,6 +118,8 @@ const struct cdevsw hp_cdevsw = {
 	.d_flag = D_DISK
 };
 
+const struct dkdriver hp_dkdriver = { hpstrategy, minphys };
+
 #define HP_WCSR(reg, val) \
 	bus_space_write_4(sc->sc_iot, sc->sc_ioh, (reg), (val))
 #define HP_RCSR(reg) \
@@ -174,7 +176,7 @@ hpattach(device_t parent, device_t self,
 	/*
 	 * Init and attach the disk structure.
 	 */
-	disk_init(&sc->sc_disk, device_xname(sc->sc_dev), NULL);
+	disk_init(&sc->sc_disk, device_xname(sc->sc_dev), &hp_dkdriver);
 	disk_attach(&sc->sc_disk);
 
 	/*

Index: src/sys/arch/vax/vsa/hdc9224.c
diff -u src/sys/arch/vax/vsa/hdc9224.c:1.51 src/sys/arch/vax/vsa/hdc9224.c:1.51.18.1
--- src/sys/arch/vax/vsa/hdc9224.c:1.51	Tue Dec 14 23:31:16 2010
+++ src/sys/arch/vax/vsa/hdc9224.c	Sun Dec  2 05:46:39 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: hdc9224.c,v 1.51 2010/12/14 23:31:16 matt Exp $ */
+/*	$NetBSD: hdc9224.c,v 1.51.18.1 2012/12/02 05:46:39 tls 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.51 2010/12/14 23:31:16 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: hdc9224.c,v 1.51.18.1 2012/12/02 05:46:39 tls Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -228,6 +228,14 @@ static volatile int u;
 #define	HDC_WCMD(x)	*(volatile char *)(sc->sc_regs + 4) = (x)
 #define	HDC_RSTAT	*(volatile char *)(sc->sc_regs + 4)
 
+static void
+rdminphys(struct buf *bp)
+{
+	if (bp->b_bcount > rd_dmasize)
+		bp->b_bcount = rd_dmasize;
+}
+
+const struct dkdriver rd_dkdriver = { rdstrategy, rdminphys };
 /*
  * new-config's hdcmatch() is similiar to old-config's hdcprobe(), 
  * thus we probe for the existence of the controller and reset it.
@@ -301,7 +309,7 @@ hdcattach(device_t parent, device_t self
 	sc->sc_dmabase = (void *)va->va_dmaaddr;
 	sc->sc_dmasize = va->va_dmasize;
 	sc->sc_intbit = va->va_maskno;
-	rd_dmasize = min(MAXPHYS, sc->sc_dmasize); /* Used in rd_minphys */
+	rd_dmasize = min(MAXPHYS, sc->sc_dmasize); /* Used in rdminphys */
 
 	sc->sc_vd.vd_go = hdc_qstart;
 	sc->sc_vd.vd_arg = sc;
@@ -365,7 +373,7 @@ rdattach(device_t parent, device_t self,
 	/*
 	 * Initialize and attach the disk structure.
 	 */
-	disk_init(&rd->sc_disk, device_xname(rd->sc_dev), NULL);
+	disk_init(&rd->sc_disk, device_xname(rd->sc_dev), &rd_dkdriver);
 	disk_attach(&rd->sc_disk);
 
 	/*

Index: src/sys/dev/ccd.c
diff -u src/sys/dev/ccd.c:1.143 src/sys/dev/ccd.c:1.143.10.1
--- src/sys/dev/ccd.c:1.143	Sun Nov 13 23:02:46 2011
+++ src/sys/dev/ccd.c	Sun Dec  2 05:46:39 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: ccd.c,v 1.143 2011/11/13 23:02:46 christos Exp $	*/
+/*	$NetBSD: ccd.c,v 1.143.10.1 2012/12/02 05:46:39 tls 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.143 2011/11/13 23:02:46 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ccd.c,v 1.143.10.1 2012/12/02 05:46:39 tls Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -210,6 +210,23 @@ struct ccd_softc 	*ccd_softc;
 const int		ccd_softc_elemsize = sizeof(struct ccd_softc);
 int			numccd = 0;
 
+static void
+ccdminphys(struct buf *bp)
+{
+	struct ccd_softc *cs;
+	long xmax;
+	int unit = ccdunit(bp->b_dev);
+
+	cs = &ccd_softc[unit];
+
+	xmax = cs->sc_maxphys;
+
+	if (bp->b_bcount > xmax)
+	    bp->b_bcount = xmax;
+}
+
+const struct dkdriver ccd_dkdriver = { ccdstrategy, ccdminphys };
+
 /*
  * Called by main() during pseudo-device attachment.  All we need
  * to do is allocate enough space for devices to be configured later.
@@ -246,7 +263,7 @@ ccdattach(int num)
 		cs->sc_iolock = mutex_obj_alloc(MUTEX_DEFAULT, IPL_NONE);
 		cv_init(&cs->sc_stop, "ccdstop");
 		cv_init(&cs->sc_push, "ccdthr");
-		disk_init(&cs->sc_dkdev, cs->sc_xname, NULL); /* XXX */
+		disk_init(&cs->sc_dkdev, cs->sc_xname, &ccd_dkdriver);
 	}
 }
 
@@ -274,6 +291,7 @@ ccdinit(struct ccd_softc *cs, char **cpa
 	tmppath = kmem_alloc(MAXPATHLEN, KM_SLEEP);
 
 	cs->sc_size = 0;
+	cs->sc_maxphys = MACHINE_MAXPHYS;
 
 	/*
 	 * Verify that each component piece exists and record
@@ -284,6 +302,7 @@ ccdinit(struct ccd_softc *cs, char **cpa
 	for (ix = 0, path_alloced = 0; ix < cs->sc_nccdisks; ix++) {
 		ci = &cs->sc_cinfo[ix];
 		ci->ci_vp = vpp[ix];
+		struct disk *diskp;
 
 		/*
 		 * Copy in the pathname of the component.
@@ -321,6 +340,11 @@ ccdinit(struct ccd_softc *cs, char **cpa
 			goto out;
 		}
 		ci->ci_dev = va.va_rdev;
+		if ((diskp = disk_find_blk(ci->ci_dev)) == NULL) {
+			panic("no disk for device %d %d", major(ci->ci_dev),
+			      DISKUNIT(ci->ci_dev));
+		}
+		cs->sc_maxphys = MIN(cs->sc_maxphys, disk_maxphys(diskp));
 
 		/*
 		 * Get partition information for the component.

Index: src/sys/dev/ccdvar.h
diff -u src/sys/dev/ccdvar.h:1.32 src/sys/dev/ccdvar.h:1.32.14.1
--- src/sys/dev/ccdvar.h:1.32	Tue Feb  8 20:20:26 2011
+++ src/sys/dev/ccdvar.h	Sun Dec  2 05:46:39 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: ccdvar.h,v 1.32 2011/02/08 20:20:26 rmind Exp $	*/
+/*	$NetBSD: ccdvar.h,v 1.32.14.1 2012/12/02 05:46:39 tls Exp $	*/
 
 /*-
  * Copyright (c) 1996, 1997, 1998, 1999, 2007, 2009 The NetBSD Foundation, Inc.
@@ -176,6 +176,7 @@ struct ccd_softc {
 	struct lwp	 *sc_thread;		/* for deferred I/O */
 	kcondvar_t	 sc_push;		/* for deferred I/O */
 	bool		 sc_zap;		/* for deferred I/O */
+	size_t		 sc_maxphys;		/* Max I/O size */
 #endif
 };
 

Index: src/sys/dev/fss.c
diff -u src/sys/dev/fss.c:1.83 src/sys/dev/fss.c:1.83.2.1
--- src/sys/dev/fss.c:1.83	Sat Jul 28 16:14:17 2012
+++ src/sys/dev/fss.c	Sun Dec  2 05:46:39 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: fss.c,v 1.83 2012/07/28 16:14:17 hannken Exp $	*/
+/*	$NetBSD: fss.c,v 1.83.2.1 2012/12/02 05:46:39 tls Exp $	*/
 
 /*-
  * Copyright (c) 2003 The NetBSD Foundation, Inc.
@@ -36,7 +36,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: fss.c,v 1.83 2012/07/28 16:14:17 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fss.c,v 1.83.2.1 2012/12/02 05:46:39 tls Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -117,6 +117,19 @@ CFATTACH_DECL_NEW(fss, sizeof(struct fss
     fss_match, fss_attach, fss_detach, NULL);
 extern struct cfdriver fss_cd;
 
+static void
+fss_minphys(struct buf *bp)
+{
+	struct fss_softc *fc = device_lookup_private(&fss_cd, minor(bp->b_dev));
+
+	long xmax;
+	xmax = fc->sc_mount->mnt_maxphys;
+	if (bp->b_bcount > xmax)
+	    bp->b_bcount = xmax;
+}
+
+const struct dkdriver fss_dkdriver = { fss_strategy, fss_minphys };
+
 void
 fssattach(int num)
 {
@@ -146,7 +159,7 @@ fss_attach(device_t parent, device_t sel
 	bufq_alloc(&sc->sc_bufq, "fcfs", 0);
 	sc->sc_dkdev = malloc(sizeof(*sc->sc_dkdev), M_DEVBUF, M_WAITOK);
 	sc->sc_dkdev->dk_info = NULL;
-	disk_init(sc->sc_dkdev, device_xname(self), NULL);
+	disk_init(sc->sc_dkdev, device_xname(self), &fss_dkdriver);
 	if (!pmf_device_register(self, NULL, NULL))
 		aprint_error_dev(self, "couldn't establish power handler\n");
 

Index: src/sys/dev/dkwedge/dk.c
diff -u src/sys/dev/dkwedge/dk.c:1.64.2.1 src/sys/dev/dkwedge/dk.c:1.64.2.2
--- src/sys/dev/dkwedge/dk.c:1.64.2.1	Tue Nov 20 03:02:00 2012
+++ src/sys/dev/dkwedge/dk.c	Sun Dec  2 05:46:40 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: dk.c,v 1.64.2.1 2012/11/20 03:02:00 tls Exp $	*/
+/*	$NetBSD: dk.c,v 1.64.2.2 2012/12/02 05:46:40 tls 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.64.2.1 2012/11/20 03:02:00 tls Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dk.c,v 1.64.2.2 2012/12/02 05:46:40 tls Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_dkwedge.h"
@@ -118,6 +118,8 @@ const struct cdevsw dk_cdevsw = {
 	    nostop, notty, nopoll, nommap, nokqfilter, D_DISK
 };
 
+const struct dkdriver dk_dkdriver = { dkstrategy, dkminphys };
+
 static struct dkwedge_softc **dkwedges;
 static u_int ndkwedges;
 static krwlock_t dkwedges_lock;
@@ -432,7 +434,7 @@ dkwedge_add(struct dkwedge_info *dkw)
 	 * of state to RUNNING atomic.
 	 */
 
-	disk_init(&sc->sc_dk, device_xname(sc->sc_dev), NULL);
+	disk_init(&sc->sc_dk, device_xname(sc->sc_dev), &dk_dkdriver);
 	disk_blocksize(&sc->sc_dk, DEV_BSIZE << pdk->dk_blkshift);
 	dkgetproperties(&sc->sc_dk, dkw);
 	disk_attach(&sc->sc_dk);

Index: src/sys/dev/gpib/rd.c
diff -u src/sys/dev/gpib/rd.c:1.30.6.1 src/sys/dev/gpib/rd.c:1.30.6.2
--- src/sys/dev/gpib/rd.c:1.30.6.1	Tue Nov 20 03:02:00 2012
+++ src/sys/dev/gpib/rd.c	Sun Dec  2 05:46:40 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: rd.c,v 1.30.6.1 2012/11/20 03:02:00 tls Exp $ */
+/*	$NetBSD: rd.c,v 1.30.6.2 2012/12/02 05:46:40 tls 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.30.6.1 2012/11/20 03:02:00 tls Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rd.c,v 1.30.6.2 2012/12/02 05:46:40 tls Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -265,6 +265,19 @@ const struct cdevsw rd_cdevsw = {
 
 extern struct cfdriver rd_cd;
 
+static void
+rdminphys(struct buf *bp)
+{
+    struct rd_softc *sc = device_lookup_private(&rd_cd, RDUNIT(bp->b_dev));
+
+    long xmax;
+    xmax = rd->sc_dev->dv_maxphys;
+    if (bp->b_bcount > xmax)
+        bp->b_bcount = xmax;
+}
+
+const struct dkdriver rd_dkdriver = { rdstrategy, rdminphys };
+
 int
 rdlookup(int id, int slave, int punit)
 {
@@ -390,7 +403,7 @@ rdattach(device_t parent, device_t self,
 	 * Initialize and attach the disk structure.
 	 */
 	memset(&sc->sc_dk, 0, sizeof(sc->sc_dk));
-	disk_init(&sc->sc_dk, device_xname(sc->sc_dev), NULL);
+	disk_init(&sc->sc_dk, device_xname(sc->sc_dev), rd_dkdriver);
 	disk_attach(&sc->sc_dk);
 
 	callout_init(&sc->sc_restart_ch, 0);

Index: src/sys/kern/subr_disk.c
diff -u src/sys/kern/subr_disk.c:1.100.18.1 src/sys/kern/subr_disk.c:1.100.18.2
--- src/sys/kern/subr_disk.c:1.100.18.1	Wed Sep 12 06:15:34 2012
+++ src/sys/kern/subr_disk.c	Sun Dec  2 05:46:40 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: subr_disk.c,v 1.100.18.1 2012/09/12 06:15:34 tls Exp $	*/
+/*	$NetBSD: subr_disk.c,v 1.100.18.2 2012/12/02 05:46:40 tls 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.100.18.1 2012/09/12 06:15:34 tls Exp $");
+__KERNEL_RCSID(0, "$NetBSD: subr_disk.c,v 1.100.18.2 2012/12/02 05:46:40 tls Exp $");
 
 #include <sys/param.h>
 #include <sys/kernel.h>
@@ -218,6 +218,9 @@ int disk_maxphys(const struct disk *cons
 void
 disk_init(struct disk *diskp, const char *name, const struct dkdriver *driver)
 {
+	KASSERT(diskp != NULL);
+	KASSERT(name != NULL);
+	KASSERT(driver != NULL);
 
 	/*
 	 * Initialize the wedge-related locks and other fields.

Reply via email to