aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/ata
diff options
context:
space:
mode:
authorSøren Schmidt <sos@FreeBSD.org>1999-11-27 17:06:10 +0000
committerSøren Schmidt <sos@FreeBSD.org>1999-11-27 17:06:10 +0000
commitad6eb979ba156fc1820eba48e05b41a9eeb61b81 (patch)
tree63d06d30c5a40fbb5feff3e43a6d81547a8db0ff /sys/dev/ata
parent652b720001f33390e636c61b7ea52841f9d7d704 (diff)
Notes
Diffstat (limited to 'sys/dev/ata')
-rw-r--r--sys/dev/ata/ata-disk.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/sys/dev/ata/ata-disk.c b/sys/dev/ata/ata-disk.c
index b8a083a3a582a..3de82054cfe60 100644
--- a/sys/dev/ata/ata-disk.c
+++ b/sys/dev/ata/ata-disk.c
@@ -40,6 +40,7 @@
#include <sys/conf.h>
#include <sys/disk.h>
#include <sys/devicestat.h>
+#include <sys/cons.h>
#include <vm/vm.h>
#include <vm/pmap.h>
#include <vm/vm_page.h>
@@ -327,6 +328,7 @@ addump(dev_t dev)
if (!adp)
return ENXIO;
+ ata_reinit(adp->controller);
adp->flags &= ~AD_F_DMA_ENABLED;
while (count > 0) {
@@ -346,6 +348,8 @@ addump(dev_t dev)
while (request.bytecount > 0) {
ad_transfer(&request);
+ if (request.flags & AR_F_ERROR)
+ return EIO;
request.donecount += request.currentsize;
DELAY(20);
}
@@ -361,10 +365,12 @@ addump(dev_t dev)
blkno += howmany(PAGE_SIZE, secsize);
count -= howmany(PAGE_SIZE, secsize);
addr += PAGE_SIZE;
+ if (cncheckc() != -1)
+ return EINTR;
}
if (ata_wait(adp->controller, adp->unit, ATA_S_READY | ATA_S_DSC) < 0)
- printf("ad_dump: timeout waiting for final ready\n");
+ printf("addump: timeout waiting for final ready\n");
return 0;
}