summaryrefslogtreecommitdiffstats
path: root/sys/dev/ata
diff options
context:
space:
mode:
authortrasz <trasz@FreeBSD.org>2009-01-08 17:26:51 +0000
committertrasz <trasz@FreeBSD.org>2009-01-08 17:26:51 +0000
commit3e67abb702a0af9dbd399509e984c3a2ba1bdc3e (patch)
tree3951873ee916b9e11809e8b5a927c3a218dd30e0 /sys/dev/ata
parent98ad45c3d3f257c3649d4e198723267231203184 (diff)
downloadFreeBSD-src-3e67abb702a0af9dbd399509e984c3a2ba1bdc3e.zip
FreeBSD-src-3e67abb702a0af9dbd399509e984c3a2ba1bdc3e.tar.gz
Make "kldunload atapicam" return EBUSY instead of deadlocking when a device
created by atapicam is being kept opened or mounted. This is probably just a temporary solution until we invent something better. Reviewed by: scottl Approved by: rwatson (mentor) Sponsored by: FreeBSD Foundation Reported by: Jaakko Heinonen
Diffstat (limited to 'sys/dev/ata')
-rw-r--r--sys/dev/ata/atapi-cam.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/sys/dev/ata/atapi-cam.c b/sys/dev/ata/atapi-cam.c
index d8f0b86..b83eaa1 100644
--- a/sys/dev/ata/atapi-cam.c
+++ b/sys/dev/ata/atapi-cam.c
@@ -254,6 +254,10 @@ atapi_cam_detach(device_t dev)
struct atapi_xpt_softc *scp = device_get_softc(dev);
mtx_lock(&scp->state_lock);
+ if (xpt_sim_opened(scp->sim)) {
+ mtx_unlock(&scp->state_lock);
+ return (EBUSY);
+ }
xpt_freeze_simq(scp->sim, 1 /*count*/);
scp->flags |= DETACHING;
mtx_unlock(&scp->state_lock);
OpenPOWER on IntegriCloud