Module Name:    src
Committed By:   christos
Date:           Wed May 29 00:47:49 UTC 2013

Modified Files:
        src/sys/arch/emips/ebus: ace_ebus.c flash_ebus.c
        src/sys/arch/sparc64/dev: fdc.c
        src/sys/arch/xen/xen: xbd_xenbus.c
        src/sys/dev: cgd.c dksubr.c dkvar.h ld.c vnd.c
        src/sys/dev/ata: wd.c
        src/sys/dev/dkwedge: dk.c
        src/sys/dev/dm: device-mapper.c
        src/sys/dev/isa: fd.c
        src/sys/dev/raidframe: rf_netbsdkintf.c
        src/sys/dev/scsipi: cd.c sd.c
        src/sys/kern: subr_disk.c
        src/sys/sys: param.h

Log Message:
phase 1 of disk geometry cleanup:
        - centralize the geometry -> plist code so that we don't have
          n useless copies of it.


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 src/sys/arch/emips/ebus/ace_ebus.c \
    src/sys/arch/emips/ebus/flash_ebus.c
cvs rdiff -u -r1.36 -r1.37 src/sys/arch/sparc64/dev/fdc.c
cvs rdiff -u -r1.57 -r1.58 src/sys/arch/xen/xen/xbd_xenbus.c
cvs rdiff -u -r1.78 -r1.79 src/sys/dev/cgd.c
cvs rdiff -u -r1.45 -r1.46 src/sys/dev/dksubr.c
cvs rdiff -u -r1.16 -r1.17 src/sys/dev/dkvar.h
cvs rdiff -u -r1.70 -r1.71 src/sys/dev/ld.c
cvs rdiff -u -r1.221 -r1.222 src/sys/dev/vnd.c
cvs rdiff -u -r1.402 -r1.403 src/sys/dev/ata/wd.c
cvs rdiff -u -r1.65 -r1.66 src/sys/dev/dkwedge/dk.c
cvs rdiff -u -r1.29 -r1.30 src/sys/dev/dm/device-mapper.c
cvs rdiff -u -r1.100 -r1.101 src/sys/dev/isa/fd.c
cvs rdiff -u -r1.303 -r1.304 src/sys/dev/raidframe/rf_netbsdkintf.c
cvs rdiff -u -r1.310 -r1.311 src/sys/dev/scsipi/cd.c
cvs rdiff -u -r1.299 -r1.300 src/sys/dev/scsipi/sd.c
cvs rdiff -u -r1.101 -r1.102 src/sys/kern/subr_disk.c
cvs rdiff -u -r1.429 -r1.430 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/emips/ebus/ace_ebus.c
diff -u src/sys/arch/emips/ebus/ace_ebus.c:1.5 src/sys/arch/emips/ebus/ace_ebus.c:1.6
--- src/sys/arch/emips/ebus/ace_ebus.c:1.5	Sat Oct 27 13:17:45 2012
+++ src/sys/arch/emips/ebus/ace_ebus.c	Tue May 28 20:47:48 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: ace_ebus.c,v 1.5 2012/10/27 17:17:45 chs Exp $	*/
+/*	$NetBSD: ace_ebus.c,v 1.6 2013/05/29 00:47:48 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.5 2012/10/27 17:17:45 chs Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ace_ebus.c,v 1.6 2013/05/29 00:47:48 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -198,7 +198,7 @@ int	 acedetach(device_t, int);
 int	 aceactivate(device_t, enum devact);
 
 void  acedone(struct ace_softc *);
-static void ace_params_to_properties(struct ace_softc *ace);
+static void ace_set_geometry(struct ace_softc *ace);
 
 CFATTACH_DECL_NEW(ace_ebus, sizeof(struct ace_softc),
     ace_ebus_match, ace_ebus_attach, acedetach, aceactivate);
@@ -968,7 +968,7 @@ sysace_identify(struct ace_softc *sc)
 					DBGME(DEBUG_PROBE,
 					    printf("Sysace::sc_capacity x%qx\n",
 					    sc->sc_capacity));
-					ace_params_to_properties(sc);
+					ace_set_geometry(sc);
 				} else {
 					DBGME(DEBUG_ERRORS,
 					    printf("Sysace::Bad card signature?"
@@ -1462,7 +1462,7 @@ sysace_send_config(struct ace_softc *sc,
  * Rest of code lifted with mods from the dev\ata\wd.c driver
  */
 
-/*	$NetBSD: ace_ebus.c,v 1.5 2012/10/27 17:17:45 chs Exp $ */
+/*	$NetBSD: ace_ebus.c,v 1.6 2013/05/29 00:47:48 christos Exp $ */
 
 /*
  * Copyright (c) 1998, 2001 Manuel Bouyer.  All rights reserved.
@@ -2464,48 +2464,16 @@ bad144intern(struct ace_softc *ace)
 #endif
 
 static void
-ace_params_to_properties(struct ace_softc *ace)
+ace_set_geometry(struct ace_softc *ace)
 {
-	prop_dictionary_t disk_info, odisk_info, geom;
-	const char *cp;
+	struct disk_geom *dg = &ace->sc_dk.dk_geom;
 
-	disk_info = prop_dictionary_create();
+	memset(dg, 0, sizeof(*dg));
 
-	cp = ST506;
+	dg->dg_secperunit = ace->sc_capacity;
+	dg->dg_secsize = DEV_BSIZE /* XXX 512? */;
+	dg->dg_nsectors = ace->sc_params.CurrentSectorsPerTrack;
+	dg->dg_ntracks = ace->sc_params.CurrentNumberOfHeads;
 
-	prop_dictionary_set_cstring_nocopy(disk_info, "type", cp);
-
-	geom = prop_dictionary_create();
-
-	prop_dictionary_set_uint64(geom, "sectors-per-unit", ace->sc_capacity);
-
-	prop_dictionary_set_uint32(geom, "sector-size",
-	    DEV_BSIZE /* XXX 512? */);
-
-	prop_dictionary_set_uint16(geom, "sectors-per-track",
-	    ace->sc_params.CurrentSectorsPerTrack);
-
-	prop_dictionary_set_uint16(geom, "tracks-per-cylinder",
-	    ace->sc_params.CurrentNumberOfHeads);
-
-	prop_dictionary_set_uint64(geom, "cylinders-per-unit",
-	    ace->sc_capacity /
-	    (ace->sc_params.CurrentNumberOfHeads *
-	     ace->sc_params.CurrentSectorsPerTrack));
-
-	prop_dictionary_set(disk_info, "geometry", geom);
-	prop_object_release(geom);
-
-	prop_dictionary_set(device_properties(ace->sc_dev),
-	    "disk-info", disk_info);
-
-	/*
-	 * Don't release disk_info here; we keep a reference to it.
-	 * disk_detach() will release it when we go away.
-	 */
-
-	odisk_info = ace->sc_dk.dk_info;
-	ace->sc_dk.dk_info = disk_info;
-	if (odisk_info)
-		prop_object_release(odisk_info);
+	disk_set_info(sc->sc_dev, &sc->sc_dk, ST506);
 }
