On Sun, 2013-01-27 at 15:12 -0800, Hugh Dickins wrote: > On Sat, 26 Jan 2013, Simon Jeons wrote: > > On Fri, 2013-01-25 at 18:03 -0800, Hugh Dickins wrote: > > > + while (!get_page_unless_zero(page)) { > > > + /* > > > + * Another check for page->mapping != expected_mapping would > > > + * work here too. We have chosen the !PageSwapCache test to > > > + * optimize the common case, when the page is or is about to > > > + * be freed: PageSwapCache is cleared (under spin_lock_irq) > > > + * in the freeze_refs section of __remove_mapping(); but Anon > > > + * page->mapping reset to NULL later, in free_pages_prepare(). > > > + */ > > > + if (!PageSwapCache(page)) > > > + goto stale; > > > + cpu_relax(); > > > + } > > > + > > > + if (ACCESS_ONCE(page->mapping) != expected_mapping) { > > > put_page(page); > > > goto stale; > > > } > > > + > > > if (locked) { > > > lock_page(page); > > > - if (page->mapping != expected_mapping) { > > > + if (ACCESS_ONCE(page->mapping) != expected_mapping) { > > > unlock_page(page); > > > put_page(page); > > > goto stale; > > > } > > > } > > > > Could you explain why need check page->mapping twice after get page? > > Once for the !locked case, which should not return page if mapping changed. > Once for the locked case, which should not return page if mapping changed. > We could use "else", but that wouldn't be an improvement. But for locked case, page->mapping will be check twice. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>