lkml.org 
[lkml]   [2016]   [Oct]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.4 024/112] dm mpath: check if paths request_queue is dying in activate_path()
    Date
    4.4-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Mike Snitzer <snitzer@redhat.com>

    commit f10e06b744074824fb8ec7066bc03ecc90918f5b upstream.

    If pg_init_retries is set and a request is queued against a multipath
    device with all underlying block device request_queues in the "dying"
    state then an infinite loop is triggered because activate_path() never
    succeeds and hence never calls pg_init_done().

    This change avoids that device removal triggers an infinite loop by
    failing the activate_path() which causes the "dying" path to be failed.

    Reported-by: Bart Van Assche <bart.vanassche@sandisk.com>
    Signed-off-by: Mike Snitzer <snitzer@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/md/dm-mpath.c | 6 +++---
    1 file changed, 3 insertions(+), 3 deletions(-)

    --- a/drivers/md/dm-mpath.c
    +++ b/drivers/md/dm-mpath.c
    @@ -1220,10 +1220,10 @@ static void activate_path(struct work_st
    {
    struct pgpath *pgpath =
    container_of(work, struct pgpath, activate_path.work);
    + struct request_queue *q = bdev_get_queue(pgpath->path.dev->bdev);

    - if (pgpath->is_active)
    - scsi_dh_activate(bdev_get_queue(pgpath->path.dev->bdev),
    - pg_init_done, pgpath);
    + if (pgpath->is_active && !blk_queue_dying(q))
    + scsi_dh_activate(q, pg_init_done, pgpath);
    else
    pg_init_done(pgpath, SCSI_DH_DEV_OFFLINED);
    }

    \
     
     \ /
      Last update: 2016-10-26 14:55    [W:4.178 / U:0.044 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site