Messages in this thread | | | Date | Mon, 09 Jan 2012 18:09:32 -0500 | From | KOSAKI Motohiro <> | Subject | Re: [PATCH 2/2] SHM_UNLOCK: fix Unevictable pages stranded after swap |
| |
(1/9/12 5:25 PM), Hugh Dickins wrote: > On Mon, 9 Jan 2012, KOSAKI Motohiro wrote: >> 2012/1/6 Hugh Dickins<hughd@google.com>: > > [ check_move_unevictable_page(s) ] > >>> >>> Leave out the "rotate unevictable list" block: that's a leftover >>> from when this was used for /proc/sys/vm/scan_unevictable_pages, >>> whose flawed handling involved looking at pages at tail of LRU. >>> >>> Was there significance to the sequence first ClearPageUnevictable, >>> then test page_evictable, then SetPageUnevictable here? I think >>> not, we're under LRU lock, and have no barriers between those. >> >> If I understand correctly, this is not exactly correct. Because of, > > Thank you for giving it serious thought: > such races are hard work to think about. > >> PG_mlocked operation is not protected by LRU lock. So, I think we > > Right. But I don't see that I've made a significant change there. > > I may be being lazy, and rushing back to answer you, without giving > constructive thought to what the precise race is that you see, and > how we might fix it. If the case you have in mind is easy for you > to describe in detail, please do so; but don't hesitate to tell me > to my own work for myself!
Bah! I was moron. I now think your code is right.
spin_lock(lru_lock) if (page_evictable(page)) blah blah blah spin_unlock(lru_lock)
is always safe. Counter part should have following code and waiting spin_lock(lru_lock) in isolate_lru_page().
if (!isolate_lru_page(page)) putback_lru_page(page);
then, even if check_move_unevictable_pages() observed wrong page status, putback_lru_page() should put back the page into right lru.
I'm very sorry for annoying you.
Reviewed-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
Probably, page_evictable() might be needed some additional comments. But I have no idea what comment clearly explain this complex rule.....
| |