lkml.org 
[lkml]   [2019]   [Aug]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.2 109/144] scsi: scsi_dh_alua: always use a 2 second delay before retrying RTPG
    Date
    [ Upstream commit 20122994e38aef0ae50555884d287adde6641c94 ]

    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>
    ---
    drivers/scsi/device_handler/scsi_dh_alua.c | 7 ++++++-
    1 file changed, 6 insertions(+), 1 deletion(-)

    diff --git a/drivers/scsi/device_handler/scsi_dh_alua.c b/drivers/scsi/device_handler/scsi_dh_alua.c
    index f0066f8a17864..4971104b1817b 100644
    --- a/drivers/scsi/device_handler/scsi_dh_alua.c
    +++ b/drivers/scsi/device_handler/scsi_dh_alua.c
    @@ -40,6 +40,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
    @@ -682,7 +683,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;
    @@ -807,6 +808,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);
    @@ -818,6 +821,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,
    --
    2.20.1


    \
     
     \ /
      Last update: 2019-08-14 19:26    [W:7.734 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site