diff options
author | sos <sos@FreeBSD.org> | 2003-03-27 10:48:21 +0000 |
---|---|---|
committer | sos <sos@FreeBSD.org> | 2003-03-27 10:48:21 +0000 |
commit | 4bc38c790bffcfdbdbda48ea347d3d6f380b5c99 (patch) | |
tree | 2c167278c0546ded0ded7c716c5deebb3c1069ba /sys/dev/ata | |
parent | 8db28f05432baad8e72932318b1ee39453f0c392 (diff) | |
download | FreeBSD-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.c | 7 |
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); } |