Index: src/sys/arch/emips/ebus/flash_ebus.c
diff -u src/sys/arch/emips/ebus/flash_ebus.c:1.5 src/sys/arch/emips/ebus/flash_ebus.c:1.6
--- src/sys/arch/emips/ebus/flash_ebus.c:1.5	Sat Oct 27 13:17:45 2012
+++ src/sys/arch/emips/ebus/flash_ebus.c	Tue May 28 20:47:48 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: flash_ebus.c,v 1.5 2012/10/27 17:17:45 chs Exp $	*/
+/*	$NetBSD: flash_ebus.c,v 1.6 2013/05/29 00:47:48 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.5 2012/10/27 17:17:45 chs Exp $");
+__KERNEL_RCSID(0, "$NetBSD: flash_ebus.c,v 1.6 2013/05/29 00:47:48 christos Exp $");
 
 /* Driver for the Intel 28F320/640/128 (J3A150) StrataFlash memory device
  * Extended to include the Intel JS28F256P30T95.
@@ -1302,7 +1302,7 @@ static int eflash_write_at (struct eflas
 /* Rest of code lifted with mods from the dev\ata\wd.c driver
  */
 
-/*	$NetBSD: flash_ebus.c,v 1.5 2012/10/27 17:17:45 chs Exp $ */
+/*	$NetBSD: flash_ebus.c,v 1.6 2013/05/29 00:47:48 christos Exp $ */
 
 /*
  * Copyright (c) 1998, 2001 Manuel Bouyer.  All rights reserved.
@@ -1414,7 +1414,7 @@ int   eflashdetach(device_t, int);
 int   eflashactivate(device_t, enum devact);
 
 void  eflashdone(struct eflash_softc *);
-static void eflash_params_to_properties(struct eflash_softc *sc);
+static void eflash_set_geometry(struct eflash_softc *sc);
 
 struct dkdriver eflashdkdriver = { eflashstrategy, minphys };
 
@@ -1447,7 +1447,7 @@ eflashattach(struct eflash_softc *sc)
 	    device_xname(self), pbuf, 1, 1, sc->sc_capacity,
 	    DEV_BSIZE, (unsigned long long)sc->sc_capacity);
 
-    eflash_params_to_properties(sc);
+    eflash_set_geometry(sc);
 
 	/*
 	 * Attach the disk structure. We fill in dk_info later.
@@ -2293,45 +2293,17 @@ bad144intern(struct eflash_softc *sc)
 #endif
 
 static void
-eflash_params_to_properties(struct eflash_softc *sc)
+eflash_set_geometry(struct eflash_softc *sc)
 {
-	prop_dictionary_t disk_info, odisk_info, geom;
-	const char *cp;
+	struct disk_geom *dg = &sc->sc_dk.dk_geom;
 
-	disk_info = prop_dictionary_create();
+	memset(dg, 0, sizeof(*dg));
 
-    cp = ST506;
+	dg->dg_secperunit = sc->sc_capacity;
+	dg->dg_secsize = DEV_BSIZE /* XXX 512? */;
+	dg->dg_nsectors = sc->sc_capacity;
+	dg->dg_ntracks = 1;
+	dg->dg_ncylinders = sc->sc_capacity;
 
-	prop_dictionary_set_cstring_nocopy(disk_info, "type", cp);
-
-	geom = prop_dictionary_create();
-
-	prop_dictionary_set_uint64(geom, "sectors-per-unit", sc->sc_capacity);
-
-	prop_dictionary_set_uint32(geom, "sector-size",
-				   DEV_BSIZE /* XXX 512? */);
-
-	prop_dictionary_set_uint16(geom, "sectors-per-track",
-				   sc->sc_capacity);
-
-	prop_dictionary_set_uint16(geom, "tracks-per-cylinder", 1);
-
-    prop_dictionary_set_uint64(geom, "cylinders-per-unit", sc->sc_capacity);
-
-	prop_dictionary_set(disk_info, "geometry", geom);
-	prop_object_release(geom);
-
-	prop_dictionary_set(device_properties(sc->sc_dev),
-			    "disk-info", disk_info);
-
-	/*
-	 * Don't release disk_info here; we keep a reference to it.
-	 * disk_detach() will release it when we go away.
-	 */
-
-	odisk_info = sc->sc_dk.dk_info;
-	sc->sc_dk.dk_info = disk_info;
-	if (odisk_info)
-		prop_object_release(odisk_info);
+	disk_set_info(sc->sc_dev, &sc->sc_dk, ST506);
 }
-

Index: src/sys/arch/sparc64/dev/fdc.c
diff -u src/sys/arch/sparc64/dev/fdc.c:1.36 src/sys/arch/sparc64/dev/fdc.c:1.37
--- src/sys/arch/sparc64/dev/fdc.c:1.36	Mon Aug  8 10:49:06 2011
+++ src/sys/arch/sparc64/dev/fdc.c	Tue May 28 20:47:48 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: fdc.c,v 1.36 2011/08/08 14:49:06 jakllsch Exp $	*/
+/*	$NetBSD: fdc.c,v 1.37 2013/05/29 00:47:48 christos Exp $	*/
 
 /*-
  * Copyright (c) 2000 The NetBSD Foundation, Inc.
@@ -101,7 +101,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: fdc.c,v 1.36 2011/08/08 14:49:06 jakllsch Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fdc.c,v 1.37 2013/05/29 00:47:48 christos Exp $");
 
 #include "opt_ddb.h"
 #include "opt_md.h"
@@ -383,7 +383,7 @@ static void establish_chip_type(
 		bus_addr_t,
 		bus_size_t,
 		bus_space_handle_t);
-static void	fd_set_properties(struct fd_softc *);
+static void	fd_set_geometry(struct fd_softc *);
 
 #ifdef MEMORY_DISK_HOOKS
 int	fd_read_md_image(size_t *, void **);
@@ -971,7 +971,7 @@ fdattach(device_t parent, device_t self,
 	 */
 	mountroothook_establish(fd_mountroot_hook, fd->sc_dev);
 
-	fd_set_properties(fd);
+	fd_set_geometry(fd);
 
 	/* Make sure the drive motor gets turned off at shutdown time. */
 	if (!pmf_device_register1(self, fdsuspend, NULL, fdshutdown))
