Alan Cox wrote:
If you see a synchronize cache succeed and you then see the drive shutdown succeed then you know that a sync cache can be faked as ok safely. Any other command in between or after and it doesn't get faked This seems pretty easy to deal with at command issue.
Yup. It could be as trivial as this (untested, and not as nice as Alan's full suggestion). Signed-off-by: Mark Lord <mlord@xxxxxxxxx> --- --- linux/include/linux/libata.h.orig 2007-04-18 10:30:25.000000000 -0400 +++ linux/include/linux/libata.h 2007-04-18 10:30:28.000000000 -0400 @@ -499,6 +499,7 @@ struct ata_ering ering; int spdn_cnt; unsigned int horkage; /* List of broken features */ + int needs_flush; /* bool: 1==written since last flush */ #ifdef CONFIG_SATA_ACPI /* ACPI objects info */ acpi_handle obj_handle; --- linux/drivers/old/libata-scsi.c 2007-04-17 22:11:12.000000000 -0400 +++ linux/drivers/ata/libata-scsi.c 2007-04-18 10:27:29.000000000 -0400 @@ -2749,18 +2749,20 @@ return atapi_xlat; switch (cmd) { - case READ_6: - case READ_10: - case READ_16: - case WRITE_6: case WRITE_10: case WRITE_16: + dev->needs_flush = 1; + case READ_6: + case READ_10: + case READ_16: return ata_scsi_rw_xlat; case SYNCHRONIZE_CACHE: - if (ata_try_flush_cache(dev)) + if (dev->needs_flush && ata_try_flush_cache(dev)) { return ata_scsi_flush_xlat; + dev->needs_flush = 0; + } break; case VERIFY: - To unsubscribe from this list: send the line "unsubscribe linux-ide" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html