[SCSI] qla2xxx: Fix to allow to reset devices using sg interface (sg_reset).
Currently it is impossible to reset provided by Qlogic QLA2xxx driver SCSI devices externally using corresponding sg devices, particularly via sg_reset utility, because qla2xxx driver in qla2xxx_eh_device_reset() function checks if the input scsi_cmnd has its private data (CMD_SP()) attached. Then the found pointer isn't used anywhere inside of qla2xxx_eh_device_reset(). If the RESET request comes from sg device, it doesn't have such private data. The attached patch removes check for non-NULL CMD_SP() from qla2xxx_eh_device_reset(), hence allows to reset QLA2xxx's devices using corresponding sg devices. AV: change applies to bus/host reset handlers as well. Signed-off-by: Vladislav Bolkhovitin <vst@vlnb.net> Signed-off-by: Andrew Vasquez <andrew.vasquez@qlogic.com> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
This commit is contained in:
committed by
James Bottomley
parent
45ebeb5605
commit
b0328beed0
@@ -744,7 +744,6 @@ qla2xxx_eh_device_reset(struct scsi_cmnd *cmd)
|
|||||||
{
|
{
|
||||||
scsi_qla_host_t *ha = to_qla_host(cmd->device->host);
|
scsi_qla_host_t *ha = to_qla_host(cmd->device->host);
|
||||||
fc_port_t *fcport = (struct fc_port *) cmd->device->hostdata;
|
fc_port_t *fcport = (struct fc_port *) cmd->device->hostdata;
|
||||||
srb_t *sp;
|
|
||||||
int ret;
|
int ret;
|
||||||
unsigned int id, lun;
|
unsigned int id, lun;
|
||||||
unsigned long serial;
|
unsigned long serial;
|
||||||
@@ -755,8 +754,7 @@ qla2xxx_eh_device_reset(struct scsi_cmnd *cmd)
|
|||||||
lun = cmd->device->lun;
|
lun = cmd->device->lun;
|
||||||
serial = cmd->serial_number;
|
serial = cmd->serial_number;
|
||||||
|
|
||||||
sp = (srb_t *) CMD_SP(cmd);
|
if (!fcport)
|
||||||
if (!sp || !fcport)
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
qla_printk(KERN_INFO, ha,
|
qla_printk(KERN_INFO, ha,
|
||||||
@@ -875,7 +873,6 @@ qla2xxx_eh_bus_reset(struct scsi_cmnd *cmd)
|
|||||||
{
|
{
|
||||||
scsi_qla_host_t *ha = to_qla_host(cmd->device->host);
|
scsi_qla_host_t *ha = to_qla_host(cmd->device->host);
|
||||||
fc_port_t *fcport = (struct fc_port *) cmd->device->hostdata;
|
fc_port_t *fcport = (struct fc_port *) cmd->device->hostdata;
|
||||||
srb_t *sp;
|
|
||||||
int ret;
|
int ret;
|
||||||
unsigned int id, lun;
|
unsigned int id, lun;
|
||||||
unsigned long serial;
|
unsigned long serial;
|
||||||
@@ -886,8 +883,7 @@ qla2xxx_eh_bus_reset(struct scsi_cmnd *cmd)
|
|||||||
lun = cmd->device->lun;
|
lun = cmd->device->lun;
|
||||||
serial = cmd->serial_number;
|
serial = cmd->serial_number;
|
||||||
|
|
||||||
sp = (srb_t *) CMD_SP(cmd);
|
if (!fcport)
|
||||||
if (!sp || !fcport)
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
qla_printk(KERN_INFO, ha,
|
qla_printk(KERN_INFO, ha,
|
||||||
@@ -936,7 +932,6 @@ qla2xxx_eh_host_reset(struct scsi_cmnd *cmd)
|
|||||||
{
|
{
|
||||||
scsi_qla_host_t *ha = to_qla_host(cmd->device->host);
|
scsi_qla_host_t *ha = to_qla_host(cmd->device->host);
|
||||||
fc_port_t *fcport = (struct fc_port *) cmd->device->hostdata;
|
fc_port_t *fcport = (struct fc_port *) cmd->device->hostdata;
|
||||||
srb_t *sp;
|
|
||||||
int ret;
|
int ret;
|
||||||
unsigned int id, lun;
|
unsigned int id, lun;
|
||||||
unsigned long serial;
|
unsigned long serial;
|
||||||
@@ -947,8 +942,7 @@ qla2xxx_eh_host_reset(struct scsi_cmnd *cmd)
|
|||||||
lun = cmd->device->lun;
|
lun = cmd->device->lun;
|
||||||
serial = cmd->serial_number;
|
serial = cmd->serial_number;
|
||||||
|
|
||||||
sp = (srb_t *) CMD_SP(cmd);
|
if (!fcport)
|
||||||
if (!sp || !fcport)
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
qla_printk(KERN_INFO, ha,
|
qla_printk(KERN_INFO, ha,
|
||||||
|
Reference in New Issue
Block a user