+26
−25
Loading
In cachestat, we access the folio from the page cache's xarray to compute its page offset, and check for its dirty and writeback flags. However, we do not hold a reference to the folio before performing these actions, which means the folio can concurrently be released and reused as another folio/page/slab. Get around this altogether by just using xarray's existing machinery for the folio page offsets and dirty/writeback states. This changes behavior for tmpfs files to now always report zeroes in their dirty and writeback counters. This is okay as tmpfs doesn't follow conventional writeback cache behavior: its pages get "cleaned" during swapout, after which they're no longer resident etc. Link: https://lkml.kernel.org/r/20240220153409.GA216065@cmpxchg.org Fixes: cf264e13 ("cachestat: implement cachestat syscall") Reported-by:Jann Horn <jannh@google.com> Suggested-by:
Matthew Wilcox <willy@infradead.org> Signed-off-by:
Nhat Pham <nphamcs@gmail.com> Signed-off-by:
Johannes Weiner <hannes@cmpxchg.org> Tested-by:
Jann Horn <jannh@google.com> Cc: <stable@vger.kernel.org> [6.4+] Signed-off-by:
Andrew Morton <akpm@linux-foundation.org>