First: as mentioned in the previous patches I really hate the name
scheme with the _sp and _mp postfixes.
To be clear and understandable we should always name the versions
that iterate over segments *segment* and the ones that iterate over
pages *page*. To make sure we have a clean compile break for code
using the old _segment name I'd suggest to move to pass the bvec_iter
argument by reference, which is the right thing to do anyway.
As far as the implementation goes I don't think we actually need
to pass the mp argument down. Instead we always call the full-segment
version of bvec_iter_len / __bvec_iter_advance and then have an
inner loop that moves the fake bvecs forward inside each full-segment
one - that is implement the per-page version on top of the per-segment