This looks good on it's own: Signed-off-by: Christoph Hellwig <hch@xxxxxx> but while looking for potentially issues with it I noticed the integrity_req_gap_back_merge / integrity_req_gap_front_merge helpers that directly access bip->bip_vec. Given how even the old clone implementation always clones the entire bvec array this patch isn't even making things worse on it's own, but if we get more uses of biovec clones we'll probably run into issues there. For nvme there current is only a single integrity segments, so we can't ever hits this code (at least until we implement SGL support for metadata, which would be really nice - any takers?). For SCSI mpi3mr can set a virt_mask and supports multiple integrity segments. But I don't know if the two can be combined as the virt_mask is only set when it is fronting nvme and it might or might not support integrity data for that use case.