| From 2bf7dc8443e113844d078fd6541b7f4aa544f92f Mon Sep 17 00:00:00 2001 |
| From: Ching Huang <ching2048@areca.com.tw> |
| Date: Wed, 19 Oct 2016 17:50:26 +0800 |
| Subject: scsi: arcmsr: Send SYNCHRONIZE_CACHE command to firmware |
| |
| From: Ching Huang <ching2048@areca.com.tw> |
| |
| commit 2bf7dc8443e113844d078fd6541b7f4aa544f92f upstream. |
| |
| The arcmsr driver failed to pass SYNCHRONIZE CACHE to controller |
| firmware. Depending on how drive caches are handled internally by |
| controller firmware this could potentially lead to data integrity |
| problems. |
| |
| Ensure that cache flushes are passed to the controller. |
| |
| [mkp: applied by hand and removed unused vars] |
| |
| Signed-off-by: Ching Huang <ching2048@areca.com.tw> |
| Reported-by: Tomas Henzl <thenzl@redhat.com> |
| Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/scsi/arcmsr/arcmsr_hba.c | 9 --------- |
| 1 file changed, 9 deletions(-) |
| |
| --- a/drivers/scsi/arcmsr/arcmsr_hba.c |
| +++ b/drivers/scsi/arcmsr/arcmsr_hba.c |
| @@ -2636,18 +2636,9 @@ static int arcmsr_queue_command_lck(stru |
| struct AdapterControlBlock *acb = (struct AdapterControlBlock *) host->hostdata; |
| struct CommandControlBlock *ccb; |
| int target = cmd->device->id; |
| - int lun = cmd->device->lun; |
| - uint8_t scsicmd = cmd->cmnd[0]; |
| cmd->scsi_done = done; |
| cmd->host_scribble = NULL; |
| cmd->result = 0; |
| - if ((scsicmd == SYNCHRONIZE_CACHE) ||(scsicmd == SEND_DIAGNOSTIC)){ |
| - if(acb->devstate[target][lun] == ARECA_RAID_GONE) { |
| - cmd->result = (DID_NO_CONNECT << 16); |
| - } |
| - cmd->scsi_done(cmd); |
| - return 0; |
| - } |
| if (target == 16) { |
| /* virtual device for iop message transfer */ |
| arcmsr_handle_virtual_command(acb, cmd); |