@@ -2564,57 +2564,33 @@ fd_read_md_image(size_t	*sizep, void **a
 #endif /* MEMORY_DISK_HOOKS */
 
 static void
-fd_set_properties(struct fd_softc *fd)
+fd_set_geometry(struct fd_softc *fd)
 {
-	prop_dictionary_t disk_info, odisk_info, geom;
-	struct fd_type *fdt;
-	int secsize;
+	const struct fd_type *fdt;
 
-	fdt = fd->sc_deftype;
-
-	disk_info = prop_dictionary_create();
-
-	geom = prop_dictionary_create();
+	fdt = fd->sc_type;
+	if (fdt == NULL) {
+		fdt = fd->sc_deftype;
+		if (fdt == NULL)
+			return;
+	}
 
-	prop_dictionary_set_uint64(geom, "sectors-per-unit",
-	    fdt->size);
+	struct disk_geom *dg = &fd->sc_dkdev.dk_geom;
 
+	memset(dg, 0, sizeof(*dg));
+	dg->dg_secperunit = fdt->size;
+	dg->dg_nsectors = fdt->sectrac;
 	switch (fdt->secsize) {
 	case 2:
-		secsize = 512;
+		dg->dg_secsize = 512;
 		break;
 	case 3:
-		secsize = 1024;
+		dg->dg_secsize = 1024;
 		break;
 	default:
-		secsize = 0;
+		break;
 	}
-
-	prop_dictionary_set_uint32(geom, "sector-size",
-	    secsize);
-
-	prop_dictionary_set_uint16(geom, "sectors-per-track",
-	    fdt->sectrac);
-
-	prop_dictionary_set_uint16(geom, "tracks-per-cylinder",
-	    fdt->heads);
-
-	prop_dictionary_set_uint64(geom, "cylinders-per-unit",
-	    fdt->cylinders);
-
-	prop_dictionary_set(disk_info, "geometry", geom);
-	prop_object_release(geom);
-
-	prop_dictionary_set(device_properties(fd->sc_dev),
-	    "disk-info", disk_info);
-
-	/*
-	 * Don't release disk_info here; we keep a reference to it.
-	 * disk_detach() will release it when we go away.
-	 */
-
-	odisk_info = fd->sc_dk.dk_info;
-	fd->sc_dk.dk_info = disk_info;
-	if (odisk_info)
-		prop_object_release(odisk_info);
+	dg->dg_ntracks = fdt->heads;
+	dg->dg_ncylinders = fdt->cyls;
+	disk_set_info(fd->sc_dev, &fd->sc_dkdev, NULL);
 }

Index: src/sys/arch/xen/xen/xbd_xenbus.c
diff -u src/sys/arch/xen/xen/xbd_xenbus.c:1.57 src/sys/arch/xen/xen/xbd_xenbus.c:1.58
--- src/sys/arch/xen/xen/xbd_xenbus.c:1.57	Fri May 25 11:03:38 2012
+++ src/sys/arch/xen/xen/xbd_xenbus.c	Tue May 28 20:47:48 2013
@@ -1,4 +1,4 @@
-/*      $NetBSD: xbd_xenbus.c,v 1.57 2012/05/25 15:03:38 elric Exp $      */
+/*      $NetBSD: xbd_xenbus.c,v 1.58 2013/05/29 00:47:48 christos Exp $      */
 
 /*
  * Copyright (c) 2006 Manuel Bouyer.
@@ -50,7 +50,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: xbd_xenbus.c,v 1.57 2012/05/25 15:03:38 elric Exp $");
+__KERNEL_RCSID(0, "$NetBSD: xbd_xenbus.c,v 1.58 2013/05/29 00:47:48 christos Exp $");
 
 #include "opt_xen.h"
 
@@ -513,7 +513,6 @@ static void xbd_backend_changed(void *ar
 {
 	struct xbd_xenbus_softc *sc = device_private((device_t)arg);
 	struct dk_geom *pdg;
-	prop_dictionary_t disk_info, odisk_info, geom;
 
 	char buf[9];
 	int s;
@@ -576,30 +575,16 @@ static void xbd_backend_changed(void *ar
 		/* Discover wedges on this disk. */
 		dkwedge_discover(&sc->sc_dksc.sc_dkdev);
 
-		disk_info = prop_dictionary_create();
-		geom = prop_dictionary_create();
-		prop_dictionary_set_uint64(geom, "sectors-per-unit",
-		    sc->sc_dksc.sc_size);
-		prop_dictionary_set_uint32(geom, "sector-size",
-		    pdg->pdg_secsize);
-		prop_dictionary_set_uint16(geom, "sectors-per-track",
-		    pdg->pdg_nsectors);
-		prop_dictionary_set_uint16(geom, "tracks-per-cylinder",
-		    pdg->pdg_ntracks);
-		prop_dictionary_set_uint64(geom, "cylinders-per-unit",
-		    pdg->pdg_ncylinders);
-		prop_dictionary_set(disk_info, "geometry", geom);
-		prop_object_release(geom);
-		prop_dictionary_set(device_properties(sc->sc_dksc.sc_dev),
-		    "disk-info", disk_info);
-		/*
-		 * Don't release disk_info here; we keep a reference to it.
-		 * disk_detach() will release it when we go away.
-		 */
-		odisk_info = sc->sc_dksc.sc_dkdev.dk_info;
-		sc->sc_dksc.sc_dkdev.dk_info = disk_info;
-		if (odisk_info)
-			prop_object_release(odisk_info);
+		struct disk_geom *dg = &sc->sc_dksc.sc_dkdev.dk_geom;
+		memset(dg, 0, sizeof(*dg));	
+
+		dg->dg_secperunit = sc->sc_dksc.sc_size;
+		dg->dg_secsize = pdg->pdg_secsize;
+		dg->dg_nsectors = pdg->pdg_nsectors;
+		dg->dg_ntracks = pdg->pdg_ntracks;
+		dg->dg_ncylinders = pdg->pdg_ncylinders;
+
+		disk_set_info(sc->sc_dksc.sc_dev, &sc->sc_dksc.sc_dkdev, NULL);
 
 		/* the disk should be working now */
 		config_pending_decr();

Index: src/sys/dev/cgd.c
diff -u src/sys/dev/cgd.c:1.78 src/sys/dev/cgd.c:1.79
--- src/sys/dev/cgd.c:1.78	Tue Dec  4 21:23:20 2012
+++ src/sys/dev/cgd.c	Tue May 28 20:47:48 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: cgd.c,v 1.78 2012/12/05 02:23:20 christos Exp $ */
+/* $NetBSD: cgd.c,v 1.79 2013/05/29 00:47:48 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.78 2012/12/05 02:23:20 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cgd.c,v 1.79 2013/05/29 00:47:48 christos Exp $");
 
 #include <sys/types.h>
 #include <sys/param.h>
@@ -694,7 +694,7 @@ cgd_ioctl_set(struct cgd_softc *cs, void
 
 	cs->sc_dksc.sc_flags |= DKF_INITED;
 
-	dk_set_properties(di, &cs->sc_dksc);
+	dk_set_geometry(di, &cs->sc_dksc);
 
 	/* Attach the disk. */
 	disk_attach(&cs->sc_dksc.sc_dkdev);

Index: src/sys/dev/dksubr.c
diff -u src/sys/dev/dksubr.c:1.45 src/sys/dev/dksubr.c:1.46
--- src/sys/dev/dksubr.c:1.45	Tue May 29 06:20:33 2012
+++ src/sys/dev/dksubr.c	Tue May 28 20:47:48 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: dksubr.c,v 1.45 2012/05/29 10:20:33 elric Exp $ */
+/* $NetBSD: dksubr.c,v 1.46 2013/05/29 00:47:48 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.45 2012/05/29 10:20:33 elric Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dksubr.c,v 1.46 2013/05/29 00:47:48 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -627,43 +627,20 @@ dk_makedisklabel(struct dk_intf *di, str
 }
 
 void
-dk_set_properties(struct dk_intf *di, struct dk_softc *dksc)
+dk_set_geometry(struct dk_intf *di, struct dk_softc *dksc)
 {
-	prop_dictionary_t disk_info, odisk_info, geom;
+	struct disk_geom *dg = &dksc->sc_dkdev.dk_geom;
 
-	disk_info = prop_dictionary_create();
+	memset(dg, 0, sizeof(*dg));
 
-	geom = prop_dictionary_create();
+	dg->dg_secperunit = dksc->sc_size;
+	dg->dg_secsize = dksc->sc_geom.pdg_secsize;
+	dg->dg_nsectors = dksc->sc_geom.pdg_nsectors;
+	dg->dg_ntracks = dksc->sc_geom.pdg_ntracks;
+	dg->dg_ncylinders = dksc->sc_geom.pdg_ncylinders;
 
-	prop_dictionary_set_uint64(geom, "sectors-per-unit", dksc->sc_size);
+	disk_set_info(dksc->sc_dev, &dksc->sc_dkdev, NULL);
 
-	prop_dictionary_set_uint32(geom, "sector-size",
-	    dksc->sc_geom.pdg_secsize);
-
-	prop_dictionary_set_uint16(geom, "sectors-per-track",
-	    dksc->sc_geom.pdg_nsectors);
-
-	prop_dictionary_set_uint16(geom, "tracks-per-cylinder",
-	    dksc->sc_geom.pdg_ntracks);
-
-	prop_dictionary_set_uint64(geom, "cylinders-per-unit",
-	    dksc->sc_geom.pdg_ncylinders);
-
-	prop_dictionary_set(disk_info, "geometry", geom);
-	prop_object_release(geom);
-
-	prop_dictionary_set(device_properties(dksc->sc_dev),
-	    "disk-info", disk_info);
-
-	/*
-	 * Don't release disk_info here; we keep a reference to it.
-	 * disk_detach() will release it when we go away.
-	 */
-
-	odisk_info = dksc->sc_dkdev.dk_info;
-	dksc->sc_dkdev.dk_info = disk_info;
-	if (odisk_info)
-		prop_object_release(odisk_info);
 }
 
 /* This function is taken from ccd.c:1.76  --rcd */

