summaryrefslogtreecommitdiffstats
path: root/sys/dev/ata/ata-all.c
diff options
context:
space:
mode:
authorsos <sos@FreeBSD.org>2002-04-05 18:37:04 +0000
committersos <sos@FreeBSD.org>2002-04-05 18:37:04 +0000
commit7c1178a00143cf8864bcbe0e5d0d3f672731ac85 (patch)
tree6dab51b15d585ec32622f2ec290df4e733833fd5 /sys/dev/ata/ata-all.c
parentf6dc1b2de9da1d39bace7591671b861b3eed3c49 (diff)
downloadFreeBSD-src-7c1178a00143cf8864bcbe0e5d0d3f672731ac85.zip
FreeBSD-src-7c1178a00143cf8864bcbe0e5d0d3f672731ac85.tar.gz
Unlock the channel again if an ata_reinit() fails.
Diffstat (limited to 'sys/dev/ata/ata-all.c')
-rw-r--r--sys/dev/ata/ata-all.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/sys/dev/ata/ata-all.c b/sys/dev/ata/ata-all.c
index 5caa2f0..3e437a9 100644
--- a/sys/dev/ata/ata-all.c
+++ b/sys/dev/ata/ata-all.c
@@ -303,7 +303,8 @@ ataioctl(dev_t dev, u_long cmd, caddr_t addr, int32_t flag, struct thread *td)
if (!device || !(ch = device_get_softc(device)))
return ENXIO;
ATA_SLEEPLOCK_CH(ch, ATA_ACTIVE);
- error = ata_reinit(ch);
+ if ((error = ata_reinit(ch)))
+ ATA_UNLOCK_CH(ch);
return error;
case ATAGMODE:
@@ -838,6 +839,7 @@ ata_reinit(struct ata_channel *ch)
if (!ch->r_io || !ch->r_altio || !ch->r_irq)
return ENXIO;
+
ATA_FORCELOCK_CH(ch, ATA_CONTROL);
ch->running = NULL;
devices = ch->devices;
OpenPOWER on IntegriCloud