Received: by 2002:a25:c205:0:0:0:0:0 with SMTP id s5csp2629865ybf; Mon, 2 Mar 2020 12:31:44 -0800 (PST) X-Google-Smtp-Source: ADFU+vtXFKnfICMdw3OfuyhBGgAV4x9SVex2lmGKbHhfY3Jg0CLpX/r2OE6iISKn6xsifQrmpTe3 X-Received: by 2002:a9d:a16:: with SMTP id 22mr713561otg.31.1583181104738; Mon, 02 Mar 2020 12:31:44 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1583181104; cv=none; d=google.com; s=arc-20160816; b=lU+aM9L+3SMhkkWHAY4nuwFsGXoFYQNPoGH+zNx98jNmZc2G5NKUv+X9CooX31Ihz+ Pq6VNp3CE64bpAFTOKtEroAlAxwuaExSL7cwjohCRFT9kde+OqtypbqdFG9iMM5e+0Ei j8wEhSFtaP0KPiRDsQqseHBNVnaGFosyL8lAw9acgHXWnPOI3gNR9pxJIAK6wypEb6fC yDxDW6K5KnIOSvAPp4Palfh1io7Uz8c923NDm7TMTd8l//EOit2nHVEZ6uDUyF9yc4om LKqH4NME3uVVqiuCQr86iXGwpYMZCIckK8Q9vh5RfUhpWjIpOMQ3v1hk/vv9XmSYIYuE QUNw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:from:subject:mime-version :message-id:date:dkim-signature; bh=aihQYJyYU6rAhab/wfRsprbv1ChtTTWAtf4Gs/sLtew=; b=F5EY7+p/wZSdAmmO2F56Idu0CwJUu2SseCNZukYLD5stX1LSWEO4bxqkwzHn+RLqwA DbyZF2CacT+jqspJSDmzZA3ILBccAmJ/W/JHh+S6yWBpMsbvfTF4xB9sX1Wk21DBpR7L MXJEOhyAptHu8M5kB1Jfe5KeQtOikwKiPeBuBqSy5VXWN8U815oDGnXi6ehyFJ6ejtKg 7NoHsDWFuZYxMkAvFRIb1n3fhKTK/aDABOglG0TasAOBL0BgU132dPk6JR4iMzECe/Nb 2t5BhKndDs0wu6sHhDAvBGi+lHqGmMCyYwZC4ieo7H2bQIzcLH5IVtzB3ObuMjtWiFfD v2Cg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=EmoWHNnC; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l3si3075311otn.286.2020.03.02.12.31.32; Mon, 02 Mar 2020 12:31:44 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=EmoWHNnC; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726720AbgCBUbW (ORCPT + 99 others); Mon, 2 Mar 2020 15:31:22 -0500 Received: from mail-yw1-f73.google.com ([209.85.161.73]:47404 "EHLO mail-yw1-f73.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726545AbgCBUbW (ORCPT ); Mon, 2 Mar 2020 15:31:22 -0500 Received: by mail-yw1-f73.google.com with SMTP id b195so987656ywa.14 for ; Mon, 02 Mar 2020 12:31:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:message-id:mime-version:subject:from:to:cc; bh=aihQYJyYU6rAhab/wfRsprbv1ChtTTWAtf4Gs/sLtew=; b=EmoWHNnC3GmmT1fQR4b+eNyOdqxc4dSP/L7Ck/cPjz+laobHXJTPYrpx6RnpfnaYg6 jEMR+ZJHob86afxd2iTqe6yl770MccPz7Wh36Z4R4VrTdc+lLhVIEt5QhgGHfH3JKnMX LmIiCk/pzyCz5X/MBG+RRUZScnKlzLvV+MRsjaCSzrFr0TQHCz1s9Ukdrr7ysc4QXlWk 9HBbsfEeNsl+HQ8ISF5IrV2CxIGOXxjfH1iLOvlp8vR61axv/mmUt3fUvD06zF4Mfe2E aTV/Gun0pcpO9Bgwg+qfQEOQP/kVby/EzuJDx7Nlt22XEx74ouhjFFP/INIB86ECjh0Z OtZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:message-id:mime-version:subject:from:to:cc; bh=aihQYJyYU6rAhab/wfRsprbv1ChtTTWAtf4Gs/sLtew=; b=bg3yOK9UyluLEMGP11bXU0P7tOK51xHWffgHF+GtpN3I4LxFjGwEDDUgtDREb/dp6J bjQQZgGmCbgPgQ19tc3+Pgn05VBEUrNU1jPdNFogLVvPYV3jISiQDChCLXZTJqUVqM+h Y/LlTcUcH9ud16bWiv5jZc4mQMyOd0/tzMJnc44fwTz+c62BD0VLhHfxDfQOmLu+UytD qDMNKzdsJ8zB1t/DZ4fhKGgBzmb7YxcSfqtzrnNQCpPQ9WjykoQ+DIyXqEycewlwPw92 j3tL3TqkHZtBUV43CSkwCdATnvKakkNcFL5P/6jFbknTq1FgEKdqSh2Uk3HC+gqgAZZW l/JA== X-Gm-Message-State: ANhLgQ0WAYcEe50bBBoHpylb03jvdbL/r+SBEHFcY0qtbUKb7XlRrglf 0uVVz2eKOX9rJyVEbhACzCn2IuoOUvHNSQ== X-Received: by 2002:a81:23d8:: with SMTP id j207mr1140477ywj.203.1583181081383; Mon, 02 Mar 2020 12:31:21 -0800 (PST) Date: Mon, 2 Mar 2020 12:31:09 -0800 Message-Id: <20200302203109.179417-1-shakeelb@google.com> Mime-Version: 1.0 X-Mailer: git-send-email 2.25.0.265.gbab2e86ba0-goog Subject: [PATCH v2] memcg: css_tryget_online cleanups From: Shakeel Butt To: Roman Gushchin Cc: Johannes Weiner , Michal Hocko , Andrew Morton , linux-mm@kvack.org, cgroups@vger.kernel.org, linux-kernel@vger.kernel.org, Shakeel Butt Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Currently multiple locations in memcg code, css_tryget_online() is being used. However it doesn't matter whether the cgroup is online for the callers. Online used to matter when we had reparenting on offlining and we needed a way to prevent new ones from showing up. The failure case for couple of these css_tryget_online usage is to fallback to root_mem_cgroup which kind of make bypassing the memcg limits possible for some workloads. For example creating an inotify group in a subcontainer and then deleting that container after moving the process to a different container will make all the event objects allocated for that group to the root_mem_cgroup. So, using css_tryget_online() is dangerous for such cases. Two locations still use the online version. The swapin of offlined memcg's pages and the memcg kmem cache creation. The kmem cache indeed needs the online version as the kernel does the reparenting of memcg kmem caches. For the swapin case, it has been left for later as the fallback is not really that concerning. Signed-off-by: Shakeel Butt --- Changes since v1: - replaced WARN_ON with WARN_ON_ONCE mm/memcontrol.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 62b574d0cd3c..75d8883bf975 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -656,7 +656,7 @@ __mem_cgroup_largest_soft_limit_node(struct mem_cgroup_tree_per_node *mctz) */ __mem_cgroup_remove_exceeded(mz, mctz); if (!soft_limit_excess(mz->memcg) || - !css_tryget_online(&mz->memcg->css)) + !css_tryget(&mz->memcg->css)) goto retry; done: return mz; @@ -961,7 +961,8 @@ struct mem_cgroup *get_mem_cgroup_from_page(struct page *page) return NULL; rcu_read_lock(); - if (!memcg || !css_tryget_online(&memcg->css)) + /* Page should not get uncharged and freed memcg under us. */ + if (!memcg || WARN_ON_ONCE(!css_tryget(&memcg->css))) memcg = root_mem_cgroup; rcu_read_unlock(); return memcg; @@ -974,10 +975,13 @@ EXPORT_SYMBOL(get_mem_cgroup_from_page); static __always_inline struct mem_cgroup *get_mem_cgroup_from_current(void) { if (unlikely(current->active_memcg)) { - struct mem_cgroup *memcg = root_mem_cgroup; + struct mem_cgroup *memcg; rcu_read_lock(); - if (css_tryget_online(¤t->active_memcg->css)) + /* current->active_memcg must hold a ref. */ + if (WARN_ON_ONCE(!css_tryget(¤t->active_memcg->css))) + memcg = root_mem_cgroup; + else memcg = current->active_memcg; rcu_read_unlock(); return memcg; @@ -6732,7 +6736,7 @@ void mem_cgroup_sk_alloc(struct sock *sk) goto out; if (!cgroup_subsys_on_dfl(memory_cgrp_subsys) && !memcg->tcpmem_active) goto out; - if (css_tryget_online(&memcg->css)) + if (css_tryget(&memcg->css)) sk->sk_memcg = memcg; out: rcu_read_unlock(); -- 2.25.0.265.gbab2e86ba0-goog