aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/ata/ata-raid.c
diff options
context:
space:
mode:
authorSøren Schmidt <sos@FreeBSD.org>2005-04-18 16:01:56 +0000
committerSøren Schmidt <sos@FreeBSD.org>2005-04-18 16:01:56 +0000
commitb3c3ba2ed7634f2300a2a98ccce5ceb33fd9393d (patch)
tree461e50623c6970cd715276f3022ff8e29d45244d /sys/dev/ata/ata-raid.c
parentf8aa7a835c5d9ebdbe9a30a2e233e49ef7f990a6 (diff)
Notes
Diffstat (limited to 'sys/dev/ata/ata-raid.c')
-rw-r--r--sys/dev/ata/ata-raid.c27
1 files changed, 17 insertions, 10 deletions
diff --git a/sys/dev/ata/ata-raid.c b/sys/dev/ata/ata-raid.c
index 0dcfc2917868..5418bd924be2 100644
--- a/sys/dev/ata/ata-raid.c
+++ b/sys/dev/ata/ata-raid.c
@@ -381,8 +381,7 @@ ata_raid_strategy(struct bio *bp)
/* do we have a spare to rebuild on ? */
if (rdp->disks[this].flags & AR_DF_SPARE) {
- if ((composite = malloc(sizeof(struct ata_composite),
- M_AR, M_NOWAIT | M_ZERO))) {
+ if ((composite = ata_alloc_composite())) {
if ((rebuild = ata_alloc_request())) {
rdp->rebuild_lba = blk + chunk;
bcopy(request, rebuild,
@@ -404,12 +403,13 @@ ata_raid_strategy(struct bio *bp)
ata_raid_send_request(rebuild);
}
else {
- free(composite, M_AR);
+ ata_free_composite(composite);
printf("DOH! ata_alloc_request failed!\n");
}
}
- else
- printf("DOH! composite malloc failed!\n");
+ else {
+ printf("DOH! ata_alloc_composite failed!\n");
+ }
}
else if (rdp->disks[this].flags & AR_DF_ONLINE) {
/*
@@ -441,9 +441,8 @@ ata_raid_strategy(struct bio *bp)
struct ata_composite *composite;
int this = drv + rdp->width;
- if ((composite = malloc(sizeof(struct ata_composite),
- M_AR, M_NOWAIT | M_ZERO)) &&
- (mirror = ata_alloc_request())) {
+ if ((composite = ata_alloc_composite())) {
+ if ((mirror = ata_alloc_request())) {
rdp->rebuild_lba = blk + chunk;
bcopy(request, mirror, sizeof(struct ata_request));
mirror->this = this;
@@ -460,6 +459,14 @@ ata_raid_strategy(struct bio *bp)
ata_raid_send_request(mirror);
rdp->disks[this].last_lba = bp->bio_pblkno + chunk;
}
+ else {
+ ata_free_composite(composite);
+ printf("DOH! ata_alloc_request failed!\n");
+ }
+ }
+ else {
+ printf("DOH! ata_alloc_composite failed!\n");
+ }
}
else
drv += rdp->width;
@@ -694,7 +701,7 @@ ata_raid_done(struct ata_request *request)
}
}
mtx_destroy(&composite->lock);
- free(composite, M_AR);
+ ata_free_composite(composite);
}
}
else
@@ -2921,7 +2928,7 @@ ata_raid_init_request(struct ar_softc *rdp, struct bio *bio)
if (!(request = ata_alloc_request())) {
printf("FAILURE - out of memory in ata_raid_init_request\n");
- return 0;
+ return NULL;
}
request->timeout = 5;
request->retries = 2;