linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* When is page->index stable?
@ 2020-08-27 19:14 Matthew Wilcox
  2020-08-27 20:52 ` Hugh Dickins
  0 siblings, 1 reply; 3+ messages in thread
From: Matthew Wilcox @ 2020-08-27 19:14 UTC (permalink / raw)
  To: linux-mm

We have a number of places where we look up a page in the page cache,
lock it, then have some kind of assertion that we got back the page we
asked for, eg filemap_fault():

        page = find_get_page(mapping, offset);
...
        if (!lock_page_maybe_drop_mmap(vmf, page, &fpin))
                goto out_retry;
...
        VM_BUG_ON_PAGE(page_to_pgoff(page) != offset, page);

but today I noticed this in shmem_undo_range():

                pvec.nr = find_get_entries(mapping, index,
                        min(end - index, (pgoff_t)PAGEVEC_SIZE),
                        pvec.pages, indices);
...
                        VM_BUG_ON_PAGE(page_to_pgoff(page) != index, page);
...
                        if (!trylock_page(page))
                                continue;

So is page->index stable if we have a refcount on the page, or is a lock
on the page required?  A refcount on the page prevents it from being
split or freed.  And there's plenty of comments along the lines of:

mm/filemap.c:		/* Leave page->index set: truncation lookup relies on it */

which indicates that once a page is removed from the page cache, its
index remains reliable (until it's freed).

It might be nice to remove all these assertions from the callers and
bury them down in find_get_(entry,page,entries,...), but we can't do
that if we need the lock to check the index.  If we don't need the lock,
then it should be safe to check as soon as we've checked that
page == xas_reload().


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2020-09-10 14:27 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-08-27 19:14 When is page->index stable? Matthew Wilcox
2020-08-27 20:52 ` Hugh Dickins
2020-09-10 14:27   ` Matthew Wilcox

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).