On Mon, Jul 25 2016 at 6:00P -0400, Bart Van Assche <bart.vanassche@xxxxxxxxxxx> wrote: > On 07/25/2016 02:23 PM, Mike Snitzer wrote: > >So I'd be curious to know if your debugging has enabled you to identify > >exactly where in the dm-mapth.c code the -EIO return is being > >established. do_end_io() is the likely candidate -- but again the > >__must_push_back() check should prevent it and DM_ENDIO_REQUEUE should > >be returned. > > Hello Mike, > > Thanks for looking further into this. The pr_info() statement that I had > added in the following code block in __multipath_map() fired what told me > that the following code block triggered the -EIO return: > > if (!pgpath) { > if (!must_push_back(m)) > r = -EIO; /* Failed */ > pr_info("%s(): (a) returning %d\n", __func__, r); > return r; > } > > From the system log: > > kernel: mpath 254:0: queue_if_no_path 1 -> 0 > kernel: __multipath_map(): (a) returning -5 > > The code that I had added in queue_if_no_path() is as follows: > > old = test_bit(MPATHF_QUEUE_IF_NO_PATH, &m->flags); > [ ... ] > pr_info("mpath %s: queue_if_no_path %d -> %d\n", > dm_device_name(dm_table_get_md(m->ti->table)), old, > queue_if_no_path); Hi Bart, Please try this patch to see if it fixes your issue, thanks. diff --git a/drivers/md/dm-mpath.c b/drivers/md/dm-mpath.c index 52baf8a..287caa7 100644 --- a/drivers/md/dm-mpath.c +++ b/drivers/md/dm-mpath.c @@ -433,10 +433,17 @@ failed: */ static int must_push_back(struct multipath *m) { - return (test_bit(MPATHF_QUEUE_IF_NO_PATH, &m->flags) || - ((test_bit(MPATHF_QUEUE_IF_NO_PATH, &m->flags) != - test_bit(MPATHF_SAVED_QUEUE_IF_NO_PATH, &m->flags)) && - dm_noflush_suspending(m->ti))); + bool r; + unsigned long flags; + + spin_lock_irqsave(&m->lock, flags); + r = (test_bit(MPATHF_QUEUE_IF_NO_PATH, &m->flags) || + ((test_bit(MPATHF_QUEUE_IF_NO_PATH, &m->flags) != + test_bit(MPATHF_SAVED_QUEUE_IF_NO_PATH, &m->flags)) && + dm_noflush_suspending(m->ti))); + spin_unlock_irqrestore(&m->lock, flags); + + return r; } /* -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html