mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-01 22:54:01 +00:00
scsi: scsi_dh_alua: always use a 2 second delay before retrying RTPG
[ Upstream commit 20122994e3
]
Retrying immediately after we've received a 'transitioning' sense code is
pretty much pointless, we should always use a delay before retrying. So
ensure the default delay is applied before retrying.
Signed-off-by: Hannes Reinecke <hare@suse.com>
Tested-by: Zhangguanghui <zhang.guanghui@h3c.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
b620c6d577
commit
cdd92ebe29
1 changed files with 6 additions and 1 deletions
|
@ -54,6 +54,7 @@
|
|||
#define ALUA_FAILOVER_TIMEOUT 60
|
||||
#define ALUA_FAILOVER_RETRIES 5
|
||||
#define ALUA_RTPG_DELAY_MSECS 5
|
||||
#define ALUA_RTPG_RETRY_DELAY 2
|
||||
|
||||
/* device handler flags */
|
||||
#define ALUA_OPTIMIZE_STPG 0x01
|
||||
|
@ -696,7 +697,7 @@ static int alua_rtpg(struct scsi_device *sdev, struct alua_port_group *pg)
|
|||
case SCSI_ACCESS_STATE_TRANSITIONING:
|
||||
if (time_before(jiffies, pg->expiry)) {
|
||||
/* State transition, retry */
|
||||
pg->interval = 2;
|
||||
pg->interval = ALUA_RTPG_RETRY_DELAY;
|
||||
err = SCSI_DH_RETRY;
|
||||
} else {
|
||||
struct alua_dh_data *h;
|
||||
|
@ -821,6 +822,8 @@ static void alua_rtpg_work(struct work_struct *work)
|
|||
spin_lock_irqsave(&pg->lock, flags);
|
||||
pg->flags &= ~ALUA_PG_RUNNING;
|
||||
pg->flags |= ALUA_PG_RUN_RTPG;
|
||||
if (!pg->interval)
|
||||
pg->interval = ALUA_RTPG_RETRY_DELAY;
|
||||
spin_unlock_irqrestore(&pg->lock, flags);
|
||||
queue_delayed_work(kaluad_wq, &pg->rtpg_work,
|
||||
pg->interval * HZ);
|
||||
|
@ -832,6 +835,8 @@ static void alua_rtpg_work(struct work_struct *work)
|
|||
spin_lock_irqsave(&pg->lock, flags);
|
||||
if (err == SCSI_DH_RETRY || pg->flags & ALUA_PG_RUN_RTPG) {
|
||||
pg->flags &= ~ALUA_PG_RUNNING;
|
||||
if (!pg->interval && !(pg->flags & ALUA_PG_RUN_RTPG))
|
||||
pg->interval = ALUA_RTPG_RETRY_DELAY;
|
||||
pg->flags |= ALUA_PG_RUN_RTPG;
|
||||
spin_unlock_irqrestore(&pg->lock, flags);
|
||||
queue_delayed_work(kaluad_wq, &pg->rtpg_work,
|
||||
|
|
Loading…
Reference in a new issue