@@ -501,8 +501,10 @@ static int multipath_clone_and_map(struct dm_target *ti, struct request *rq,
pgpath = choose_pgpath(m, nr_bytes);
if (!pgpath) {
- if (must_push_back_rq(m))
+ if (must_push_back_rq(m)) {
+ pr_debug("no path - requeueing\n");
return DM_MAPIO_DELAY_REQUEUE;
+ }
return -EIO; /* Failed */
} else if (test_bit(MPATHF_QUEUE_IO, &m->flags) ||
test_bit(MPATHF_PG_INIT_REQUIRED, &m->flags)) {
@@ -1425,17 +1427,23 @@ static void pg_init_done(void *data, int errors)
/* Activations of other paths are still on going */
goto out;
+ pr_debug("pg_init_in_progress = %d\n",
+ atomic_read(&m->pg_init_in_progress));
+
if (test_bit(MPATHF_PG_INIT_REQUIRED, &m->flags)) {
if (delay_retry)
set_bit(MPATHF_PG_INIT_DELAY_RETRY, &m->flags);
else
clear_bit(MPATHF_PG_INIT_DELAY_RETRY, &m->flags);
- if (__pg_init_all_paths(m))
+ if (__pg_init_all_paths(m)) {
+ pr_debug("__pg_init_all_paths() reported that initialization is ongoing\n");
goto out;
+ }
}
clear_bit(MPATHF_QUEUE_IO, &m->flags);
+ pr_debug("Processing queued I/O list\n");
process_queued_io_list(m);
/*
@@ -1929,8 +1937,11 @@ static int multipath_busy(struct dm_target *ti)
struct pgpath *pgpath;
/* pg_init in progress */
- if (atomic_read(&m->pg_init_in_progress))
+ if (atomic_read(&m->pg_init_in_progress)) {
+ pr_debug("pg_init_in_progress = %d\n",
+ atomic_read(&m->pg_init_in_progress));
return true;
+ }
/* no paths available, for blk-mq: rely on IO mapping to delay requeue */
if (!atomic_read(&m->nr_valid_paths) && test_bit(MPATHF_QUEUE_IF_NO_PATH, &m->flags))
@@ -1977,6 +1988,10 @@ static int multipath_busy(struct dm_target *ti)
busy = false;
}
+
+ if (busy)
+ pr_debug("all active paths are busy\n");
+
return busy;
}
@@ -737,8 +737,10 @@ static int dm_mq_queue_rq(struct blk_mq_hw_ctx *hctx,
dm_put_live_table(md, srcu_idx);
}
- if (ti->type->busy && ti->type->busy(ti))
+ if (ti->type->busy && ti->type->busy(ti)) {
+ pr_debug("ti->type->busy()\n");
return BLK_MQ_RQ_QUEUE_BUSY;
+ }
dm_start_request(md, rq);
@@ -756,6 +758,7 @@ static int dm_mq_queue_rq(struct blk_mq_hw_ctx *hctx,
rq_end_stats(md, rq);
rq_completed(md, rq_data_dir(rq), false);
blk_mq_delay_run_hw_queue(hctx, 500/*ms*/);
+ pr_debug("DM_MAPIO_REQUEUE\n");
return BLK_MQ_RQ_QUEUE_BUSY;
}
When debugging the dm-mpath driver it is important to know what decisions have been taken with regard to requeuing. Hence this patch that adds pr_debug() statements that report what decisions have been taken. Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com> Cc: Hannes Reinecke <hare@suse.com> Cc: Christoph Hellwig <hch@lst.de> --- drivers/md/dm-mpath.c | 21 ++++++++++++++++++--- drivers/md/dm-rq.c | 5 ++++- 2 files changed, 22 insertions(+), 4 deletions(-)