Deleted Added
full compact
37c37
< __FBSDID("$FreeBSD: head/sys/geom/geom_disk.c 125651 2004-02-10 10:54:19Z phk $");
---
> __FBSDID("$FreeBSD: head/sys/geom/geom_disk.c 125975 2004-02-18 21:36:53Z phk $");
90,92c90,91
< if (dp->d_flags & DISKFLAG_NOGIANT)
< return;
< mtx_lock(&Giant);
---
> if (dp->d_flags & DISKFLAG_NEEDSGIANT)
> mtx_lock(&Giant);
98,100c97,98
< if (dp->d_flags & DISKFLAG_NOGIANT)
< return;
< mtx_unlock(&Giant);
---
> if (dp->d_flags & DISKFLAG_NEEDSGIANT)
> mtx_unlock(&Giant);
113c111
< if (dp == NULL) {
---
> if (dp == NULL || dp->d_destroyed) {
120,121c118
< else
< return (ENXIO);
---
> return (ENXIO);
236c233
< if (dp == NULL)
---
> if (dp == NULL || dp->d_destroyed)
360a358
> struct disk *dp;
364c362,363
< gp = ptr;
---
> dp = ptr;
> gp = dp->d_geom;
366a366
> g_free(dp);
369,370c369,370
< void
< disk_create(int unit, struct disk *dp, int flags, void *unused __unused, void * unused2 __unused)
---
> struct disk *
> disk_alloc()
371a372
> struct disk *dp;
373,374c374,388
< dp->d_unit = unit;
< dp->d_flags = flags;
---
> dp = g_malloc(sizeof *dp, M_WAITOK | M_ZERO);
> return (dp);
> }
>
> void
> disk_create(struct disk *dp, int version)
> {
> if (version != DISK_VERSION_00) {
> printf("WARNING: Attempt to add disk %s%d %s",
> dp->d_name, dp->d_unit,
> " using incompatible ABI version of disk(9)\n");
> printf("WARNING: Ignoring disk %s%d\n",
> dp->d_name, dp->d_unit);
> return;
> }
390d403
< struct g_geom *gp;
393,399c406,407
< gp = dp->d_geom;
< if (gp == NULL)
< return;
< gp->softc = NULL;
< devstat_remove_entry(dp->d_devstat);
< g_waitfor_event(g_disk_destroy, gp, M_WAITOK, NULL, NULL);
< dp->d_geom = NULL;
---
> dp->d_destroyed = 1;
> g_post_event(g_disk_destroy, dp, M_WAITOK, NULL, NULL);