summaryrefslogtreecommitdiffstats
path: root/sys/dev/ata
diff options
context:
space:
mode:
authorsos <sos@FreeBSD.org>2003-03-27 10:48:21 +0000
committersos <sos@FreeBSD.org>2003-03-27 10:48:21 +0000
commit4bc38c790bffcfdbdbda48ea347d3d6f380b5c99 (patch)
tree2c167278c0546ded0ded7c716c5deebb3c1069ba /sys/dev/ata
parent8db28f05432baad8e72932318b1ee39453f0c392 (diff)
downloadFreeBSD-src-4bc38c790bffcfdbdbda48ea347d3d6f380b5c99.zip
FreeBSD-src-4bc38c790bffcfdbdbda48ea347d3d6f380b5c99.tar.gz
Biofinish the request if we cannot malloc in ad_start.
Diffstat (limited to 'sys/dev/ata')
-rw-r--r--sys/dev/ata/ata-disk.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/sys/dev/ata/ata-disk.c b/sys/dev/ata/ata-disk.c
index 9193c65..8523c33 100644
--- a/sys/dev/ata/ata-disk.c
+++ b/sys/dev/ata/ata-disk.c
@@ -356,8 +356,12 @@ ad_start(struct ata_device *atadev)
return;
}
+ /* remove request from drive queue */
+ bioq_remove(&adp->queue, bp);
+
if (!(request = malloc(sizeof(struct ad_request), M_AD, M_NOWAIT|M_ZERO))) {
ata_prtdev(atadev, "out of memory in start\n");
+ biofinish(bp, NULL, ENOMEM);
return;
}
@@ -377,9 +381,6 @@ ad_start(struct ata_device *atadev)
/* insert in tag array */
adp->tags[tag] = request;
- /* remove from drive queue */
- bioq_remove(&adp->queue, bp);
-
/* link onto controller queue */
TAILQ_INSERT_TAIL(&atadev->channel->ata_queue, request, chain);
}
OpenPOWER on IntegriCloud