[dm-devel] [PATCH/rfc] dm: revise 'rescue' strategy for md->bs allocations

NeilBrown neilb at suse.com
Thu Sep 7 03:19:59 UTC 2017


On Wed, Sep 06 2017, Mikulas Patocka wrote:

> On Wed, 6 Sep 2017, NeilBrown wrote:
>
>> Thanks for the extra explanation.  I've thought some more about this I can
>> see a way forward that I am comfortable with.  Please let me know what
>> you think.
>> I haven't tested this patch yet, but I believe that applying it first will
>> clear the way for my other patch to work without reintroducing
>> deadlocks.
>> 
>> Thanks,
>> NeilBrown
>
> What's the purpose of this patch? If the current code that offloads bios 
> on current->bio_list to a rescue thread works, why do you want to change 
> it?

That is a fair question.

My primary reason is that I don't like the 'rescue' functionality built
in to biosets, and I want to get rid of it together with all uses for
BIOSET_NEED_RESCUER.  I think this functionality is unnecessary and adds
complexity.  It superficially seems like it should fix any deadlock
issue created by the ordering that generic_make_request() requires, but
as you discovered with dm-snap, it isn't sufficient by itself.  So it is
an incomplete solution that mostly isn't necessary, and I don't think it
is good design to keep such things around.

I also like uniformity where practical.  The block layer provides a
simple coherent infrastructure for splitting requests when needed, and
if simple guidelines are following concerning how the resulting bios are
submitted to generic_make_request(), then deadlocks can be avoided.
Most device use this common infrastructure, the exceptions being dm and
bcache (though I really haven't wrapped my mind around bcache yet so I
cannot say much in concrete terms about what it does).
So I would like dm to handle over-large bios by allocating from the
->bio_split pool, cloning, bio_chain and generic_make_request().

On reflection, I think that just this change might address all your
deadlock issues.  We might be able to get rid of the dm_offload stuff
completely, though I'm not 100% sure yet.

So in brief:
1/ use same approach to bio splitting everywhere - an approach that is
   resistant to deadlocks.
2/ discard the incomplete and unnecessary BIOSET_NEED_RESCUER
   functionality.

Thanks,
NeilBrown
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 832 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/dm-devel/attachments/20170907/23ac2db8/attachment.sig>


More information about the dm-devel mailing list