David Howells [off-list ref] wrote:
(1) For the old fscache code that I'm trying to phase out, it does not take a
ref when PG_fscache is taken (probably incorrectly), relying instead on
releasepage, etc. getting called to strip the PG_fscache bit. PG_fscache
is held for the lifetime of the page, indicating that fscache knows about
it and might access it at any time (to write to the cache in the
background for example or to move pages around in the cache).
Here PG_fscache should not prevent page eviction or migration and it's
analogous to PG_private.
That said, the old fscache code keeps its own radix trees of pages that
are undergoing write to the cache, so to allow a page to be evicted,
releasepage and co. have to consult those
(__fscache_maybe_release_page()).
Note that, ideally, we'll be able to remove the old fscache I/O code in the
next merge window or the one after.
David