Index: src/sys/dev/dkvar.h
diff -u src/sys/dev/dkvar.h:1.16 src/sys/dev/dkvar.h:1.17
--- src/sys/dev/dkvar.h:1.16	Fri May 25 06:53:46 2012
+++ src/sys/dev/dkvar.h	Tue May 28 20:47:48 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: dkvar.h,v 1.16 2012/05/25 10:53:46 elric Exp $ */
+/* $NetBSD: dkvar.h,v 1.17 2013/05/29 00:47:48 christos Exp $ */
 
 /*-
  * Copyright (c) 2002 The NetBSD Foundation, Inc.
@@ -32,6 +32,7 @@
 struct pathbuf; /* from namei.h */
 
 
+/* XXX: GC */
 struct dk_geom {
 	u_int32_t	pdg_secsize;
 	u_int32_t	pdg_nsectors;
@@ -112,6 +113,7 @@ int	dk_dump(struct dk_intf *, struct dk_
 void	dk_getdisklabel(struct dk_intf *, struct dk_softc *, dev_t);
 void	dk_getdefaultlabel(struct dk_intf *, struct dk_softc *,
 			   struct disklabel *);
-void	dk_set_properties(struct dk_intf *, struct dk_softc *);
+/* XXX: GC use disk_set_info() */
+void	dk_set_geometry(struct dk_intf *, struct dk_softc *);
 
 int	dk_lookup(struct pathbuf *, struct lwp *, struct vnode **);

Index: src/sys/dev/ld.c
diff -u src/sys/dev/ld.c:1.70 src/sys/dev/ld.c:1.71
--- src/sys/dev/ld.c:1.70	Sat Oct 27 13:18:14 2012
+++ src/sys/dev/ld.c	Tue May 28 20:47:48 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: ld.c,v 1.70 2012/10/27 17:18:14 chs Exp $	*/
+/*	$NetBSD: ld.c,v 1.71 2013/05/29 00:47:48 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.70 2012/10/27 17:18:14 chs Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ld.c,v 1.71 2013/05/29 00:47:48 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -66,7 +66,7 @@ static void	ldminphys(struct buf *bp);
 static bool	ld_suspend(device_t, const pmf_qual_t *);
 static bool	ld_shutdown(device_t, int);
 static void	ldstart(struct ld_softc *, struct buf *);
-static void	ld_set_properties(struct ld_softc *);
+static void	ld_set_geometry(struct ld_softc *);
 static void	ld_config_interrupts (device_t);
 static int	ldlastclose(device_t);
 
@@ -143,7 +143,7 @@ ldattach(struct ld_softc *sc)
 	    sc->sc_nsectors, sc->sc_secsize, sc->sc_secperunit);
 	sc->sc_disksize512 = sc->sc_secperunit * sc->sc_secsize / DEV_BSIZE;
 
-	ld_set_properties(sc);
+	ld_set_geometry(sc);
 
 	/* Attach the device into the rnd source list. */
 	rnd_attach_source(&sc->sc_rnd_source, device_xname(sc->sc_dv),
@@ -889,44 +889,19 @@ ldminphys(struct buf *bp)
 }
 
 static void
-ld_set_properties(struct ld_softc *ld)
+ld_set_geometry(struct ld_softc *ld)
 {
-	prop_dictionary_t disk_info, odisk_info, geom;
+	struct disk_geom *dg = &ld->sc_dk.dk_geom;
 
-	disk_info = prop_dictionary_create();
+	memset(dg, 0, sizeof(*dg));
 
-	geom = prop_dictionary_create();
+	dg->dg_secperunit = ld->sc_secperunit;
+	dg->dg_secsize = ld->sc_secsize;
+	dg->dg_nsectors = ld->sc_nsectors;
+	dg->dg_ntracks = ld->sc_nheads;
+	dg->dg_ncylinders = ld->sc_ncylinders;
 
-	prop_dictionary_set_uint64(geom, "sectors-per-unit",
-	    ld->sc_secperunit);
-
-	prop_dictionary_set_uint32(geom, "sector-size",
-	    ld->sc_secsize);
-
-	prop_dictionary_set_uint16(geom, "sectors-per-track",
-	    ld->sc_nsectors);
-
-	prop_dictionary_set_uint16(geom, "tracks-per-cylinder",
-	    ld->sc_nheads);
-
-	prop_dictionary_set_uint64(geom, "cylinders-per-unit",
-	    ld->sc_ncylinders);
-
-	prop_dictionary_set(disk_info, "geometry", geom);
-	prop_object_release(geom);
-
-	prop_dictionary_set(device_properties(ld->sc_dv),
-	    "disk-info", disk_info);
-
-	/*
-	 * Don't release disk_info here; we keep a reference to it.
-	 * disk_detach() will release it when we go away.
-	 */
-
-	odisk_info = ld->sc_dk.dk_info;
-	ld->sc_dk.dk_info = disk_info;
-	if (odisk_info)
-		prop_object_release(odisk_info);
+	disk_set_info(ld->sc_dv, &ld->sc_dk, NULL);
 }
 
 static void

Index: src/sys/dev/vnd.c
diff -u src/sys/dev/vnd.c:1.221 src/sys/dev/vnd.c:1.222
--- src/sys/dev/vnd.c:1.221	Sat Jun  9 02:20:45 2012
+++ src/sys/dev/vnd.c	Tue May 28 20:47:48 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: vnd.c,v 1.221 2012/06/09 06:20:45 mlelstv Exp $	*/
+/*	$NetBSD: vnd.c,v 1.222 2013/05/29 00:47:48 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.221 2012/06/09 06:20:45 mlelstv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vnd.c,v 1.222 2013/05/29 00:47:48 christos Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_vnd.h"
@@ -127,8 +127,6 @@ __KERNEL_RCSID(0, "$NetBSD: vnd.c,v 1.22
 #include <dev/dkvar.h>
 #include <dev/vndvar.h>
 
-#include <prop/proplib.h>
-
 #if defined(VNDDEBUG) && !defined(DEBUG)
 #define DEBUG
 #endif
@@ -187,7 +185,7 @@ static void	handle_with_rdwr(struct vnd_
 		    struct buf *);
 static void	handle_with_strategy(struct vnd_softc *, const struct buf *,
 		    struct buf *);
-static void	vnd_set_properties(struct vnd_softc *);
+static void	vnd_set_geometry(struct vnd_softc *);
 
 static dev_type_open(vndopen);
 static dev_type_close(vndclose);
@@ -1296,7 +1294,7 @@ vndioctl(dev_t dev, u_long cmd, void *da
 			vnd->sc_geom.vng_ncylinders = vnd->sc_size;
 		}
 
-		vnd_set_properties(vnd);
+		vnd_set_geometry(vnd);
 
 		if (vio->vnd_flags & VNDIOF_READONLY) {
 			vnd->sc_flags |= VNF_READONLY;
@@ -1998,45 +1996,20 @@ vnd_free(void *aux, void *ptr)
 #endif /* VND_COMPRESSION */
 
 static void
-vnd_set_properties(struct vnd_softc *vnd)
+vnd_set_geometry(struct vnd_softc *vnd)
 {
-	prop_dictionary_t disk_info, odisk_info, geom;
-
-	disk_info = prop_dictionary_create();
-
-	geom = prop_dictionary_create();
-
-	prop_dictionary_set_uint64(geom, "sectors-per-unit",
-	    vnd->sc_geom.vng_nsectors * vnd->sc_geom.vng_ntracks *
-	    vnd->sc_geom.vng_ncylinders);
-
-	prop_dictionary_set_uint32(geom, "sector-size",
-	    vnd->sc_geom.vng_secsize);
-
-	prop_dictionary_set_uint16(geom, "sectors-per-track",
-	    vnd->sc_geom.vng_nsectors);
+	struct disk_geom *dg = &vnd->sc_dkdev.dk_geom;
 
-	prop_dictionary_set_uint16(geom, "tracks-per-cylinder",
-	    vnd->sc_geom.vng_ntracks);
+	memset(dg, 0, sizeof(*dg));
 
-	prop_dictionary_set_uint64(geom, "cylinders-per-unit",
-	    vnd->sc_geom.vng_ncylinders);
-
-	prop_dictionary_set(disk_info, "geometry", geom);
-	prop_object_release(geom);
-
-	prop_dictionary_set(device_properties(vnd->sc_dev),
-	    "disk-info", disk_info);
-
-	/*
-	 * Don't release disk_info here; we keep a reference to it.
-	 * disk_detach() will release it when we go away.
-	 */
+	dg->dg_secperunit = vnd->sc_geom.vng_nsectors *
+	    vnd->sc_geom.vng_ntracks * vnd->sc_geom.vng_ncylinders;
+	dg->dg_secsize = vnd->sc_geom.vng_secsize;
+	dg->dg_nsectors = vnd->sc_geom.vng_nsectors;
+	dg->dg_ntracks = vnd->sc_geom.vng_ntracks;
+	dg->dg_ncylinders = vnd->sc_geom.vng_ncylinders;
 
-	odisk_info = vnd->sc_dkdev.dk_info;
-	vnd->sc_dkdev.dk_info = disk_info;
-	if (odisk_info)
-		prop_object_release(odisk_info);
+	disk_set_info(vnd->sc_dev, &vnd->sc_dkdev, NULL);
 }
 
 #ifdef _MODULE

Index: src/sys/dev/ata/wd.c
diff -u src/sys/dev/ata/wd.c:1.402 src/sys/dev/ata/wd.c:1.403
--- src/sys/dev/ata/wd.c:1.402	Wed Jan  9 17:03:49 2013
+++ src/sys/dev/ata/wd.c	Tue May 28 20:47:48 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: wd.c,v 1.402 2013/01/09 22:03:49 riastradh Exp $ */
+/*	$NetBSD: wd.c,v 1.403 2013/05/29 00:47:48 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.402 2013/01/09 22:03:49 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: wd.c,v 1.403 2013/05/29 00:47:48 christos Exp $");
 
 #include "opt_ata.h"
 
@@ -1727,56 +1727,22 @@ bad144intern(struct wd_softc *wd)
 static void
 wd_params_to_properties(struct wd_softc *wd, struct ataparams *params)
 {
-	prop_dictionary_t disk_info, odisk_info, geom;
-	const char *cp;
+	struct disk_geom *dg = &wd->sc_dk.dk_geom;
 
-	disk_info = prop_dictionary_create();
+	memset(dg, 0, sizeof(*dg));
 
-	if (strcmp(wd->sc_params.atap_model, "ST506") == 0)
-		cp = "ST506";
-	else {
-		/* XXX Should have a case for ATA here, too. */
-		cp = "ESDI";
-	}
-	prop_dictionary_set_cstring_nocopy(disk_info, "type", cp);
-
-	geom = prop_dictionary_create();
-
-	prop_dictionary_set_uint64(geom, "sectors-per-unit", wd->sc_capacity);
-
-	prop_dictionary_set_uint32(geom, "sector-size",
-				   DEV_BSIZE /* XXX 512? */);
-
-	prop_dictionary_set_uint16(geom, "sectors-per-track",
-				   wd->sc_params.atap_sectors);
-
-	prop_dictionary_set_uint16(geom, "tracks-per-cylinder",
-				   wd->sc_params.atap_heads);
-
-	if (wd->sc_flags & WDF_LBA)
-		prop_dictionary_set_uint64(geom, "cylinders-per-unit",
-					   wd->sc_capacity /
-					       (wd->sc_params.atap_heads *
-					        wd->sc_params.atap_sectors));
-	else
-		prop_dictionary_set_uint16(geom, "cylinders-per-unit",
-					   wd->sc_params.atap_cylinders);
-
-	prop_dictionary_set(disk_info, "geometry", geom);
-	prop_object_release(geom);
-
-	prop_dictionary_set(device_properties(wd->sc_dev),
-			    "disk-info", disk_info);
-
-	/*
-	 * Don't release disk_info here; we keep a reference to it.
-	 * disk_detach() will release it when we go away.
-	 */
+	dg->dg_secperunit = wd->sc_capacity;
+	dg->dg_secsize = DEV_BSIZE /* XXX 512? */;
+	dg->dg_nsectors = wd->sc_params.atap_sectors;
+	dg->dg_ntracks = wd->sc_params.atap_heads;
+	if ((wd->sc_flags & WDF_LBA) == 0)
+		dg->dg_ncylinders = wd->sc_params.atap_cylinders;
+
+	/* XXX Should have a case for ATA here, too. */
+	const char *cp = strcmp(wd->sc_params.atap_model, "ST506") ?
+	    "ST506" : "ESDI";
 
-	odisk_info = wd->sc_dk.dk_info;
-	wd->sc_dk.dk_info = disk_info;
-	if (odisk_info)
-		prop_object_release(odisk_info);
+	disk_set_info(wd->sc_dev, &wd->sc_dk, cp);
 }
 
 int

