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=-9.6 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,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 8228FC54FCC for ; Mon, 20 Apr 2020 22:12:15 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 2617B206E9 for ; Mon, 20 Apr 2020 22:12:15 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=cmpxchg-org.20150623.gappssmtp.com header.i=@cmpxchg-org.20150623.gappssmtp.com header.b="NAh8EB3u" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 2617B206E9 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=cmpxchg.org Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 823F38E0014; Mon, 20 Apr 2020 18:12:08 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 7D5068E0013; Mon, 20 Apr 2020 18:12:08 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 6EA528E0014; Mon, 20 Apr 2020 18:12:08 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0023.hostedemail.com [216.40.44.23]) by kanga.kvack.org (Postfix) with ESMTP id 57DF58E0013 for ; Mon, 20 Apr 2020 18:12:08 -0400 (EDT) Received: from smtpin06.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay01.hostedemail.com (Postfix) with ESMTP id 0F355180AD83E for ; Mon, 20 Apr 2020 22:12:08 +0000 (UTC) X-FDA: 76729632336.06.owner93_69e7558977104 X-HE-Tag: owner93_69e7558977104 X-Filterd-Recvd-Size: 10172 Received: from mail-qk1-f193.google.com (mail-qk1-f193.google.com [209.85.222.193]) by imf18.hostedemail.com (Postfix) with ESMTP for ; Mon, 20 Apr 2020 22:12:07 +0000 (UTC) Received: by mail-qk1-f193.google.com with SMTP id c63so12587985qke.2 for ; Mon, 20 Apr 2020 15:12:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cmpxchg-org.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=4BfoKiO68JS5GTVEtZtyPUsjUcvWwl21g5043cZUh4U=; b=NAh8EB3ujMtE3JW8FwO9QxU3wUahsLprFKjL+rZXgB98pAw/I1cRRlwb2E6WmfTSKr hMoJ1ESOu7U+cptDfS12CTHbRFNUXyTTyM+e5ZBwS3WsLfBERvNyWbjL1rz9CyOrki1Z by3J2+GSY280wtFvaZz6sJpi1Z0h1h5Ry/6DbqUWV1cUz9W/QtX48Irm9VN19PEM+N0T cEN8+VMev+TEjzZm/3dE7VyirSa+3/eDvmF2J7D947wy7TTen2d4MZUKOVw57GLfUksT EYoEUThyWb5X6dQHwoK7972N6f1MV1WW8Ewt3U5dEl7uQctc2S3sXKlO1FiejUhtm7vK evgQ== 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:in-reply-to :references:mime-version:content-transfer-encoding; bh=4BfoKiO68JS5GTVEtZtyPUsjUcvWwl21g5043cZUh4U=; b=mLcQLutaQdUYSGZlGm5nVDZR34z0YOUk6GQv5PtvHzbd74EISZwu8VKJjX4ObuqMN4 j2XzDdTSijy5vOz+bAuhmkadGadZ4hkLyiGQZL2SlMb4NuYllAv9gt+dmQ5H+Va/Sxwv j9/YDoaMN8gpeqew7r0O0+SDSZrPxG7CbzUjFq/wB7zTY6GL1fpOhrDaW/G1ShNNniKA 61nI0oSjEB0j+2uTOOZ3RPSeLo1Q+tUwhkmDwhKvcoAKL5WAMAIXi5P0NrVD6oz5Tkyq W62a5Qp2zch1xf0y6A572l9nE8SHciibKkHJ9GGyeoujN8YZ/eHVrhoVDTR0z1kbQ2dt fo2A== X-Gm-Message-State: AGi0PubJSnSQzMia5d2YQbnsJf7CoU0i9nH3OYpSpkTPSHeGhIpxpoBZ ehlWvyFAtKa3A3D9zEIz3wghMQ== X-Google-Smtp-Source: APiQypIxbp+3vK65VX1I+DnBRv6DzoynhnXVjr4q0qoUBcIMTkCChunVmnXoTc1Lg+U3zqyPuhtE5w== X-Received: by 2002:a05:620a:b83:: with SMTP id k3mr18223737qkh.412.1587420727081; Mon, 20 Apr 2020 15:12:07 -0700 (PDT) Received: from localhost ([2620:10d:c091:480::1:e6b6]) by smtp.gmail.com with ESMTPSA id k184sm573866qke.94.2020.04.20.15.12.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Apr 2020 15:12:06 -0700 (PDT) From: Johannes Weiner To: Joonsoo Kim , Alex Shi Cc: Shakeel Butt , Hugh Dickins , Michal Hocko , "Kirill A. Shutemov" , Roman Gushchin , linux-mm@kvack.org, cgroups@vger.kernel.org, linux-kernel@vger.kernel.org, kernel-team@fb.com Subject: [PATCH 14/18] mm: memcontrol: prepare swap controller setup for integration Date: Mon, 20 Apr 2020 18:11:22 -0400 Message-Id: <20200420221126.341272-15-hannes@cmpxchg.org> X-Mailer: git-send-email 2.26.0 In-Reply-To: <20200420221126.341272-1-hannes@cmpxchg.org> References: <20200420221126.341272-1-hannes@cmpxchg.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: A few cleanups to streamline the swap controller setup: - Replace the do_swap_account flag with cgroup_memory_noswap. This brings it in line with other functionality that is usually available unless explicitly opted out of - nosocket, nokmem. - Remove the really_do_swap_account flag that stores the boot option and is later used to switch the do_swap_account. It's not clear why this indirection is/was necessary. Use do_swap_account directly. - Minor coding style polishing Signed-off-by: Johannes Weiner --- include/linux/memcontrol.h | 2 +- mm/memcontrol.c | 59 ++++++++++++++++++-------------------- mm/swap_cgroup.c | 4 +-- 3 files changed, 31 insertions(+), 34 deletions(-) diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index 52eb6411cfee..d458f1d90aa4 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h @@ -560,7 +560,7 @@ struct mem_cgroup *mem_cgroup_get_oom_group(struct ta= sk_struct *victim, void mem_cgroup_print_oom_group(struct mem_cgroup *memcg); =20 #ifdef CONFIG_MEMCG_SWAP -extern int do_swap_account; +extern bool cgroup_memory_noswap; #endif =20 struct mem_cgroup *lock_page_memcg(struct page *page); diff --git a/mm/memcontrol.c b/mm/memcontrol.c index d5aee5577ff3..5558777023e7 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -83,10 +83,14 @@ static bool cgroup_memory_nokmem; =20 /* Whether the swap controller is active */ #ifdef CONFIG_MEMCG_SWAP -int do_swap_account __read_mostly; +#ifdef CONFIG_MEMCG_SWAP_ENABLED +bool cgroup_memory_noswap __read_mostly; #else -#define do_swap_account 0 -#endif +bool cgroup_memory_noswap __read_mostly =3D 1; +#endif /* CONFIG_MEMCG_SWAP_ENABLED */ +#else +#define cgroup_memory_noswap 1 +#endif /* CONFIG_MEMCG_SWAP */ =20 #ifdef CONFIG_CGROUP_WRITEBACK static DECLARE_WAIT_QUEUE_HEAD(memcg_cgwb_frn_waitq); @@ -95,7 +99,7 @@ static DECLARE_WAIT_QUEUE_HEAD(memcg_cgwb_frn_waitq); /* Whether legacy memory+swap accounting is active */ static bool do_memsw_account(void) { - return !cgroup_subsys_on_dfl(memory_cgrp_subsys) && do_swap_account; + return !cgroup_subsys_on_dfl(memory_cgrp_subsys) && !cgroup_memory_nosw= ap; } =20 #define THRESHOLDS_EVENTS_TARGET 128 @@ -6458,18 +6462,19 @@ int mem_cgroup_charge(struct page *page, struct m= m_struct *mm, gfp_t gfp_mask, /* * Every swap fault against a single page tries to charge the * page, bail as early as possible. shmem_unuse() encounters - * already charged pages, too. The USED bit is protected by - * the page lock, which serializes swap cache removal, which + * already charged pages, too. page->mem_cgroup is protected + * by the page lock, which serializes swap cache removal, which * in turn serializes uncharging. */ VM_BUG_ON_PAGE(!PageLocked(page), page); if (compound_head(page)->mem_cgroup) goto out; =20 - if (do_swap_account) { + if (!cgroup_memory_noswap) { swp_entry_t ent =3D { .val =3D page_private(page), }; - unsigned short id =3D lookup_swap_cgroup_id(ent); + unsigned short id; =20 + id =3D lookup_swap_cgroup_id(ent); rcu_read_lock(); memcg =3D mem_cgroup_from_id(id); if (memcg && !css_tryget_online(&memcg->css)) @@ -6944,7 +6949,7 @@ int mem_cgroup_try_charge_swap(struct page *page, s= wp_entry_t entry) struct mem_cgroup *memcg; unsigned short oldid; =20 - if (!cgroup_subsys_on_dfl(memory_cgrp_subsys) || !do_swap_account) + if (!cgroup_subsys_on_dfl(memory_cgrp_subsys) || cgroup_memory_noswap) return 0; =20 memcg =3D page->mem_cgroup; @@ -6988,7 +6993,7 @@ void mem_cgroup_uncharge_swap(swp_entry_t entry, un= signed int nr_pages) struct mem_cgroup *memcg; unsigned short id; =20 - if (!do_swap_account) + if (cgroup_memory_noswap) return; =20 id =3D swap_cgroup_record(entry, 0, nr_pages); @@ -7011,7 +7016,7 @@ long mem_cgroup_get_nr_swap_pages(struct mem_cgroup= *memcg) { long nr_swap_pages =3D get_nr_swap_pages(); =20 - if (!do_swap_account || !cgroup_subsys_on_dfl(memory_cgrp_subsys)) + if (cgroup_memory_noswap || !cgroup_subsys_on_dfl(memory_cgrp_subsys)) return nr_swap_pages; for (; memcg !=3D root_mem_cgroup; memcg =3D parent_mem_cgroup(memcg)) nr_swap_pages =3D min_t(long, nr_swap_pages, @@ -7028,7 +7033,7 @@ bool mem_cgroup_swap_full(struct page *page) =20 if (vm_swap_full()) return true; - if (!do_swap_account || !cgroup_subsys_on_dfl(memory_cgrp_subsys)) + if (cgroup_memory_noswap || !cgroup_subsys_on_dfl(memory_cgrp_subsys)) return false; =20 memcg =3D page->mem_cgroup; @@ -7043,22 +7048,15 @@ bool mem_cgroup_swap_full(struct page *page) return false; } =20 -/* for remember boot option*/ -#ifdef CONFIG_MEMCG_SWAP_ENABLED -static int really_do_swap_account __initdata =3D 1; -#else -static int really_do_swap_account __initdata; -#endif - -static int __init enable_swap_account(char *s) +static int __init setup_swap_account(char *s) { if (!strcmp(s, "1")) - really_do_swap_account =3D 1; + cgroup_memory_noswap =3D 0; else if (!strcmp(s, "0")) - really_do_swap_account =3D 0; + cgroup_memory_noswap =3D 1; return 1; } -__setup("swapaccount=3D", enable_swap_account); +__setup("swapaccount=3D", setup_swap_account); =20 static u64 swap_current_read(struct cgroup_subsys_state *css, struct cftype *cft) @@ -7124,7 +7122,7 @@ static struct cftype swap_files[] =3D { { } /* terminate */ }; =20 -static struct cftype memsw_cgroup_files[] =3D { +static struct cftype memsw_files[] =3D { { .name =3D "memsw.usage_in_bytes", .private =3D MEMFILE_PRIVATE(_MEMSWAP, RES_USAGE), @@ -7153,13 +7151,12 @@ static struct cftype memsw_cgroup_files[] =3D { =20 static int __init mem_cgroup_swap_init(void) { - if (!mem_cgroup_disabled() && really_do_swap_account) { - do_swap_account =3D 1; - WARN_ON(cgroup_add_dfl_cftypes(&memory_cgrp_subsys, - swap_files)); - WARN_ON(cgroup_add_legacy_cftypes(&memory_cgrp_subsys, - memsw_cgroup_files)); - } + if (mem_cgroup_disabled() || cgroup_memory_noswap) + return 0; + + WARN_ON(cgroup_add_dfl_cftypes(&memory_cgrp_subsys, swap_files)); + WARN_ON(cgroup_add_legacy_cftypes(&memory_cgrp_subsys, memsw_files)); + return 0; } subsys_initcall(mem_cgroup_swap_init); diff --git a/mm/swap_cgroup.c b/mm/swap_cgroup.c index 45affaef3bc6..7aa764f09079 100644 --- a/mm/swap_cgroup.c +++ b/mm/swap_cgroup.c @@ -171,7 +171,7 @@ int swap_cgroup_swapon(int type, unsigned long max_pa= ges) unsigned long length; struct swap_cgroup_ctrl *ctrl; =20 - if (!do_swap_account) + if (cgroup_memory_noswap) return 0; =20 length =3D DIV_ROUND_UP(max_pages, SC_PER_PAGE); @@ -209,7 +209,7 @@ void swap_cgroup_swapoff(int type) unsigned long i, length; struct swap_cgroup_ctrl *ctrl; =20 - if (!do_swap_account) + if (cgroup_memory_noswap) return; =20 mutex_lock(&swap_cgroup_mutex); --=20 2.26.0