[dm-devel] "queue if no paths" infinite recursion when there are no paths

goggin, edward egoggin at emc.com
Wed Feb 23 21:20:15 UTC 2005


It appears that there is no stopping condition for retrying i/os failed
via bio_endio() in dispatch_queued_ios().  The bio_endio() initiated
callback to multipath_end_io() ends up __always__ requeuing the
failed bio in do_end_io().

The pre-requisites seem to be (1) a storage system class configured
with the "queue_if_no_path" feature, (2) an "all-paths-to-LU-down" use
case causing the i/o to be queued on the LU multipath queue to begin
with, and (3) a dm suspend issued on the mapped device which will
Invoke dispatch_queued_ios() to clear out this queue.

I haven't had time to work up a patch but it seems like setting a flag
in the mpath_io structure the first time an i/o has been queued due to
a "no paths" condition would be a sufficient stopping condition from
allowing the i/o to be queued again in this manner.

While failing these i/os in this manner is not all that desirable in the
first place, it is at least a better solution than recursing ad infinitum.




More information about the dm-devel mailing list