From b4f24d501388e451effb83554929f95bd6883301 Mon Sep 17 00:00:00 2001 From: le Date: Thu, 11 Mar 2004 14:11:08 +0000 Subject: Properly count references of our dev_t to avoid triggering a KASSERT in dev_strategy(). Submitted by: dwmalone Approved by: grog (mentor) --- sys/dev/vinum/vinumconfig.c | 3 +++ sys/dev/vinum/vinumio.c | 1 + 2 files changed, 4 insertions(+) (limited to 'sys') diff --git a/sys/dev/vinum/vinumconfig.c b/sys/dev/vinum/vinumconfig.c index e622eb1..8c7e038 100644 --- a/sys/dev/vinum/vinumconfig.c +++ b/sys/dev/vinum/vinumconfig.c @@ -476,6 +476,7 @@ get_empty_drive(void) bzero(drive, sizeof(struct drive)); drive->driveno = driveno; /* put number in structure */ drive->flags |= VF_NEWBORN; /* newly born drive */ + drive->dev = NODEV; strcpy(drive->devicename, "unknown"); /* and make the name ``unknown'' */ return driveno; /* return the index */ } @@ -594,6 +595,8 @@ free_drive(struct drive *drive) close_locked_drive(drive); /* close it */ if (drive->freelist) Free(drive->freelist); + if (drive->dev != NODEV) + dev_rel(drive->dev); bzero(drive, sizeof(struct drive)); /* this also sets drive_unallocated */ unlockdrive(drive); } diff --git a/sys/dev/vinum/vinumio.c b/sys/dev/vinum/vinumio.c index c458fa3..71a46f5 100644 --- a/sys/dev/vinum/vinumio.c +++ b/sys/dev/vinum/vinumio.c @@ -58,6 +58,7 @@ open_drive(struct drive *drive, struct thread *td, int verbose) drive->dev = getdiskbyname(drive->devicename); if (drive->dev == NODEV) /* didn't find anything */ return ENOENT; + dev_ref(drive->dev); drive->dev->si_iosize_max = DFLTPHYS; dsw = devsw(drive->dev); -- cgit v1.1