Messages in this thread | | | Subject | Re: [PATCH v16 15/22] mm/compaction: do page isolation first in compaction | From | Alex Shi <> | Date | Sun, 19 Jul 2020 11:59:36 +0800 |
| |
在 2020/7/18 上午12:09, Alexander Duyck 写道: >>> I wonder if it wouldn't make sense to combine these two atomic ops >>> with tests and the put_page into a single inline function? Then it >>> could be possible to just do one check and if succeeds you do the >>> block of code below, otherwise you just fall-through into the -EBUSY >>> case. >>> >> Uh, since get_page changes page->_refcount, TestClearPageLRU changes page->flags, >> So I don't know how to combine them, could you make it more clear with code? > Actually it is pretty straight forward. Something like this: > static inline bool get_page_unless_zero_or_nonlru(struct page *page) > { > if (get_page_unless_zero(page)) { > if (TestClearPageLRU(page)) > return true; > put_page(page); > } > return false; > } > > You can then add comments as necessary. The general idea is you are > having to do this in two different spots anyway so why not combine the > logic? Although it does assume you can change the ordering of the > other test above.
It doesn't look different with original code, does it?
Thanks Alex
| |