[dm-devel] bvec_merge_fn

Mikulas Patocka mpatocka at redhat.com
Wed Apr 28 16:13:04 UTC 2010


Hi

See this bug: https://bugzilla.redhat.com/show_bug.cgi?id=223947

It shows that md-raid doesn't split bio and it relies on bios not being 
larger than what bvec_merge_fn allows. If you split a small bio that 
crosses md-raid stripe bounday, it aborts it with the errors shown in the 
bug report.

So, unfortunatelly, bvec_merge_fn is not advisory. I think it would be 
better if it were, but it isn't.



As you talked about "accepting any size bio in dm and always process it 
correctly", this would mean two-level splitting:

1. split it on target boundary and t->split_io (as it is being done now)
2. submit it to the target
3. the target decides, where the bio goes
4. check the limits for the destination device and its bvec_merge_fn, and 
maybe split the bio second time, to match it. (this split can't be done at 
step 1, because at step 1 we don't know the destination device)

Mikulas




More information about the dm-devel mailing list