Message ID | 1608186532-81218-3-git-send-email-alex.shi@linux.alibaba.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [1/3] mm/memcg: revise the using condition of lock_page_lruvec function series | expand |
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@linux.alibaba.com> > Cc: Hugh Dickins <hughd@google.com> Acked-by: Hugh Dickins <hughd@google.com> > Cc: Johannes Weiner <hannes@cmpxchg.org> > Cc: Andrew Morton <akpm@linux-foundation.org> > Cc: linux-mm@kvack.org > Cc: linux-kernel@vger.kernel.org > --- > 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
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))
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. Signed-off-by: Alex Shi <alex.shi@linux.alibaba.com> Cc: Hugh Dickins <hughd@google.com> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: linux-mm@kvack.org Cc: linux-kernel@vger.kernel.org --- mm/compaction.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-)