[SCSI] mptfusion: schedule_target_reset from all Reset context
Issue: target reset will be queued to driver's internal queue to get schedule later. When driver add target into internal target_reset queue we will block IOs on those target using scsi midlayer API. Now due to some cause driver is not executing those target_reset list and it is always in block state. Changes: now we are clearing target_reset queue from all other Callback context instead of only DeviceReset context.Now wherever driver is clearing taskmgmt_in_progress flag it is considering target_reset queue cleanup also. Signed-off-by: Kashyap Desai <kashyap.desai@lsi.com> Signed-off-by: James Bottomley <James.Bottomley@suse.de>
This commit is contained in:
committed by
James Bottomley
parent
51106ab530
commit
b68bf096d4
@@ -261,10 +261,16 @@ mptctl_reply(MPT_ADAPTER *ioc, MPT_FRAME_HDR *req, MPT_FRAME_HDR *reply)
|
||||
/* We are done, issue wake up
|
||||
*/
|
||||
if (ioc->ioctl_cmds.status & MPT_MGMT_STATUS_PENDING) {
|
||||
if (req->u.hdr.Function == MPI_FUNCTION_SCSI_TASK_MGMT)
|
||||
if (req->u.hdr.Function == MPI_FUNCTION_SCSI_TASK_MGMT) {
|
||||
mpt_clear_taskmgmt_in_progress_flag(ioc);
|
||||
ioc->ioctl_cmds.status &= ~MPT_MGMT_STATUS_PENDING;
|
||||
complete(&ioc->ioctl_cmds.done);
|
||||
ioc->ioctl_cmds.status &= ~MPT_MGMT_STATUS_PENDING;
|
||||
complete(&ioc->ioctl_cmds.done);
|
||||
if (ioc->bus_type == SAS)
|
||||
ioc->schedule_target_reset(ioc);
|
||||
} else {
|
||||
ioc->ioctl_cmds.status &= ~MPT_MGMT_STATUS_PENDING;
|
||||
complete(&ioc->ioctl_cmds.done);
|
||||
}
|
||||
}
|
||||
|
||||
out_continuation:
|
||||
@@ -298,6 +304,8 @@ mptctl_taskmgmt_reply(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *mr)
|
||||
mpt_clear_taskmgmt_in_progress_flag(ioc);
|
||||
ioc->taskmgmt_cmds.status &= ~MPT_MGMT_STATUS_PENDING;
|
||||
complete(&ioc->taskmgmt_cmds.done);
|
||||
if (ioc->bus_type == SAS)
|
||||
ioc->schedule_target_reset(ioc);
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
|
Reference in New Issue
Block a user