Index: src/sys/dev/dkwedge/dk.c
diff -u src/sys/dev/dkwedge/dk.c:1.65 src/sys/dev/dkwedge/dk.c:1.66
--- src/sys/dev/dkwedge/dk.c:1.65	Sat Oct 27 13:18:15 2012
+++ src/sys/dev/dkwedge/dk.c	Tue May 28 20:47:48 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: dk.c,v 1.65 2012/10/27 17:18:15 chs Exp $	*/
+/*	$NetBSD: dk.c,v 1.66 2013/05/29 00:47:48 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.65 2012/10/27 17:18:15 chs Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dk.c,v 1.66 2013/05/29 00:47:48 christos Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_dkwedge.h"
@@ -228,35 +228,18 @@ dkwedge_array_expand(void)
 static void
 dkgetproperties(struct disk *disk, struct dkwedge_info *dkw)
 {
-	prop_dictionary_t disk_info, odisk_info, geom;
+	struct disk_geom *dg = &disk->dk_geom;
 
-	disk_info = prop_dictionary_create();
+	memset(dg, 0, sizeof(*dg));
 
-	prop_dictionary_set_cstring_nocopy(disk_info, "type", "ESDI");
+	dg->dg_secperunit = dkw->dkw_size >> disk->dk_blkshift;
+	dg->dg_secsize = DEV_BSIZE << disk->dk_blkshift;
+	dg->dg_nsectors = 32;
+	dg->dg_ntracks = 64;
+	/* XXX: why is that dkw->dkw_size instead of secperunit?!?! */
+	dg->dg_ncylinders = dkw->dkw_size / (dg->dg_nsectors * dg->dg_ntracks);
 
