On Wed, Jan 18, 2023 at 02:00:54PM +0000, David Howells wrote: > Actually, should I make it so that the bottom two bits of bi_flags are a > four-state variable and make it such that bio_release_page() gives a warning > if the state is 0 - ie. unset? > > The states would then be, say: > > 0 WARN(), do no cleanup > 1 FOLL_GET > 2 FOLL_PUT > 3 do no cleanup > > This should help debug any places, such as iomap_dio_zero() that I just found, > that add pages with refs without calling iov_iter_extract_pages(). I don't really see a point. The fundamental use case of the bio itself isn't really to this at all. So we're stealing one, or in the future two bits mostly to optimize some direct I/O use cases. In fact I wonder if instead we should just drop this micro-optimization entirely an just add a member for the foll flags to the direct I/O container structures (struct blkdev_dio, strut iomap_dio, struct dio, or just on stack for __blkdev_direct_IO_simple and zonefs_file_dio_append) and pass that to bio_release_pages.