forked from Minki/linux
scsi: smartpqi: Add retries for device reset
Reviewed-by: Ajish Koshy <ajish.koshy@microsemi.com> Reviewed-by: Murthy Bhat <murthy.bhat@microsemi.com> Reviewed-by: Justin Lindley <justin.lindley@microsemi.com> Reviewed-by: Scott Benesh <scott.benesh@microsemi.com> Reviewed-by: Dave Carroll <david.carroll@microsemi.com> Reviewed-by: Scott Teel <scott.teel@microsemi.com> Reviewed-by: Kevin Barnett <kevin.barnett@microsemi.com> Signed-off-by: Mahesh Rajashekhara <mahesh.rajashekhara@microsemi.com> Signed-off-by: Don Brace <don.brace@microsemi.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
b212c2510d
commit
3406384b76
@ -587,6 +587,7 @@ typedef u32 pqi_index_t;
|
||||
#define SOP_TASK_ATTRIBUTE_ACA 4
|
||||
|
||||
#define SOP_TMF_COMPLETE 0x0
|
||||
#define SOP_TMF_REJECTED 0x4
|
||||
#define SOP_TMF_FUNCTION_SUCCEEDED 0x8
|
||||
|
||||
/* additional CDB bytes usage field codes */
|
||||
|
@ -2665,6 +2665,9 @@ static int pqi_interpret_task_management_response(
|
||||
case SOP_TMF_FUNCTION_SUCCEEDED:
|
||||
rc = 0;
|
||||
break;
|
||||
case SOP_TMF_REJECTED:
|
||||
rc = -EAGAIN;
|
||||
break;
|
||||
default:
|
||||
rc = -EIO;
|
||||
break;
|
||||
@ -5218,14 +5221,23 @@ static int pqi_lun_reset(struct pqi_ctrl_info *ctrl_info,
|
||||
return rc;
|
||||
}
|
||||
|
||||
#define PQI_LUN_RESET_RETRIES 3
|
||||
#define PQI_LUN_RESET_RETRY_INTERVAL_MSECS 10000
|
||||
/* Performs a reset at the LUN level. */
|
||||
|
||||
static int pqi_device_reset(struct pqi_ctrl_info *ctrl_info,
|
||||
struct pqi_scsi_dev *device)
|
||||
{
|
||||
int rc;
|
||||
unsigned int retries;
|
||||
|
||||
rc = pqi_lun_reset(ctrl_info, device);
|
||||
for (retries = 0;;) {
|
||||
rc = pqi_lun_reset(ctrl_info, device);
|
||||
if (rc != -EAGAIN ||
|
||||
++retries > PQI_LUN_RESET_RETRIES)
|
||||
break;
|
||||
msleep(PQI_LUN_RESET_RETRY_INTERVAL_MSECS);
|
||||
}
|
||||
if (rc == 0)
|
||||
rc = pqi_device_wait_for_pending_io(ctrl_info, device);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user