From bb17c5f69fb891e7116651cc4a819e66f46275f8 Mon Sep 17 00:00:00 2001 From: Poul-Henning Kamp Date: Tue, 11 Feb 2003 14:12:06 +0000 Subject: [PATCH] Propagate DISKFLAG_CANDELETE from struct disk to G_PF_CANDELETE on the provider. --- sys/geom/geom_disk.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/sys/geom/geom_disk.c b/sys/geom/geom_disk.c index e6f7652f78e4..d763bfe4c891 100644 --- a/sys/geom/geom_disk.c +++ b/sys/geom/geom_disk.c @@ -275,19 +275,21 @@ g_disk_create(void *arg) { struct g_geom *gp; struct g_provider *pp; - dev_t dev; + struct disk *dp; g_topology_assert(); - dev = arg; - gp = g_new_geomf(&g_disk_class, dev->si_name); + dp = arg; + gp = g_new_geomf(&g_disk_class, "%s%d", dp->d_name, dp->d_unit); gp->start = g_disk_start; gp->access = g_disk_access; - gp->softc = dev->si_disk; + gp->softc = dp; gp->dumpconf = g_disk_dumpconf; - dev->si_disk->d_geom = gp; + dp->d_geom = gp; pp = g_new_providerf(gp, "%s", gp->name); - pp->mediasize = dev->si_disk->d_mediasize; - pp->sectorsize = dev->si_disk->d_sectorsize; + pp->mediasize = dp->d_mediasize; + pp->sectorsize = dp->d_sectorsize; + if (dp->d_flags & DISKFLAG_CANDELETE) + pp->flags |= G_PF_CANDELETE; g_error_provider(pp, 0); if (bootverbose) printf("GEOM: new disk %s\n", gp->name); @@ -301,6 +303,7 @@ disk_create(int unit, struct disk *dp, int flags, struct cdevsw *cdevsw, void * dev_t dev; dev = g_malloc(sizeof *dev, M_ZERO); + dp->d_unit = unit; dp->d_dev = dev; dp->d_flags = flags; dp->d_devsw = cdevsw; @@ -321,7 +324,7 @@ disk_create(int unit, struct disk *dp, int flags, struct cdevsw *cdevsw, void * dev->si_udev = 0x10002; /* XXX: Needed ? */ dev->si_name = dev->__si_namebuf; sprintf(dev->si_name, "%s%d", dp->d_name, unit); - g_call_me(g_disk_create, dev); + g_call_me(g_disk_create, dp); return (dev); }