This is a fix for commit: 39c60a0948cc06139e2fbfe084f83cb7e7deae3b sd: fix array cache flushing bug causing performance problems We must notify the block layer via q->flush_flags after temporary change the cache_type to write through. If not, SYNCHRONIZE CACHE command will still be generated. Signed-off-by: Vaughan Cao <vaughan.cao@xxxxxxxxxx> --- drivers/scsi/sd.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c index 6146b9d..366e48b 100644 --- a/drivers/scsi/sd.c +++ b/drivers/scsi/sd.c @@ -144,6 +144,7 @@ sd_store_cache_type(struct device *dev, struct device_attribute *attr, struct scsi_sense_hdr sshdr; static const char temp[] = "temporary "; int len; + unsigned flush; if (sdp->type != TYPE_DISK) /* no cache control on RBC devices; theoretically they @@ -174,6 +175,17 @@ sd_store_cache_type(struct device *dev, struct device_attribute *attr, if (sdkp->cache_override) { sdkp->WCE = wce; sdkp->RCD = rcd; + + /* set flush_flags to notify the block layer */ + flush = 0; + if (sdkp->WCE) { + flush |= REQ_FLUSH; + if (sdkp->DPOFUA) + flush |= REQ_FUA; + } + + blk_queue_flush(sdkp->disk->queue, flush); + return count; } -- 1.9.0 -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html