-	geom = prop_dictionary_create();
-
-	prop_dictionary_set_uint64(geom, "sectors-per-unit",
-	    dkw->dkw_size >> disk->dk_blkshift);
-
-	prop_dictionary_set_uint32(geom, "sector-size",
-	    DEV_BSIZE << disk->dk_blkshift);
-
-	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", dkw->dkw_size / 2048);
-
-	prop_dictionary_set(disk_info, "geometry", geom);
-	prop_object_release(geom);
-
-	odisk_info = disk->dk_info;
-
-	disk->dk_info = disk_info;
-
-	if (odisk_info != NULL)
-		prop_object_release(odisk_info);
+	disk_set_info(NULL, disk, "ESDI");
 }
 
 /*

Index: src/sys/dev/dm/device-mapper.c
diff -u src/sys/dev/dm/device-mapper.c:1.29 src/sys/dev/dm/device-mapper.c:1.30
--- src/sys/dev/dm/device-mapper.c:1.29	Tue Mar 13 14:40:30 2012
+++ src/sys/dev/dm/device-mapper.c	Tue May 28 20:47:48 2013
@@ -1,4 +1,4 @@
-/*        $NetBSD: device-mapper.c,v 1.29 2012/03/13 18:40:30 elad Exp $ */
+/*        $NetBSD: device-mapper.c,v 1.30 2013/05/29 00:47:48 christos Exp $ */
 
 /*
  * Copyright (c) 2010 The NetBSD Foundation, Inc.
@@ -673,28 +673,20 @@ dmminphys(struct buf *bp)
 void
 dmgetproperties(struct disk *disk, dm_table_head_t *head)
 {
-	prop_dictionary_t disk_info, odisk_info, geom;
 	uint64_t numsec;
 	unsigned secsize;
 
 	dm_table_disksize(head, &numsec, &secsize);
-	disk_info = prop_dictionary_create();
-	geom = prop_dictionary_create();
 
-	prop_dictionary_set_cstring_nocopy(disk_info, "type", "ESDI");
-	prop_dictionary_set_uint64(geom, "sectors-per-unit", numsec);
-	prop_dictionary_set_uint32(geom, "sector-size", secsize);
-	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", numsec / 2048);
-	prop_dictionary_set(disk_info, "geometry", geom);
-	prop_object_release(geom);
+	struct disk_geom *dg = &disk->dk_geom;
 
-	odisk_info = disk->dk_info;
-	disk->dk_info = disk_info;
+	memset(dg, 0, sizeof(*dg));
+	dg->dg_secperunit = numsec;
+	dg->dg_secsize = secsize;
+	dg->dg_nsectors = 32;
+	dg->dg_ntracks = 64;
 
-	if (odisk_info != NULL)
-		prop_object_release(odisk_info);
+	disk_set_info(NULL, disk, "ESDI");
 
 	disk_blocksize(disk, secsize);
 }

Index: src/sys/dev/isa/fd.c
diff -u src/sys/dev/isa/fd.c:1.100 src/sys/dev/isa/fd.c:1.101
--- src/sys/dev/isa/fd.c:1.100	Thu Feb  2 14:43:04 2012
+++ src/sys/dev/isa/fd.c	Tue May 28 20:47:48 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: fd.c,v 1.100 2012/02/02 19:43:04 tls Exp $	*/
+/*	$NetBSD: fd.c,v 1.101 2013/05/29 00:47:48 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.100 2012/02/02 19:43:04 tls Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fd.c,v 1.101 2013/05/29 00:47:48 christos Exp $");
 
 #include "opt_ddb.h"
 
@@ -252,7 +252,7 @@ void fdcretry(struct fdc_softc *fdc);
 void fdfinish(struct fd_softc *fd, struct buf *bp);
 static const struct fd_type *fd_dev_to_type(struct fd_softc *, dev_t);
 int fdformat(dev_t, struct ne7_fd_formb *, struct lwp *);
-static void fd_set_properties(struct fd_softc *fd);
+static void fd_set_geometry(struct fd_softc *fd);
 
 void	fd_mountroot_hook(device_t);
 
@@ -572,7 +572,7 @@ fdattach(device_t parent, device_t self,
 	rnd_attach_source(&fd->rnd_source, device_xname(fd->sc_dev),
 			  RND_TYPE_DISK, 0);
 
-	fd_set_properties(fd);
+	fd_set_geometry(fd);
 
 	if (!pmf_device_register(self, NULL, NULL))
 		aprint_error_dev(self, "cannot set power mgmt handler\n");
@@ -600,7 +600,7 @@ fddetach(device_t self, int flags)
 	pmf_device_deregister(self);
 
 #if 0 /* XXX need to undo at detach? */
-	fd_set_properties(fd);
+	fd_set_geometry(fd);
 #endif
 
 	rnd_detach_source(&fd->rnd_source);
@@ -917,7 +917,7 @@ fdopen(dev_t dev, int flags, int mode, s
 	fd->sc_cylin = -1;
 	fd->sc_flags |= FD_OPEN;
 
-	fd_set_properties(fd);
+	fd_set_geometry(fd);
 
 	return 0;
 }
@@ -1651,11 +1651,9 @@ fd_mountroot_hook(device_t dev)
 }
 
 static void
-fd_set_properties(struct fd_softc *fd)
+fd_set_geometry(struct fd_softc *fd)
 {
-	prop_dictionary_t disk_info, odisk_info, geom;
 	const struct fd_type *fdt;
-	int secsize;
 
 	fdt = fd->sc_type;
 	if (fdt == NULL) {
@@ -1664,49 +1662,22 @@ fd_set_properties(struct fd_softc *fd)
 			return;
 	}
 
-	disk_info = prop_dictionary_create();
-
-	geom = prop_dictionary_create();
-
-	prop_dictionary_set_uint64(geom, "sectors-per-unit",
-	    fdt->size);
+	struct disk_geom *dg = &fd->sc_dk.dk_geom;
 
+	memset(dg, 0, sizeof(*dg));
+	dg->dg_secperunit = fdt->size;
+	dg->dg_nsectors = fdt->sectrac;
 	switch (fdt->secsize) {
 	case 2:
-		secsize = 512;
+		dg->dg_secsize = 512;
 		break;
 	case 3:
-		secsize = 1024;
+		dg->dg_secsize = 1024;
 		break;
 	default:
-		secsize = 0;
+		break;
 	}
-
-	prop_dictionary_set_uint32(geom, "sector-size",
-	    secsize);
-
-	prop_dictionary_set_uint16(geom, "sectors-per-track",
-	    fdt->sectrac);
-
-	prop_dictionary_set_uint16(geom, "tracks-per-cylinder",
-	    fdt->heads);
-
-	prop_dictionary_set_uint64(geom, "cylinders-per-unit",
-	    fdt->cyls);
-
-	prop_dictionary_set(disk_info, "geometry", geom);
-	prop_object_release(geom);
-
-	prop_dictionary_set(device_properties(fd->sc_dev),
-	    "disk-info", disk_info);
-
-	/*
-	 * Don't release disk_info here; we keep a reference to it.
-	 * disk_detach() will release it when we go away.
-	 */
-
-	odisk_info = fd->sc_dk.dk_info;
-	fd->sc_dk.dk_info = disk_info;
-	if (odisk_info)
-		prop_object_release(odisk_info);
+	dg->dg_ntracks = fdt->heads;
+	dg->dg_ncylinders = fdt->cyls;
+	disk_set_info(fd->sc_dev, &fd->sc_dk, NULL);
 }

