dm mpath: return DM_MAPIO_DELAY_REQUEUE if QUEUE_IO or PG_INIT_REQUIRED
authorMing Lei <ming.lei@redhat.com>
Thu, 11 Jan 2018 06:01:55 +0000 (14:01 +0800)
committerMike Snitzer <snitzer@redhat.com>
Wed, 17 Jan 2018 14:16:18 +0000 (09:16 -0500)
Avoid using DM_MAPIO_REQUEUE unless absolutely necessary because it
results in dm-rq.c:dm_mq_queue_rq() returning BLK_STS_RESOURCE to
blk-mq -- doing so should only ever be done if the underlying queue is
out of resources.  So switch to returning DM_MAPIO_DELAY_REQUEUE from
multipath_clone_and_map() if either MPATHF_QUEUE_IO or
MPATHF_PG_INIT_REQUIRED are set.

Signed-off-by: Ming Lei <ming.lei@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
drivers/md/dm-mpath.c

index e018779..815de2b 100644 (file)
@@ -517,9 +517,8 @@ static int multipath_clone_and_map(struct dm_target *ti, struct request *rq,
                return DM_MAPIO_KILL;
        } else if (test_bit(MPATHF_QUEUE_IO, &m->flags) ||
                   test_bit(MPATHF_PG_INIT_REQUIRED, &m->flags)) {
-               if (pg_init_all_paths(m))
-                       return DM_MAPIO_DELAY_REQUEUE;
-               return DM_MAPIO_REQUEUE;
+               pg_init_all_paths(m);
+               return DM_MAPIO_DELAY_REQUEUE;
        }
 
        mpio->pgpath = pgpath;