On Thu, May 02, 2024 at 02:53:40PM +0200, Christoph Hellwig wrote: > On Thu, May 02, 2024 at 08:45:33AM +0200, Hannes Reinecke wrote: > >> - nr_pages = (fi.offset + fi.length - 1) / PAGE_SIZE - > >> - fi.offset / PAGE_SIZE + 1; > >> - do { > >> - bio_release_page(bio, page++); > >> - } while (--nr_pages != 0); > >> + bio_release_page(bio, page); > > > > Errm. I guess you need to call 'folio_put()' here, otherwise the page > > reference counting will be messed up. > > It shouldn't. See the rfc patch and explanation that Keith sent in reply > to the previous version. But as I wrote earlier it should be a separate > prep patch including a commit log clearly explaining the reason for it > and how it works. I think this is wandering into a minefield. I'm pretty sure it's considered valid to split the bio, and complete the two halves independently. Each one will put the refcounts for the pages it touches, and if we do this early putting of references, that's going to fail.