Index: src/sys/dev/raidframe/rf_netbsdkintf.c
diff -u src/sys/dev/raidframe/rf_netbsdkintf.c:1.303 src/sys/dev/raidframe/rf_netbsdkintf.c:1.304
--- src/sys/dev/raidframe/rf_netbsdkintf.c:1.303	Thu May 23 10:15:52 2013
+++ src/sys/dev/raidframe/rf_netbsdkintf.c	Tue May 28 20:47:49 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: rf_netbsdkintf.c,v 1.303 2013/05/23 14:15:52 christos Exp $	*/
+/*	$NetBSD: rf_netbsdkintf.c,v 1.304 2013/05/29 00:47:49 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.303 2013/05/23 14:15:52 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rf_netbsdkintf.c,v 1.304 2013/05/29 00:47:49 christos Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_compat_netbsd.h"
@@ -280,7 +280,7 @@ static void raidunlock(struct raid_softc
 static int raid_detach_unlocked(struct raid_softc *);
 
 static void rf_markalldirty(RF_Raid_t *);
-static void rf_set_properties(struct raid_softc *, RF_Raid_t *);
+static void rf_set_geometry(struct raid_softc *, RF_Raid_t *);
 
 void rf_ReconThread(struct rf_recon_req *);
 void rf_RewriteParityThread(RF_Raid_t *raidPtr);
@@ -1961,7 +1961,7 @@ raidinit(struct raid_softc *rs)
 
 	dkwedge_discover(&rs->sc_dkdev);
 
-	rf_set_properties(rs, raidPtr);
+	rf_set_geometry(rs, raidPtr);
 
 }
 #if (RF_INCLUDE_PARITY_DECLUSTERING_DS > 0)
@@ -3859,33 +3859,18 @@ raid_detach(device_t self, int flags)
 }
 
 static void
-rf_set_properties(struct raid_softc *rs, RF_Raid_t *raidPtr)
+rf_set_geometry(struct raid_softc *rs, RF_Raid_t *raidPtr)
 {
-	prop_dictionary_t disk_info, odisk_info, geom;
-	disk_info = prop_dictionary_create();
-	geom = prop_dictionary_create();
-	prop_dictionary_set_uint64(geom, "sectors-per-unit",
-				   raidPtr->totalSectors);
-	prop_dictionary_set_uint32(geom, "sector-size",
-				   raidPtr->bytesPerSector);
-	
-	prop_dictionary_set_uint16(geom, "sectors-per-track",
-				   raidPtr->Layout.dataSectorsPerStripe);
-	prop_dictionary_set_uint16(geom, "tracks-per-cylinder",
-				   4 * raidPtr->numCol);
-	
-	prop_dictionary_set_uint64(geom, "cylinders-per-unit",
-	   raidPtr->totalSectors / (raidPtr->Layout.dataSectorsPerStripe *
-	   (4 * raidPtr->numCol)));
-				   
-	prop_dictionary_set(disk_info, "geometry", geom);
-	prop_object_release(geom);
-	prop_dictionary_set(device_properties(rs->sc_dev),
-			    "disk-info", disk_info);
-	odisk_info = rs->sc_dkdev.dk_info;
-	rs->sc_dkdev.dk_info = disk_info;
-	if (odisk_info)
-		prop_object_release(odisk_info);
+	struct disk_geom *dg = &rs->sc_dkdev.dk_geom;
+
+	memset(dg, 0, sizeof(*dg));
+
+	dg->dg_secperunit = raidPtr->totalSectors;
+	dg->dg_secsize = raidPtr->bytesPerSector;
+	dg->dg_nsectors = raidPtr->Layout.dataSectorsPerStripe;
+	dg->dg_ntracks = 4 * raidPtr->numCol;
+
+	disk_set_info(rs->sc_dev, &rs->sc_dkdev, NULL);
 }
 
 /* 

Index: src/sys/dev/scsipi/cd.c
diff -u src/sys/dev/scsipi/cd.c:1.310 src/sys/dev/scsipi/cd.c:1.311
--- src/sys/dev/scsipi/cd.c:1.310	Fri Mar 15 12:16:12 2013
+++ src/sys/dev/scsipi/cd.c	Tue May 28 20:47:49 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: cd.c,v 1.310 2013/03/15 16:16:12 martin Exp $	*/
+/*	$NetBSD: cd.c,v 1.311 2013/05/29 00:47:49 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.310 2013/03/15 16:16:12 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cd.c,v 1.311 2013/05/29 00:47:49 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -174,7 +174,7 @@ static int	mmc_gettrackinfo(struct scsip
 static int	mmc_do_op(struct scsipi_periph *, struct mmc_op *);
 static int	mmc_setup_writeparams(struct scsipi_periph *, struct mmc_writeparams *);
 
-static void	cd_set_properties(struct cd_softc *);
+static void	cd_set_geometry(struct cd_softc *);
 
 CFATTACH_DECL3_NEW(cd, sizeof(struct cd_softc), cdmatch, cdattach, cddetach,
     NULL, NULL, NULL, DVF_DETACH_SHUTDOWN);
@@ -448,7 +448,7 @@ cdopen(dev_t dev, int flag, int fmt, str
 			cdgetdisklabel(cd);
 			SC_DEBUG(periph, SCSIPI_DB3, ("Disklabel fabricated "));
 
-			cd_set_properties(cd);
+			cd_set_geometry(cd);
 		}
 	}
 
@@ -3906,33 +3906,14 @@ mmc_setup_writeparams(struct scsipi_peri
 }
 
 static void
-cd_set_properties(struct cd_softc *cd)
+cd_set_geometry(struct cd_softc *cd)
 {
-	prop_dictionary_t disk_info, odisk_info, geom;
+	struct disk_geom *dg = &cd->sc_dk.dk_geom;
 
-	disk_info = prop_dictionary_create();
+	memset(dg, 0, sizeof(*dg));
 
-	geom = prop_dictionary_create();
+	dg->dg_secperunit = cd->params.disksize;
+	dg->dg_secsize = cd->params.blksize;
 
-	prop_dictionary_set_uint64(geom, "sectors-per-unit",
-	    cd->params.disksize);
-
-	prop_dictionary_set_uint32(geom, "sector-size",
-	    cd->params.blksize);
-
-	prop_dictionary_set(disk_info, "geometry", geom);
-	prop_object_release(geom);
-
-	prop_dictionary_set(device_properties(cd->sc_dev),
-	    "disk-info", disk_info);
-
-	/*
-	 * Don't release disk_info here; we keep a reference to it.
-	 * disk_detach() will release it when we go away.
-	 */
-
-	odisk_info = cd->sc_dk.dk_info;
-	cd->sc_dk.dk_info = disk_info;
-	if (odisk_info)
-		prop_object_release(odisk_info);
+	disk_set_info(cd->sc_dev, &cd->sc_dk, NULL);
 }

