summaryrefslogtreecommitdiffstats
path: root/sys/dev/ata/ata-all.c
diff options
context:
space:
mode:
authorsos <sos@FreeBSD.org>2002-03-26 09:31:22 +0000
committersos <sos@FreeBSD.org>2002-03-26 09:31:22 +0000
commitcf912d2e7adf28df9b489a4fdac3f010cfdd7372 (patch)
tree1dddd30ce30d7962181ee37dc4ea3687faae43b1 /sys/dev/ata/ata-all.c
parent5713462d5adb7131b4da0be427ff395fe49a0c81 (diff)
downloadFreeBSD-src-cf912d2e7adf28df9b489a4fdac3f010cfdd7372.zip
FreeBSD-src-cf912d2e7adf28df9b489a4fdac3f010cfdd7372.tar.gz
Misc little cleanups.
Diffstat (limited to 'sys/dev/ata/ata-all.c')
-rw-r--r--sys/dev/ata/ata-all.c18
1 files changed, 7 insertions, 11 deletions
diff --git a/sys/dev/ata/ata-all.c b/sys/dev/ata/ata-all.c
index 6b25699..ef47133 100644
--- a/sys/dev/ata/ata-all.c
+++ b/sys/dev/ata/ata-all.c
@@ -418,31 +418,27 @@ ata_getparam(struct ata_device *atadev, u_int8_t command)
struct ata_params *ata_parm;
int retry = 0;
+ if (!(ata_parm = malloc(sizeof(struct ata_params), M_ATA, M_NOWAIT))) {
+ ata_prtdev(atadev, "malloc for identify data failed\n");
+ return -1;
+ }
+
/* apparently some devices needs this repeated */
do {
if (ata_command(atadev, command, 0, 0, 0, ATA_WAIT_INTR)) {
ata_prtdev(atadev, "%s identify failed\n",
command == ATA_C_ATAPI_IDENTIFY ? "ATAPI" : "ATA");
+ free(ata_parm, M_ATA);
return -1;
}
if (retry++ > 4) {
ata_prtdev(atadev, "%s identify retries exceeded\n",
command == ATA_C_ATAPI_IDENTIFY ? "ATAPI" : "ATA");
+ free(ata_parm, M_ATA);
return -1;
}
} while (ata_wait(atadev, ((command == ATA_C_ATAPI_IDENTIFY) ?
ATA_S_DRQ : (ATA_S_READY|ATA_S_DSC|ATA_S_DRQ))));
-
- ata_parm = malloc(sizeof(struct ata_params), M_ATA, M_NOWAIT);
- if (!ata_parm) {
- int i;
-
- for (i = 0; i < sizeof(struct ata_params)/sizeof(int16_t); i++)
- ATA_INW(atadev->channel->r_io, ATA_DATA);
- ata_prtdev(atadev, "malloc for identify data failed\n");
- return -1;
- }
-
ATA_INSW(atadev->channel->r_io, ATA_DATA, (int16_t *)ata_parm,
sizeof(struct ata_params)/sizeof(int16_t));
OpenPOWER on IntegriCloud