On Tue, Aug 05, 2025 at 07:11:18AM -0700, Keith Busch wrote: > +static inline void bio_revert(struct bio *bio, unsigned int nbytes) Can you add a little comment explaining what this code does? The name suggast it is similar to iov_iter_revert, but I'm not sure how similar it is intended to be. The direct poking into bi_io_vec suggest it can only be used by the I/O submitter, and the use of bio_release_page suggests it is closely tied to to bio_iov_iter_get_pages despite the very generic name. > +static int bio_align_to_lbs(struct bio *bio, struct iov_iter *iter) > +{ > + struct block_device *bdev = bio->bi_bdev; > + size_t nbytes; > + > + if (!bdev) > + return 0; So this is something horribly Kent put in where he failed to deal with review feedback and just fed his stuff to Linus, and I think we need to fix it when touching this code again. Assuming we want to support bio_iov_iter_get_pages on bios without bi_bdev set we simplify can't rely in looking at bdev_logical_block_size here, but instead need to pass it explicitly. Which honestly doesn't sound to bad, just add an explicit argument for the required alignment to bio_iov_iter_get_pages instead of trying to derive it. Which is actually going to be useful to reduce duplicate checks for file systems the require > LBA size alignment as well. > - return bio->bi_vcnt ? 0 : ret; > + if (bio->bi_vcnt) > + return bio_align_to_lbs(bio, iter); > + return ret; Nit, this would flow a little more easily by moving the error / exceptional case into the branch, i.e. if (!bio->bi_vcnt) return ret; return bio_align_to_lbs(bio, iter);