Index: src/sys/dev/scsipi/sd.c
diff -u src/sys/dev/scsipi/sd.c:1.299 src/sys/dev/scsipi/sd.c:1.300
--- src/sys/dev/scsipi/sd.c:1.299	Tue Apr 16 17:01:09 2013
+++ src/sys/dev/scsipi/sd.c	Tue May 28 20:47:49 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: sd.c,v 1.299 2013/04/16 21:01:09 jakllsch Exp $	*/
+/*	$NetBSD: sd.c,v 1.300 2013/05/29 00:47:49 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.299 2013/04/16 21:01:09 jakllsch Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sd.c,v 1.300 2013/05/29 00:47:49 christos Exp $");
 
 #include "opt_scsi.h"
 
@@ -125,7 +125,7 @@ static int	sd_setcache(struct sd_softc *
 static int	sdmatch(device_t, cfdata_t, void *);
 static void	sdattach(device_t, device_t, void *);
 static int	sddetach(device_t, int);
-static void	sd_set_properties(struct sd_softc *);
+static void	sd_set_geometry(struct sd_softc *);
 
 CFATTACH_DECL3_NEW(sd, sizeof(struct sd_softc), sdmatch, sdattach, sddetach,
     NULL, NULL, NULL, DVF_DETACH_SHUTDOWN);
@@ -2160,7 +2160,7 @@ page0:
 	dp->rot_rate = 3600;
 
 setprops:
-	sd_set_properties(sd);
+	sd_set_geometry(sd);
 
 	return (SDGP_RESULT_OK);
 }
@@ -2298,42 +2298,17 @@ sd_setcache(struct sd_softc *sd, int bit
 }
 
 static void
-sd_set_properties(struct sd_softc *sd)
+sd_set_geometry(struct sd_softc *sd)
 {
-	prop_dictionary_t disk_info, odisk_info, geom;
+	struct disk_geom *dg = &sd->sc_dk.dk_geom;
 
-	disk_info = prop_dictionary_create();
+	memset(dg, 0, sizeof(*dg));
 
-	geom = prop_dictionary_create();
+	dg->dg_secperunit = sd->params.disksize;
+	dg->dg_secsize = sd->params.blksize;
+	dg->dg_nsectors = sd->params.sectors;
+	dg->dg_ntracks = sd->params.heads;
+	dg->dg_ncylinders = sd->params.cyls;
 
-	prop_dictionary_set_uint64(geom, "sectors-per-unit",
-	    sd->params.disksize);
-
-	prop_dictionary_set_uint32(geom, "sector-size",
-	    sd->params.blksize);
-
-	prop_dictionary_set_uint16(geom, "sectors-per-track",
-	    sd->params.sectors);
-
-	prop_dictionary_set_uint16(geom, "tracks-per-cylinder",
-	    sd->params.heads);
-
-	prop_dictionary_set_uint64(geom, "cylinders-per-unit",
-	    sd->params.cyls);
-
-	prop_dictionary_set(disk_info, "geometry", geom);
-	prop_object_release(geom);
-
-	prop_dictionary_set(device_properties(sd->sc_dev),
-	    "disk-info", disk_info);
-
-	/*
-	 * Don't release disk_info here; we keep a reference to it.
-	 * disk_detach() will release it when we go away.
-	 */
-
-	odisk_info = sd->sc_dk.dk_info;
-	sd->sc_dk.dk_info = disk_info;
-	if (odisk_info)
-		prop_object_release(odisk_info);
+	disk_set_info(sd->sc_dev, &sd->sc_dk, NULL);
 }

Index: src/sys/kern/subr_disk.c
diff -u src/sys/kern/subr_disk.c:1.101 src/sys/kern/subr_disk.c:1.102
--- src/sys/kern/subr_disk.c:1.101	Fri Feb  8 19:31:21 2013
+++ src/sys/kern/subr_disk.c	Tue May 28 20:47:49 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: subr_disk.c,v 1.101 2013/02/09 00:31:21 christos Exp $	*/
+/*	$NetBSD: subr_disk.c,v 1.102 2013/05/29 00:47:49 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.101 2013/02/09 00:31:21 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: subr_disk.c,v 1.102 2013/05/29 00:47:49 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/kernel.h>
@@ -508,3 +508,84 @@ disk_ioctl(struct disk *diskp, u_long cm
 
 	return (error);
 }
+
+void
+disk_set_info(device_t dev, struct disk *dk, const char *type)
+{
+	struct disk_geom *dg = &dk->dk_geom;
+
+	if (dg->dg_secperunit == 0 && dg->dg_ncylinders == 0) {
+#ifdef DIAGNOSTIC
+		printf("%s: secperunit and ncylinders are zero\n", dk->dk_name);
+#endif
+		return;
+	}
+
+	if (dg->dg_secperunit == 0) {
+		if (dg->dg_nsectors == 0 || dg->dg_ntracks == 0) {
+#ifdef DIAGNOSTIC
+			printf("%s: secperunit and (sectors or tracks) "
+			    "are zero\n", dk->dk_name);
+#endif
+			return;
+		}
+		dg->dg_secperunit = dg->dg_nsectors *
+		    dg->dg_ntracks * dg->dg_ncylinders;
+	}
+
+	if (dg->dg_ncylinders == 0) {
+		if (dg->dg_ntracks && dg->dg_nsectors)
+			dg->dg_ncylinders = dg->dg_secperunit /
+			    (dg->dg_ntracks * dg->dg_nsectors);
+	}
+
+	if (dg->dg_secsize == 0) {
+#ifdef DIAGNOSTIC
+		printf("%s: fixing 0 sector size\n", dk->dk_name);
+#endif
+		dg->dg_secsize = DEV_BSIZE;
+	}
+
+	prop_dictionary_t disk_info, odisk_info, geom;
+
+	disk_info = prop_dictionary_create();
+	geom = prop_dictionary_create();
+
+	prop_dictionary_set_uint64(geom, "sectors-per-unit",
+	    dg->dg_secperunit);
+
+	prop_dictionary_set_uint32(geom, "sector-size", dg->dg_secsize);
+
+	if (dg->dg_nsectors)
+		prop_dictionary_set_uint16(geom, "sectors-per-track",
+		    dg->dg_nsectors);
+
+	if (dg->dg_ntracks)
+		prop_dictionary_set_uint16(geom, "tracks-per-cylinder",
+		    dg->dg_ntracks);
+
+	if (dg->dg_ncylinders)
+		prop_dictionary_set_uint64(geom, "cylinders-per-unit",
+		    dg->dg_ncylinders);
+
+	prop_dictionary_set(disk_info, "geometry", geom);
+
+	if (type)
+		prop_dictionary_set_cstring_nocopy(disk_info, "type", type);
+
+	prop_object_release(geom);
+
+	odisk_info = dk->dk_info;
+	dk->dk_info = disk_info;
+
+	if (dev)
+		prop_dictionary_set(device_properties(dev), "disk-info",
+		    disk_info);
+
+	/*
+	 * Don't release disk_info here; we keep a reference to it.
+	 * disk_detach() will release it when we go away.
+	 */
+	if (odisk_info)
+		prop_object_release(odisk_info);
+}

Index: src/sys/sys/param.h
diff -u src/sys/sys/param.h:1.429 src/sys/sys/param.h:1.430
--- src/sys/sys/param.h:1.429	Tue May 21 04:37:27 2013
+++ src/sys/sys/param.h	Tue May 28 20:47:49 2013
@@ -1,4 +1,4 @@
-/*	$NetBSD: param.h,v 1.429 2013/05/21 08:37:27 roy Exp $	*/
+/*	$NetBSD: param.h,v 1.430 2013/05/29 00:47:49 christos Exp $	*/
 
 /*-
  * Copyright (c) 1982, 1986, 1989, 1993
@@ -63,7 +63,7 @@
  *	2.99.9		(299000900)
  */
 
-#define	__NetBSD_Version__	699002000	/* NetBSD 6.99.20 */
+#define	__NetBSD_Version__	699002100	/* NetBSD 6.99.21 */
 
 #define __NetBSD_Prereq__(M,m,p) (((((M) * 100000000) + \
     (m) * 1000000) + (p) * 100) <= __NetBSD_Version__)

Reply via email to