[dm-devel] [RFC PATCH 0/7] dm-mpath: Do not clone requests

Junichi Nomura j-nomura at ce.jp.nec.com
Fri Jun 6 05:25:06 UTC 2014


On 06/05/14 23:44, Christoph Hellwig wrote:
> If we'd didn't clone bios the workflow would look something like this:
> 
>  - allocate new clone request in dm-mpath
>  - point clone->bio and clone->biotail to the original bio, zero
>    them out in the original request
>  - the low level driver does one or more calls to blk_update_request

At this point, if blk_update_request is called with error code,
the error is returned straight up to submitter of original bio
before dm-mpath can try other paths.

>    until clone->bio is NULL, and then calls blk_finish_request (or
>    __blk_mq_end_io) once the request has been completed,
>  - This hands control back to dm-mpath, which can now call
>    __blk_mq_end_io without blk_update_request as the low level driver
>    took care of the bio completions.

Primary reason of cloning bios was to intercept lower-layer errors
in dm-mpath for path failover decision.
If we only cloned requests, original bios were already completed
at the time blk_finish_request was called for the clone.

Other implementations were discussed back then.

blk_update_request could skip completing bios until blk_finish_request
is called. But it would become inefficient in the case of partial completion.

A callback hook could be added to blk_update_request.
However such an additional hook was considered as bad approach.

-- 
Jun'ichi Nomura, NEC Corporation




More information about the dm-devel mailing list