From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 72151C433ED for ; Thu, 1 Apr 2021 03:02:26 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id C58C661073 for ; Thu, 1 Apr 2021 03:02:23 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org C58C661073 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=bytedance.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 188886B0080; Wed, 31 Mar 2021 23:02:23 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 138916B0081; Wed, 31 Mar 2021 23:02:23 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id EF4226B0082; Wed, 31 Mar 2021 23:02:22 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0082.hostedemail.com [216.40.44.82]) by kanga.kvack.org (Postfix) with ESMTP id CF52F6B0080 for ; Wed, 31 Mar 2021 23:02:22 -0400 (EDT) Received: from smtpin04.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay02.hostedemail.com (Postfix) with ESMTP id 83A7A6130 for ; Thu, 1 Apr 2021 03:02:22 +0000 (UTC) X-FDA: 77982299724.04.E78C135 Received: from mail-pg1-f181.google.com (mail-pg1-f181.google.com [209.85.215.181]) by imf08.hostedemail.com (Postfix) with ESMTP id EF5DF80192D5 for ; Thu, 1 Apr 2021 03:02:19 +0000 (UTC) Received: by mail-pg1-f181.google.com with SMTP id p12so637150pgj.10 for ; Wed, 31 Mar 2021 20:02:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=ZLLkTxJZICm9GVFNmsd9owELXRPBqC4NOmE5uFJRqG4=; b=enKCwWdpMvY8Czw8bFjHMoToCy2XTjo+ET4viygtctKaK+B90WkIh1QhApn7Zn9T0w 2E5ZTTi2U9ovoF8A23fsZe6UaT2HymO5rzm4w6Cf9N7yy939Jz8/Q4MIGlN30Dr/bLih bjv2uFOTn6Wpuh7Xqr1DVW++ycWfjb3GHD5UUOnoerDofxpfl4vr6RevUdvh6zm+R/kI TgMbPjfdvA6gHZXugn5IllDKhvPBC3prdZydJP4bc7SIVn1QB2k+2EAjqtgrLf2s2kq/ nFLHeVRpvPNhfBhbRzcKpJM/ca3Roy7/AJBXK9etp0i1TLjY9Z/18lBwDIqpnhLcw4Be 2Yng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=ZLLkTxJZICm9GVFNmsd9owELXRPBqC4NOmE5uFJRqG4=; b=r5FQSnl5/7NmOmADlFQf0jLTSd5zhMwp+z9Zb+F8YQ+IcisN5AznEmpry6tGJXZD9x GLiZ4ivz80rOyK0Pb5FKJ1lZBxEgAfr5XD0KZhWEfGlD5eFz5XquDbjoFxtDZn96geEv eyRdIlvzYl7NiGYi6PYbzVsFkHXDQ0rEacThfJ6Bl9tk04vwZA+hpF/9U0148jG5QPtP MWOGckrG5gJ1gfGy4JNibPKxXGyRFBsthsFiuGzx6HNMgeF8O6aSLoZXl5oFlaYTdToz BKxc8EAUhvmIEu3V647LzGkCHEhqIWLowTUqNxk7Ffi/uhC3g7yx81LJy6HF/6tjpUiA j+KA== X-Gm-Message-State: AOAM532Ja2bRLqFsEGKKxaQ/FIrU6iGovDINgECdwS0x1lqs12NJYaR/ 1+0wK7IE1SyU3IHvuViCagNcLQ== X-Google-Smtp-Source: ABdhPJwsiQRyF8W4DN5MDfFOYSgHyG7vMi1Ua2eBGpQONG0rQO5l2ww2a2S43YS1YhypjTrUKuzf3Q== X-Received: by 2002:a63:cb44:: with SMTP id m4mr5760615pgi.4.1617246140366; Wed, 31 Mar 2021 20:02:20 -0700 (PDT) Received: from localhost.localdomain ([2408:8445:add0:9210:fcb7:23f3:7cc:7f88]) by smtp.gmail.com with ESMTPSA id s76sm3709134pfc.110.2021.03.31.20.02.08 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 31 Mar 2021 20:02:19 -0700 (PDT) From: Muchun Song To: guro@fb.com, hannes@cmpxchg.org, mhocko@kernel.org, akpm@linux-foundation.org, shakeelb@google.com, vdavydov.dev@gmail.com Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, duanxiongchun@bytedance.com, Muchun Song , Christian Borntraeger Subject: [PATCH] mm: memcontrol: fix forget to obtain the ref to objcg in split_page_memcg Date: Thu, 1 Apr 2021 11:01:41 +0800 Message-Id: <20210401030141.37061-1-songmuchun@bytedance.com> X-Mailer: git-send-email 2.21.0 (Apple Git-122) MIME-Version: 1.0 X-Stat-Signature: a6pi8uhjqsizrs8xy3qbtwoxm84she4p X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: EF5DF80192D5 Received-SPF: none (bytedance.com>: No applicable sender policy available) receiver=imf08; identity=mailfrom; envelope-from=""; helo=mail-pg1-f181.google.com; client-ip=209.85.215.181 X-HE-DKIM-Result: pass/pass X-HE-Tag: 1617246139-417934 Content-Transfer-Encoding: quoted-printable X-Bogosity: Ham, tests=bogofilter, spamicity=0.004491, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Christian Borntraeger reported a warning about "percpu ref (obj_cgroup_release) <=3D 0 (-1) after switching to atomic". Because we forgot to obtain the reference to the objcg and wrongly obtain the reference of memcg. Reported-by: Christian Borntraeger Signed-off-by: Muchun Song --- include/linux/memcontrol.h | 6 ++++++ mm/memcontrol.c | 6 +++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index 0e8907957227..c960fd49c3e8 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h @@ -804,6 +804,12 @@ static inline void obj_cgroup_get(struct obj_cgroup = *objcg) percpu_ref_get(&objcg->refcnt); } =20 +static inline void obj_cgroup_get_many(struct obj_cgroup *objcg, + unsigned long nr) +{ + percpu_ref_get_many(&objcg->refcnt, nr); +} + static inline void obj_cgroup_put(struct obj_cgroup *objcg) { percpu_ref_put(&objcg->refcnt); diff --git a/mm/memcontrol.c b/mm/memcontrol.c index c0b83a396299..64ada9e650a5 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -3133,7 +3133,11 @@ void split_page_memcg(struct page *head, unsigned = int nr) =20 for (i =3D 1; i < nr; i++) head[i].memcg_data =3D head->memcg_data; - css_get_many(&memcg->css, nr - 1); + + if (PageMemcgKmem(head)) + obj_cgroup_get_many(__page_objcg(head), nr - 1); + else + css_get_many(&memcg->css, nr - 1); } =20 #ifdef CONFIG_MEMCG_SWAP --=20 2.11.0