diff options
| author | Pawel Jakub Dawidek <pjd@FreeBSD.org> | 2006-10-31 21:19:25 +0000 |
|---|---|---|
| committer | Pawel Jakub Dawidek <pjd@FreeBSD.org> | 2006-10-31 21:19:25 +0000 |
| commit | 9cd394ea9657da13e9bceeadb5d18ec743c77fc5 (patch) | |
| tree | e7596b419a359a5488cd4aa3c109c1d642056b40 /sys/dev/ata/ata-disk.c | |
| parent | 1d2aee20b8fd3a6799fb682cddf197358b2f60cd (diff) | |
Notes
Diffstat (limited to 'sys/dev/ata/ata-disk.c')
| -rw-r--r-- | sys/dev/ata/ata-disk.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/sys/dev/ata/ata-disk.c b/sys/dev/ata/ata-disk.c index acdb37a4b1da..f82c098dc20e 100644 --- a/sys/dev/ata/ata-disk.c +++ b/sys/dev/ata/ata-disk.c @@ -159,6 +159,8 @@ ad_attach(device_t dev) adp->disk->d_fwsectors = adp->sectors; adp->disk->d_fwheads = adp->heads; adp->disk->d_unit = device_get_unit(dev); + if (atadev->param.support.command2 & ATA_SUPPORT_FLUSHCACHE) + adp->disk->d_flags = DISKFLAG_CANFLUSHCACHE; disk_create(adp->disk, DISK_VERSION); device_add_child(dev, "subdisk", device_get_unit(dev)); ad_firmware_geom_adjust(dev, adp->disk); @@ -269,6 +271,17 @@ ad_strategy(struct bio *bp) else request->u.ata.command = ATA_WRITE; break; + case BIO_FLUSH: + request->u.ata.lba = 0; + request->u.ata.count = 0; + request->u.ata.feature = 0; + request->bytecount = 0; + request->transfersize = 0; + request->timeout = 1; + request->retries = 0; + request->flags = ATA_R_CONTROL; + request->u.ata.command = ATA_FLUSHCACHE; + break; default: device_printf(dev, "FAILURE - unknown BIO operation\n"); ata_free_request(request); |
