aboutsummaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
authorSøren Schmidt <sos@FreeBSD.org>2003-08-25 07:59:50 +0000
committerSøren Schmidt <sos@FreeBSD.org>2003-08-25 07:59:50 +0000
commitea01d569176e1d1f562af32e9e6f8168eaecbb82 (patch)
tree6bef55007d546e8d66ad87bb423931749ce20c30 /sys/dev
parente4d023cef8d1745e5143ba4a5d8644673a81ef27 (diff)
Notes
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/ata/ata-all.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/sys/dev/ata/ata-all.c b/sys/dev/ata/ata-all.c
index 6f938586ffd4a..0a66ec287a59f 100644
--- a/sys/dev/ata/ata-all.c
+++ b/sys/dev/ata/ata-all.c
@@ -196,12 +196,14 @@ ata_detach(device_t dev)
mtx_unlock(&ch->queue_mtx);
if (ch->device[MASTER].param) {
- ata_controlcmd(&ch->device[MASTER], ATA_FLUSHCACHE, 0, 0, 0);
+ if (ch->device[MASTER].param->support.command2 & ATA_SUPPORT_FLUSHCACHE)
+ ata_controlcmd(&ch->device[MASTER], ATA_FLUSHCACHE, 0, 0, 0);
free(ch->device[MASTER].param, M_ATA);
ch->device[MASTER].param = NULL;
}
if (ch->device[SLAVE].param) {
- ata_controlcmd(&ch->device[SLAVE], ATA_FLUSHCACHE, 0, 0, 0);
+ if (ch->device[SLAVE].param->support.command2 & ATA_SUPPORT_FLUSHCACHE)
+ ata_controlcmd(&ch->device[SLAVE], ATA_FLUSHCACHE, 0, 0, 0);
free(ch->device[SLAVE].param, M_ATA);
ch->device[SLAVE].param = NULL;
}
@@ -303,9 +305,11 @@ ata_shutdown(void *arg, int howto)
for (ctlr = 0; ctlr < devclass_get_maxunit(ata_devclass); ctlr++) {
if (!(ch = devclass_get_softc(ata_devclass, ctlr)))
continue;
- if (ch->device[MASTER].param)
+ if (ch->device[MASTER].param &&
+ ch->device[MASTER].param->support.command2 & ATA_SUPPORT_FLUSHCACHE)
ata_controlcmd(&ch->device[MASTER], ATA_FLUSHCACHE, 0, 0, 0);
- if (ch->device[SLAVE].param)
+ if (ch->device[SLAVE].param &&
+ ch->device[SLAVE].param->support.command2 & ATA_SUPPORT_FLUSHCACHE)
ata_controlcmd(&ch->device[SLAVE], ATA_FLUSHCACHE, 0, 0, 0);
}
}