mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-03-22 07:27:12 +08:00
scsi: mpi3mr: Clear reset history on ready and recheck state after timeout
The driver retains reset history even after the IOC has successfully reached the READY state. That leaves stale reset information active during normal operation and can mislead recovery and diagnostics. In addition, if the IOC becomes READY just as the ready timeout loop exits, the driver still follows the failure path and may retry or report failure incorrectly. Clear reset history once READY is confirmed so driver state matches actual IOC status. After the timeout loop, recheck the IOC state and treat READY as success instead of failing. Signed-off-by: Ranjan Kumar <ranjan.kumar@broadcom.com> Link: https://patch.msgid.link/20260225082622.82588-1-ranjan.kumar@broadcom.com Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
committed by
Martin K. Petersen
parent
1ac22c8eae
commit
dbd53975ed
@@ -1618,6 +1618,7 @@ retry_bring_ioc_ready:
|
||||
ioc_info(mrioc,
|
||||
"successfully transitioned to %s state\n",
|
||||
mpi3mr_iocstate_name(ioc_state));
|
||||
mpi3mr_clear_reset_history(mrioc);
|
||||
return 0;
|
||||
}
|
||||
ioc_status = readl(&mrioc->sysif_regs->ioc_status);
|
||||
@@ -1637,6 +1638,15 @@ retry_bring_ioc_ready:
|
||||
elapsed_time_sec = jiffies_to_msecs(jiffies - start_time)/1000;
|
||||
} while (elapsed_time_sec < mrioc->ready_timeout);
|
||||
|
||||
ioc_state = mpi3mr_get_iocstate(mrioc);
|
||||
if (ioc_state == MRIOC_STATE_READY) {
|
||||
ioc_info(mrioc,
|
||||
"successfully transitioned to %s state after %llu seconds\n",
|
||||
mpi3mr_iocstate_name(ioc_state), elapsed_time_sec);
|
||||
mpi3mr_clear_reset_history(mrioc);
|
||||
return 0;
|
||||
}
|
||||
|
||||
out_failed:
|
||||
elapsed_time_sec = jiffies_to_msecs(jiffies - start_time)/1000;
|
||||
if ((retry < 2) && (elapsed_time_sec < (mrioc->ready_timeout - 60))) {
|
||||
|
||||
Reference in New Issue
Block a user