On Thu, 17 Dec 2020, Alex Shi wrote: > rcu_read_lock was used to guard memcg destory, now TestClearPageLRU > could block this happen, so we don't need it. Remove it to reduce > locking load in debugging mode. " isolate_migratepages_block() used rcu_read_lock() with the intention of safeguarding against the mem_cgroup being destroyed concurrently; but its TestClearPageLRU already protects against that. Delete the unnecessary rcu_read_lock() and _unlock(). " > > Signed-off-by: Alex Shi <alex.shi@xxxxxxxxxxxxxxxxx> > Cc: Hugh Dickins <hughd@xxxxxxxxxx> Acked-by: Hugh Dickins <hughd@xxxxxxxxxx> > Cc: Johannes Weiner <hannes@xxxxxxxxxxx> > Cc: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> > Cc: linux-mm@xxxxxxxxx > Cc: linux-kernel@xxxxxxxxxxxxxxx > --- > mm/compaction.c | 5 +---- > 1 file changed, 1 insertion(+), 4 deletions(-) > > diff --git a/mm/compaction.c b/mm/compaction.c > index 8049d3530812..02af220fb992 100644 > --- a/mm/compaction.c > +++ b/mm/compaction.c > @@ -995,7 +995,6 @@ isolate_migratepages_block(struct compact_control *cc, unsigned long low_pfn, > if (!TestClearPageLRU(page)) > goto isolate_fail_put; > > - rcu_read_lock(); > lruvec = mem_cgroup_page_lruvec(page, pgdat); > > /* If we already hold the lock, we can skip some rechecking */ > @@ -1005,7 +1004,6 @@ isolate_migratepages_block(struct compact_control *cc, unsigned long low_pfn, > > compact_lock_irqsave(&lruvec->lru_lock, &flags, cc); > locked = lruvec; > - rcu_read_unlock(); > > lruvec_memcg_debug(lruvec, page); > > @@ -1026,8 +1024,7 @@ isolate_migratepages_block(struct compact_control *cc, unsigned long low_pfn, > SetPageLRU(page); > goto isolate_fail_put; > } > - } else > - rcu_read_unlock(); > + } > > /* The whole page is taken off the LRU; skip the tail pages. */ > if (PageCompound(page)) > -- > 2.29.GIT