On Tue, Jul 05, 2022 at 08:45:06AM -0700, Keith Busch wrote: > From: Keith Busch <kbusch@xxxxxxxxxx> > > The size being added to a bio from an iov is aligned to a block size > after the pages were gotten. If the new aligned size truncates the last > page, its reference was being leaked. Ensure all pages that were not > added to the bio have their reference released. > > Since this essentially requires doing the same that bio_put_pages(), and > there was only one caller for that function, this patch makes the > put_page() loop common for everyone. > > Fixes: b1a000d3b8ec5 ("block: relax direct io memory alignment") > Reported-by: Al Viro <viro@xxxxxxxxxxxxxxxxxx> > Signed-off-by: Keith Busch <kbusch@xxxxxxxxxx> I still very much dislike this. Background: iov_iter_get_pages should advance the fucking iterator by the amount it has grabbed. It's really much cleaner that way. So your round-down-then-fuck-off-if-zero is going to be a clumsy. Whatever; I can deal with that on top of your patch. Where would you have it go wrt tree? Could you do a branch based at the last of your original series, so that both Jens and I could pull from it? One thing I would really like to avoid is having the entire #for-5.20/block in ancestors of those commits; that would make for a monumental headache with iov_iter series ;-/