[dm-devel] dm-mq and end_clone_request()
Bart Van Assche
bart.vanassche at sandisk.com
Mon Aug 1 18:55:38 UTC 2016
On 08/01/2016 10:59 AM, Mike Snitzer wrote:
> This says to me that must_push_back is returning false because
> dm_noflush_suspending() is false. When this happens -EIO will escape up
> the IO stack.
>
> And this confirms that must_push_back() calling dm_noflush_suspending()
> is quite suspect given queue_if_no_path was configured: we should
> _always_ pushback if no paths are available.
>
> I'll dig deeper on really understanding _why_ must_push_back() is coded
> like it is.
Hello Mike,
Earlier I had reported that I observe this behavior with
CONFIG_DM_MQ_DEFAULT=y after the first simulated cable pull. I have been
able to reproduce this behavior with CONFIG_DM_MQ_DEFAULT=n but it takes
a large number of iterations to trigger this behavior. The output that
appears on my setup in the kernel log with a bunch of printk()'s added
in the dm-mpath driver for CONFIG_DM_MQ_DEFAULT=n is as follows (mpath
254:0 and /dev/mapper/mpathbe refer to the same multipath device):
[ 314.755582] mpath 254:0: queue_if_no_path 0 -> 1
[ 314.770571] executing DM ioctl DEV_SUSPEND on mpathbe
[ 314.770622] mpath 254:0: queue_if_no_path 1 -> 0
[ 314.770657] __multipath_map(): (a) returning -5
[ 314.770657] map_request(): clone_and_map_rq() returned -5
[ 314.770658] dm_complete_request: error = -5
Bart.
More information about the dm-devel
mailing list