I'm writing a device mapper target, and on a bio (read) request I want to access (for example just logging) the data that was just read (by providing a callback to bio->bio_end_io). I've figured out I could read the data by using bvec_kmap_local() on each bio_vec to get a pointer to the data. However, if my understanding is correct this seems like an unefficient way: if the bio just finished a read then shouldn't the data already be mapped somewhere? If so, where? 2nd question: using bio_for_each_segment(...) inside the bio_end_io callback never loops. Is this normal, and if so why? Thanks!