lkml.org 
[lkml]   [2020]   [Dec]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 3/3] mm/compaction: remove rcu_read_lock during page compaction
    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

    \
     
     \ /
      Last update: 2020-12-22 04:51    [W:3.927 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site