Can we take a step back first? Current the blk-map user buffer handling decided to either pin the memory and use that directly or use the normal user copy helpers through copy_page_to_iter/copy_page_from_iter. Why do we even pin the memory here to then do an in-kernel copy instead of doing the copy_from/to_user which is going to be a lot more efficient? Sort of related to that is that this does driver the copy to user and unpin from bio_integrity_free, which is a low-level routine. It really should be driven from the highlevel blk-map code that is the I/O submitter, just like the data side. Shoe-horning uaccess into the low-level block layer plumbing is just going to get us into trouble.