[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