On 11/8/24 12:26 PM, Jens Axboe wrote: > On 11/8/24 11:46 AM, Matthew Wilcox wrote: >> On Fri, Nov 08, 2024 at 10:43:34AM -0700, Jens Axboe wrote: >>> +++ b/fs/iomap/buffered-io.c >>> @@ -959,6 +959,8 @@ static loff_t iomap_write_iter(struct iomap_iter *iter, struct iov_iter *i) >>> } >>> if (iter->iomap.flags & IOMAP_F_STALE) >>> break; >>> + if (iter->flags & IOMAP_UNCACHED) >>> + folio_set_uncached(folio); >> >> This seems like it'd convert an existing page cache folio into being >> uncached? Is this just leftover from a previous version or is that a >> design decision you made? > > I'll see if we can improve that. Currently both the read and write side > do drop whatever it touches. We could feasibly just have it drop > newly instantiated pages - iow, uncached just won't create new persistent > folios, but it'll happily use the ones that are there already. Well that was nonsense on the read side, it deliberately only prunes entries that has uncached set. For the write side, this is a bit trickier. We'd essentially need to know if the folio populated by write_begin was found in the page cache, or create from new. Any way we can do that? One way is to change ->write_begin() so it takes a kiocb rather than a file, but that's an amount of churn I'd rather avoid! Maybe there's a way I'm just not seeing? -- Jens Axboe