[SCSI] allow sleeping in ->eh_device_reset_handler()
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
This commit is contained in:
parent
8fa728a268
commit
94d0e7b805
|
@ -973,8 +973,7 @@ Details:
|
||||||
*
|
*
|
||||||
* Returns SUCCESS if command aborted else FAILED
|
* Returns SUCCESS if command aborted else FAILED
|
||||||
*
|
*
|
||||||
* Locks: struct Scsi_Host::host_lock held (with irqsave) on entry
|
* Locks: None held
|
||||||
* and assumed to be held on return.
|
|
||||||
*
|
*
|
||||||
* Calling context: kernel thread
|
* Calling context: kernel thread
|
||||||
*
|
*
|
||||||
|
|
|
@ -2615,7 +2615,7 @@ static int sbp2scsi_abort(struct scsi_cmnd *SCpnt)
|
||||||
/*
|
/*
|
||||||
* Called by scsi stack when something has really gone wrong.
|
* Called by scsi stack when something has really gone wrong.
|
||||||
*/
|
*/
|
||||||
static int sbp2scsi_reset(struct scsi_cmnd *SCpnt)
|
static int __sbp2scsi_reset(struct scsi_cmnd *SCpnt)
|
||||||
{
|
{
|
||||||
struct scsi_id_instance_data *scsi_id =
|
struct scsi_id_instance_data *scsi_id =
|
||||||
(struct scsi_id_instance_data *)SCpnt->device->host->hostdata[0];
|
(struct scsi_id_instance_data *)SCpnt->device->host->hostdata[0];
|
||||||
|
@ -2630,6 +2630,18 @@ static int sbp2scsi_reset(struct scsi_cmnd *SCpnt)
|
||||||
return(SUCCESS);
|
return(SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int sbp2scsi_reset(struct scsi_cmnd *SCpnt)
|
||||||
|
{
|
||||||
|
unsigned long flags;
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
spin_lock_irqsave(SCpnt->device->host->host_lock, flags);
|
||||||
|
rc = __sbp2scsi_reset(SCpnt);
|
||||||
|
spin_unlock_irqrestore(SCpnt->device->host->host_lock, flags);
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
static const char *sbp2scsi_info (struct Scsi_Host *host)
|
static const char *sbp2scsi_info (struct Scsi_Host *host)
|
||||||
{
|
{
|
||||||
return "SCSI emulation for IEEE-1394 SBP-2 Devices";
|
return "SCSI emulation for IEEE-1394 SBP-2 Devices";
|
||||||
|
|
|
@ -1801,7 +1801,6 @@ int
|
||||||
mptscsih_dev_reset(struct scsi_cmnd * SCpnt)
|
mptscsih_dev_reset(struct scsi_cmnd * SCpnt)
|
||||||
{
|
{
|
||||||
MPT_SCSI_HOST *hd;
|
MPT_SCSI_HOST *hd;
|
||||||
spinlock_t *host_lock = SCpnt->device->host->host_lock;
|
|
||||||
|
|
||||||
/* If we can't locate our host adapter structure, return FAILED status.
|
/* If we can't locate our host adapter structure, return FAILED status.
|
||||||
*/
|
*/
|
||||||
|
@ -1818,7 +1817,6 @@ mptscsih_dev_reset(struct scsi_cmnd * SCpnt)
|
||||||
printk(KERN_WARNING MYNAM ": %s: >> Attempting target reset! (sc=%p)\n",
|
printk(KERN_WARNING MYNAM ": %s: >> Attempting target reset! (sc=%p)\n",
|
||||||
hd->ioc->name, SCpnt);
|
hd->ioc->name, SCpnt);
|
||||||
|
|
||||||
spin_unlock_irq(host_lock);
|
|
||||||
if (mptscsih_TMHandler(hd, MPI_SCSITASKMGMT_TASKTYPE_TARGET_RESET,
|
if (mptscsih_TMHandler(hd, MPI_SCSITASKMGMT_TASKTYPE_TARGET_RESET,
|
||||||
SCpnt->device->channel, SCpnt->device->id,
|
SCpnt->device->channel, SCpnt->device->id,
|
||||||
0, 0, 5 /* 5 second timeout */)
|
0, 0, 5 /* 5 second timeout */)
|
||||||
|
@ -1830,12 +1828,10 @@ mptscsih_dev_reset(struct scsi_cmnd * SCpnt)
|
||||||
hd->ioc->name, SCpnt);
|
hd->ioc->name, SCpnt);
|
||||||
hd->tmPending = 0;
|
hd->tmPending = 0;
|
||||||
hd->tmState = TM_STATE_NONE;
|
hd->tmState = TM_STATE_NONE;
|
||||||
spin_lock_irq(host_lock);
|
|
||||||
return FAILED;
|
return FAILED;
|
||||||
}
|
}
|
||||||
spin_lock_irq(host_lock);
|
|
||||||
return SUCCESS;
|
|
||||||
|
|
||||||
|
return SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
|
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
|
||||||
|
|
|
@ -636,8 +636,6 @@ zfcp_scsi_eh_device_reset_handler(struct scsi_cmnd *scpnt)
|
||||||
struct zfcp_unit *unit = (struct zfcp_unit *) scpnt->device->hostdata;
|
struct zfcp_unit *unit = (struct zfcp_unit *) scpnt->device->hostdata;
|
||||||
struct Scsi_Host *scsi_host = scpnt->device->host;
|
struct Scsi_Host *scsi_host = scpnt->device->host;
|
||||||
|
|
||||||
spin_unlock_irq(scsi_host->host_lock);
|
|
||||||
|
|
||||||
if (!unit) {
|
if (!unit) {
|
||||||
ZFCP_LOG_NORMAL("bug: Tried reset for nonexistent unit\n");
|
ZFCP_LOG_NORMAL("bug: Tried reset for nonexistent unit\n");
|
||||||
retval = SUCCESS;
|
retval = SUCCESS;
|
||||||
|
@ -680,7 +678,6 @@ zfcp_scsi_eh_device_reset_handler(struct scsi_cmnd *scpnt)
|
||||||
retval = SUCCESS;
|
retval = SUCCESS;
|
||||||
}
|
}
|
||||||
out:
|
out:
|
||||||
spin_lock_irq(scsi_host->host_lock);
|
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1225,8 +1225,6 @@ static int aha152x_device_reset(Scsi_Cmnd * SCpnt)
|
||||||
}
|
}
|
||||||
|
|
||||||
DO_UNLOCK(flags);
|
DO_UNLOCK(flags);
|
||||||
|
|
||||||
spin_lock_irq(shpnt->host_lock);
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1511,17 +1511,17 @@ ahd_linux_dev_reset(Scsi_Cmnd *cmd)
|
||||||
ahd_name(ahd), cmd->device->channel, cmd->device->id,
|
ahd_name(ahd), cmd->device->channel, cmd->device->id,
|
||||||
cmd->device->lun, cmd);
|
cmd->device->lun, cmd);
|
||||||
#endif
|
#endif
|
||||||
ahd_midlayer_entrypoint_lock(ahd, &s);
|
ahd_lock(ahd, &s);
|
||||||
|
|
||||||
dev = ahd_linux_get_device(ahd, cmd->device->channel, cmd->device->id,
|
dev = ahd_linux_get_device(ahd, cmd->device->channel, cmd->device->id,
|
||||||
cmd->device->lun, /*alloc*/FALSE);
|
cmd->device->lun, /*alloc*/FALSE);
|
||||||
if (dev == NULL) {
|
if (dev == NULL) {
|
||||||
ahd_midlayer_entrypoint_unlock(ahd, &s);
|
ahd_unlock(ahd, &s);
|
||||||
kfree(recovery_cmd);
|
kfree(recovery_cmd);
|
||||||
return (FAILED);
|
return (FAILED);
|
||||||
}
|
}
|
||||||
if ((scb = ahd_get_scb(ahd, AHD_NEVER_COL_IDX)) == NULL) {
|
if ((scb = ahd_get_scb(ahd, AHD_NEVER_COL_IDX)) == NULL) {
|
||||||
ahd_midlayer_entrypoint_unlock(ahd, &s);
|
ahd_unlock(ahd, &s);
|
||||||
kfree(recovery_cmd);
|
kfree(recovery_cmd);
|
||||||
return (FAILED);
|
return (FAILED);
|
||||||
}
|
}
|
||||||
|
@ -1570,7 +1570,7 @@ ahd_linux_dev_reset(Scsi_Cmnd *cmd)
|
||||||
spin_lock_irq(&ahd->platform_data->spin_lock);
|
spin_lock_irq(&ahd->platform_data->spin_lock);
|
||||||
ahd_schedule_runq(ahd);
|
ahd_schedule_runq(ahd);
|
||||||
ahd_linux_run_complete_queue(ahd);
|
ahd_linux_run_complete_queue(ahd);
|
||||||
ahd_midlayer_entrypoint_unlock(ahd, &s);
|
ahd_unlock(ahd, &s);
|
||||||
printf("%s: Device reset returning 0x%x\n", ahd_name(ahd), retval);
|
printf("%s: Device reset returning 0x%x\n", ahd_name(ahd), retval);
|
||||||
return (retval);
|
return (retval);
|
||||||
}
|
}
|
||||||
|
|
|
@ -10358,7 +10358,7 @@ aic7xxx_queue(Scsi_Cmnd *cmd, void (*fn)(Scsi_Cmnd *))
|
||||||
* Returns an enumerated type that indicates the status of the operation.
|
* Returns an enumerated type that indicates the status of the operation.
|
||||||
*-F*************************************************************************/
|
*-F*************************************************************************/
|
||||||
static int
|
static int
|
||||||
aic7xxx_bus_device_reset(Scsi_Cmnd *cmd)
|
__aic7xxx_bus_device_reset(Scsi_Cmnd *cmd)
|
||||||
{
|
{
|
||||||
struct aic7xxx_host *p;
|
struct aic7xxx_host *p;
|
||||||
struct aic7xxx_scb *scb;
|
struct aic7xxx_scb *scb;
|
||||||
|
@ -10551,6 +10551,18 @@ aic7xxx_bus_device_reset(Scsi_Cmnd *cmd)
|
||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
aic7xxx_bus_device_reset(Scsi_Cmnd *cmd)
|
||||||
|
{
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
spin_lock_irq(cmd->device->host->host_lock);
|
||||||
|
rc = __aic7xxx_bus_device_reset(cmd);
|
||||||
|
spin_unlock_irq(cmd->device->host->host_lock);
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*+F*************************************************************************
|
/*+F*************************************************************************
|
||||||
* Function:
|
* Function:
|
||||||
|
|
|
@ -976,9 +976,7 @@ static int ibmvscsi_eh_device_reset_handler(struct scsi_cmnd *cmd)
|
||||||
return FAILED;
|
return FAILED;
|
||||||
}
|
}
|
||||||
|
|
||||||
spin_unlock_irq(hostdata->host->host_lock);
|
|
||||||
wait_for_completion(&evt->comp);
|
wait_for_completion(&evt->comp);
|
||||||
spin_lock_irq(hostdata->host->host_lock);
|
|
||||||
|
|
||||||
/* make sure we got a good response */
|
/* make sure we got a good response */
|
||||||
if (unlikely(srp_rsp.srp.generic.type != SRP_RSP_TYPE)) {
|
if (unlikely(srp_rsp.srp.generic.type != SRP_RSP_TYPE)) {
|
||||||
|
|
|
@ -2916,7 +2916,7 @@ static int ipr_eh_host_reset(struct scsi_cmnd * scsi_cmd)
|
||||||
* Return value:
|
* Return value:
|
||||||
* SUCCESS / FAILED
|
* SUCCESS / FAILED
|
||||||
**/
|
**/
|
||||||
static int ipr_eh_dev_reset(struct scsi_cmnd * scsi_cmd)
|
static int __ipr_eh_dev_reset(struct scsi_cmnd * scsi_cmd)
|
||||||
{
|
{
|
||||||
struct ipr_cmnd *ipr_cmd;
|
struct ipr_cmnd *ipr_cmd;
|
||||||
struct ipr_ioa_cfg *ioa_cfg;
|
struct ipr_ioa_cfg *ioa_cfg;
|
||||||
|
@ -2970,6 +2970,17 @@ static int ipr_eh_dev_reset(struct scsi_cmnd * scsi_cmd)
|
||||||
return (IPR_IOASC_SENSE_KEY(ioasc) ? FAILED : SUCCESS);
|
return (IPR_IOASC_SENSE_KEY(ioasc) ? FAILED : SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int ipr_eh_dev_reset(struct scsi_cmnd * cmd)
|
||||||
|
{
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
spin_lock_irq(cmd->device->host->host_lock);
|
||||||
|
rc = __ipr_eh_dev_reset(cmd);
|
||||||
|
spin_unlock_irq(cmd->device->host->host_lock);
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ipr_bus_reset_done - Op done function for bus reset.
|
* ipr_bus_reset_done - Op done function for bus reset.
|
||||||
* @ipr_cmd: ipr command struct
|
* @ipr_cmd: ipr command struct
|
||||||
|
|
|
@ -928,7 +928,7 @@ lpfc_abort_handler(struct scsi_cmnd *cmnd)
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
lpfc_reset_lun_handler(struct scsi_cmnd *cmnd)
|
__lpfc_reset_lun_handler(struct scsi_cmnd *cmnd)
|
||||||
{
|
{
|
||||||
struct Scsi_Host *shost = cmnd->device->host;
|
struct Scsi_Host *shost = cmnd->device->host;
|
||||||
struct lpfc_hba *phba = (struct lpfc_hba *)shost->hostdata[0];
|
struct lpfc_hba *phba = (struct lpfc_hba *)shost->hostdata[0];
|
||||||
|
@ -1040,6 +1040,16 @@ out:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
lpfc_reset_lun_handler(struct scsi_cmnd *cmnd)
|
||||||
|
{
|
||||||
|
int rc;
|
||||||
|
spin_lock_irq(cmnd->device->host->host_lock);
|
||||||
|
rc = __lpfc_reset_lun_handler(cmnd);
|
||||||
|
spin_unlock_irq(cmnd->device->host->host_lock);
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Note: midlayer calls this function with the host_lock held
|
* Note: midlayer calls this function with the host_lock held
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1938,7 +1938,7 @@ megaraid_abort(Scsi_Cmnd *cmd)
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
megaraid_reset(Scsi_Cmnd *cmd)
|
__megaraid_reset(Scsi_Cmnd *cmd)
|
||||||
{
|
{
|
||||||
adapter_t *adapter;
|
adapter_t *adapter;
|
||||||
megacmd_t mc;
|
megacmd_t mc;
|
||||||
|
@ -1972,6 +1972,18 @@ megaraid_reset(Scsi_Cmnd *cmd)
|
||||||
return rval;
|
return rval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
megaraid_reset(Scsi_Cmnd *cmd)
|
||||||
|
{
|
||||||
|
adapter = (adapter_t *)cmd->device->host->hostdata;
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
spin_lock_irq(&adapter->lock);
|
||||||
|
rc = __megaraid_reset(cmd);
|
||||||
|
spin_unlock_irq(&adapter->lock);
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -2726,7 +2726,7 @@ megaraid_abort_handler(struct scsi_cmnd *scp)
|
||||||
* host
|
* host
|
||||||
**/
|
**/
|
||||||
static int
|
static int
|
||||||
megaraid_reset_handler(struct scsi_cmnd *scp)
|
__megaraid_reset_handler(struct scsi_cmnd *scp)
|
||||||
{
|
{
|
||||||
adapter_t *adapter;
|
adapter_t *adapter;
|
||||||
scb_t *scb;
|
scb_t *scb;
|
||||||
|
@ -2847,6 +2847,18 @@ megaraid_reset_handler(struct scsi_cmnd *scp)
|
||||||
return rval;
|
return rval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
megaraid_reset_handler(struct scsi_cmnd *cmd)
|
||||||
|
{
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
spin_lock_irq(cmd->device->host->host_lock);
|
||||||
|
rc = __megaraid_reset_handler(cmd);
|
||||||
|
spin_unlock_irq(cmd->device->host->host_lock);
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* START: internal commands library
|
* START: internal commands library
|
||||||
|
|
|
@ -1114,7 +1114,13 @@ qla1280_eh_abort(struct scsi_cmnd * cmd)
|
||||||
static int
|
static int
|
||||||
qla1280_eh_device_reset(struct scsi_cmnd *cmd)
|
qla1280_eh_device_reset(struct scsi_cmnd *cmd)
|
||||||
{
|
{
|
||||||
return qla1280_error_action(cmd, DEVICE_RESET);
|
int rc;
|
||||||
|
|
||||||
|
spin_lock_irq(cmd->device->host->host_lock);
|
||||||
|
rc = qla1280_error_action(cmd, DEVICE_RESET);
|
||||||
|
spin_unlock_irq(cmd->device->host->host_lock);
|
||||||
|
|
||||||
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
|
|
|
@ -613,12 +613,8 @@ qla2xxx_eh_device_reset(struct scsi_cmnd *cmd)
|
||||||
qla_printk(KERN_INFO, ha,
|
qla_printk(KERN_INFO, ha,
|
||||||
"scsi(%ld:%d:%d): DEVICE RESET ISSUED.\n", ha->host_no, id, lun);
|
"scsi(%ld:%d:%d): DEVICE RESET ISSUED.\n", ha->host_no, id, lun);
|
||||||
|
|
||||||
spin_unlock_irq(ha->host->host_lock);
|
if (qla2x00_wait_for_hba_online(ha) != QLA_SUCCESS)
|
||||||
|
|
||||||
if (qla2x00_wait_for_hba_online(ha) != QLA_SUCCESS) {
|
|
||||||
spin_lock_irq(ha->host->host_lock);
|
|
||||||
goto eh_dev_reset_done;
|
goto eh_dev_reset_done;
|
||||||
}
|
|
||||||
|
|
||||||
if (qla2x00_wait_for_loop_ready(ha) == QLA_SUCCESS) {
|
if (qla2x00_wait_for_loop_ready(ha) == QLA_SUCCESS) {
|
||||||
if (qla2x00_device_reset(ha, fcport) == 0)
|
if (qla2x00_device_reset(ha, fcport) == 0)
|
||||||
|
@ -669,8 +665,6 @@ qla2xxx_eh_device_reset(struct scsi_cmnd *cmd)
|
||||||
"scsi(%ld:%d:%d): DEVICE RESET SUCCEEDED.\n", ha->host_no, id, lun);
|
"scsi(%ld:%d:%d): DEVICE RESET SUCCEEDED.\n", ha->host_no, id, lun);
|
||||||
|
|
||||||
eh_dev_reset_done:
|
eh_dev_reset_done:
|
||||||
spin_lock_irq(ha->host->host_lock);
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -857,17 +857,14 @@ static int scsi_eh_abort_cmds(struct list_head *work_q,
|
||||||
**/
|
**/
|
||||||
static int scsi_try_bus_device_reset(struct scsi_cmnd *scmd)
|
static int scsi_try_bus_device_reset(struct scsi_cmnd *scmd)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
int rtn;
|
||||||
int rtn = FAILED;
|
|
||||||
|
|
||||||
if (!scmd->device->host->hostt->eh_device_reset_handler)
|
if (!scmd->device->host->hostt->eh_device_reset_handler)
|
||||||
return rtn;
|
return FAILED;
|
||||||
|
|
||||||
scmd->owner = SCSI_OWNER_LOWLEVEL;
|
scmd->owner = SCSI_OWNER_LOWLEVEL;
|
||||||
|
|
||||||
spin_lock_irqsave(scmd->device->host->host_lock, flags);
|
|
||||||
rtn = scmd->device->host->hostt->eh_device_reset_handler(scmd);
|
rtn = scmd->device->host->hostt->eh_device_reset_handler(scmd);
|
||||||
spin_unlock_irqrestore(scmd->device->host->host_lock, flags);
|
|
||||||
|
|
||||||
if (rtn == SUCCESS) {
|
if (rtn == SUCCESS) {
|
||||||
scmd->device->was_reset = 1;
|
scmd->device->was_reset = 1;
|
||||||
|
|
|
@ -867,7 +867,13 @@ static int sym53c8xx_eh_abort_handler(struct scsi_cmnd *cmd)
|
||||||
|
|
||||||
static int sym53c8xx_eh_device_reset_handler(struct scsi_cmnd *cmd)
|
static int sym53c8xx_eh_device_reset_handler(struct scsi_cmnd *cmd)
|
||||||
{
|
{
|
||||||
return sym_eh_handler(SYM_EH_DEVICE_RESET, "DEVICE RESET", cmd);
|
int rc;
|
||||||
|
|
||||||
|
spin_lock_irq(cmd->device->host->host_lock);
|
||||||
|
rc = sym_eh_handler(SYM_EH_DEVICE_RESET, "DEVICE RESET", cmd);
|
||||||
|
spin_unlock_irq(cmd->device->host->host_lock);
|
||||||
|
|
||||||
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int sym53c8xx_eh_bus_reset_handler(struct scsi_cmnd *cmd)
|
static int sym53c8xx_eh_bus_reset_handler(struct scsi_cmnd *cmd)
|
||||||
|
|
|
@ -253,8 +253,6 @@ static int device_reset(struct scsi_cmnd *srb)
|
||||||
|
|
||||||
US_DEBUGP("%s called\n", __FUNCTION__);
|
US_DEBUGP("%s called\n", __FUNCTION__);
|
||||||
|
|
||||||
scsi_unlock(us_to_host(us));
|
|
||||||
|
|
||||||
/* lock the device pointers and do the reset */
|
/* lock the device pointers and do the reset */
|
||||||
down(&(us->dev_semaphore));
|
down(&(us->dev_semaphore));
|
||||||
if (test_bit(US_FLIDX_DISCONNECTING, &us->flags)) {
|
if (test_bit(US_FLIDX_DISCONNECTING, &us->flags)) {
|
||||||
|
@ -264,8 +262,6 @@ static int device_reset(struct scsi_cmnd *srb)
|
||||||
result = us->transport_reset(us);
|
result = us->transport_reset(us);
|
||||||
up(&(us->dev_semaphore));
|
up(&(us->dev_semaphore));
|
||||||
|
|
||||||
/* lock the host for the return */
|
|
||||||
scsi_lock(us_to_host(us));
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue