SCSI fixes on 20161105
Two more important data integrity fixes related to RAID device drivers which wrongly throw away the SYNCHRONIZE CACHE command in the non-RAID path and a memory leak in the scsi_debug driver Signed-off-by: James E.J. Bottomley <jejb@linux.vnet.ibm.com> -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQIcBAABAgAGBQJYHd5nAAoJEAVr7HOZEZN4BeIP/RmOchL8Xdm2GObAJYeeC5Jv 7jYqcjsV3LHz8ubebRk/GmrcXVmF52VJ0nc6IgcoAhG44kaY99kapah7wDioMci4 DC1m9twxQMfclEjk+8nL59iC4HR+A5TlMRnXf3XRTQ399w9KxGe1jGS2/OIOYpPd goeQdSfSLxQX87c4eZldotQDY/9NUDe/O0Af3JboX5ySCDnqKiu+xqhE+kXKY7oY bfsBurF875bER63YCeRIjmc/iO/klYGcm/7wsEJfxDZerY2/Sr6LaAd+bcComWX2 YAcoTwOGHwbjhKUbkHGjsQIaT+VFNOCDfXF1Bm37WTF5/AFiBfHRgQEClXm5I6kD aRfcwfXeb6jDvUujCksIngSCeQc6/3np9gvmBV6hjKEmn07ny8j7vsDbI2gUL6rs IVzMrFUw8O/InyooJD9CubnV7cgKnU+3/WIw3J92UudiEDRJSpCiBszoKL7JnOeA aAeUl3hhQBr50w0nLCFcm65PnHjCY/4VuJ7ZXF6Z1e6y+yd81zrbzHYC4rb9sFsa 3KJ4UgIajhC0t5FxDbwFfOj/b0WhLzqJeMrOnTyI+mrjpHWexNW+iIMw6qRi6yv9 YuL9XvaaRblnmxOEma3A3xiTCQ6mFl4yYcMa4ppBlDgbTZSJff4kRB+Nma/qw1+v VrKlOiKXC5wYp8jPlRwT =xrlP -----END PGP SIGNATURE----- Merge tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi Pull SCSI fixes from James Bottomley: "Two more important data integrity fixes related to RAID device drivers which wrongly throw away the SYNCHRONIZE CACHE command in the non-RAID path and a memory leak in the scsi_debug driver" * tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi: scsi: arcmsr: Send SYNCHRONIZE_CACHE command to firmware scsi: scsi_debug: Fix memory leak if LBP enabled and module is unloaded scsi: megaraid_sas: Fix data integrity failure for JBOD (passthrough) devices
This commit is contained in:
commit
e12d8d512f
|
@ -2636,18 +2636,9 @@ static int arcmsr_queue_command_lck(struct scsi_cmnd *cmd,
|
||||||
struct AdapterControlBlock *acb = (struct AdapterControlBlock *) host->hostdata;
|
struct AdapterControlBlock *acb = (struct AdapterControlBlock *) host->hostdata;
|
||||||
struct CommandControlBlock *ccb;
|
struct CommandControlBlock *ccb;
|
||||||
int target = cmd->device->id;
|
int target = cmd->device->id;
|
||||||
int lun = cmd->device->lun;
|
|
||||||
uint8_t scsicmd = cmd->cmnd[0];
|
|
||||||
cmd->scsi_done = done;
|
cmd->scsi_done = done;
|
||||||
cmd->host_scribble = NULL;
|
cmd->host_scribble = NULL;
|
||||||
cmd->result = 0;
|
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) {
|
if (target == 16) {
|
||||||
/* virtual device for iop message transfer */
|
/* virtual device for iop message transfer */
|
||||||
arcmsr_handle_virtual_command(acb, cmd);
|
arcmsr_handle_virtual_command(acb, cmd);
|
||||||
|
|
|
@ -1700,16 +1700,13 @@ megasas_queue_command(struct Scsi_Host *shost, struct scsi_cmnd *scmd)
|
||||||
goto out_done;
|
goto out_done;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (scmd->cmnd[0]) {
|
/*
|
||||||
case SYNCHRONIZE_CACHE:
|
* FW takes care of flush cache on its own for Virtual Disk.
|
||||||
/*
|
* No need to send it down for VD. For JBOD send SYNCHRONIZE_CACHE to FW.
|
||||||
* FW takes care of flush cache on its own
|
*/
|
||||||
* No need to send it down
|
if ((scmd->cmnd[0] == SYNCHRONIZE_CACHE) && MEGASAS_IS_LOGICAL(scmd)) {
|
||||||
*/
|
|
||||||
scmd->result = DID_OK << 16;
|
scmd->result = DID_OK << 16;
|
||||||
goto out_done;
|
goto out_done;
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return instance->instancet->build_and_issue_cmd(instance, scmd);
|
return instance->instancet->build_and_issue_cmd(instance, scmd);
|
||||||
|
|
|
@ -5134,6 +5134,7 @@ static void __exit scsi_debug_exit(void)
|
||||||
bus_unregister(&pseudo_lld_bus);
|
bus_unregister(&pseudo_lld_bus);
|
||||||
root_device_unregister(pseudo_primary);
|
root_device_unregister(pseudo_primary);
|
||||||
|
|
||||||
|
vfree(map_storep);
|
||||||
vfree(dif_storep);
|
vfree(dif_storep);
|
||||||
vfree(fake_storep);
|
vfree(fake_storep);
|
||||||
kfree(sdebug_q_arr);
|
kfree(sdebug_q_arr);
|
||||||
|
|
Loading…
Reference in New Issue