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 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0DE13C52D7F for ; Thu, 15 Aug 2024 19:31:51 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 92E6E8D0005; Thu, 15 Aug 2024 15:31:51 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 8B7D86B020D; Thu, 15 Aug 2024 15:31:51 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 7587F8D0005; Thu, 15 Aug 2024 15:31:51 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 53FB16B020C for ; Thu, 15 Aug 2024 15:31:51 -0400 (EDT) Received: from smtpin23.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id C6BD51416E7 for ; Thu, 15 Aug 2024 19:31:50 +0000 (UTC) X-FDA: 82455474780.23.BBAE1CA Received: from out-174.mta0.migadu.com (out-174.mta0.migadu.com [91.218.175.174]) by imf05.hostedemail.com (Postfix) with ESMTP id F37D8100013 for ; Thu, 15 Aug 2024 19:31:48 +0000 (UTC) Authentication-Results: imf05.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=rsWuo946; spf=pass (imf05.hostedemail.com: domain of roman.gushchin@linux.dev designates 91.218.175.174 as permitted sender) smtp.mailfrom=roman.gushchin@linux.dev; dmarc=pass (policy=none) header.from=linux.dev ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1723750272; a=rsa-sha256; cv=none; b=hssI3EoWMh6cOjd9C+2vfUYNliZz4iqvql/E+zL0fWzajOB9ll8QeokYhjr5Yf2Gr1SHEc mUII9tpacUcgtg8Xe2xqTfUbekv9PNCEppr0AGFJgAYBhJjnTD3BGy9aZBpTyMybZauX4h aE1TsGSe+5wE7BjWTEtdtVcB8JpgVw8= ARC-Authentication-Results: i=1; imf05.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=rsWuo946; spf=pass (imf05.hostedemail.com: domain of roman.gushchin@linux.dev designates 91.218.175.174 as permitted sender) smtp.mailfrom=roman.gushchin@linux.dev; dmarc=pass (policy=none) header.from=linux.dev ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1723750272; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=Tp8gjGHWxMUcXCpVWv5SwKW/CTSzHvOts/jHqTX+r9I=; b=ZirnsaDZruHWZFhZn8OAfQWkUEfy5RL+nrk0EeHUIANIpU1I7GOUQHcBt1LHAUbsIJYam9 nlWJ0MFflJde18y3hf1MumdRz95dwVSa1895A2dB9el4hrJfv/1a2FvlrpaU/Jzz+TBxhn QIii1sKGc7jNdApm55dsIHoP6N7wVzw= Date: Thu, 15 Aug 2024 19:31:43 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1723750307; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=Tp8gjGHWxMUcXCpVWv5SwKW/CTSzHvOts/jHqTX+r9I=; b=rsWuo9466d2OLEr7R4fZLS7UlWWe1VAiN4O1ZNn+Tu0kzX4vI/tm6Q1GafDUxwPNzc19SA 8+hp7ZROiRdPaYQFyIJTNybqRbJXZs2StpLfUxYzdc40f6/B/kQabRLydF8J/AOwlS5bWg A4KbN7VlB6eijY5jUbVOs5/nwxGwvsU= X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. From: Roman Gushchin To: Shakeel Butt Cc: Andrew Morton , Johannes Weiner , Michal Hocko , Muchun Song , "T . J . Mercier" , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Meta kernel team , cgroups@vger.kernel.org, Matthew Wilcox , Michal Hocko Subject: Re: [PATCH v2] memcg: replace memcg ID idr with xarray Message-ID: References: <20240815155402.3630804-1-shakeel.butt@linux.dev> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20240815155402.3630804-1-shakeel.butt@linux.dev> X-Migadu-Flow: FLOW_OUT X-Stat-Signature: f88qus9kjsprayxo6z1j76thzbqpym5y X-Rspamd-Queue-Id: F37D8100013 X-Rspam-User: X-Rspamd-Server: rspam10 X-HE-Tag: 1723750308-467996 X-HE-Meta: U2FsdGVkX1+5HwUF19ns0CAS4l5c9/LK89+vWwWK+gjpTlO8SsyCEZrqWSt7Y5mYAFOye9vOQrjQ7PswNB16f3jrZhzE8Bl3CoyGrDagfGsg/qT374oSuSrJScQcBbusXf2FSaLTOru57K3Cuw+OvyXLRjvqweQYdeXNwLQpPHB91m3Aw3GppfXnH6Rb/UOB800gARCdjiZU7gkeP3JEgEHVyXyljo24RjMvu4KRwDPiUM5IiQJwQsSNS+2NZdAuqkjt+IB8zChvpsTm0e1/e777z+nFfJkOKcU8MJpck5w+o5g2bRvHH2ltuOWZEAakXzlWGu5sXlJS3XUwMlCLLoTEB8/xkvT3XgWwvpzFK8aVEbk2wmvTAyGEtr5jmkVDEjtbvgIIgEWoO6y7Fc/2QwYwV4+RayUxI8qrWOcFexcCGSZxt4HSPFAGkvzYl+TAvxkKZDllt/kh62MCEiQ1n1FCNx7NReyy7G7XqZxP3oGtO9ze1v41LjuvphaCHg0OUY8vf7tDZOmPOMxFbpcCEWd9RLrlrh/eAf6CAEMaby0gYFVkshvpB9Qyz38xWU9yZeXORZDwWqdzbbh4D1dIEWmOHVKrQXr23mOFxnJUNPut59z47bvw2jJPPqzIpsCE8Uc7OwTF43qmFhV98PrgcgB45UXI5/6er2b9PMkfIPuAuofeYtCWSPU7zPcdblGJo3hauD8PRnUU916WNg47+xPsAMmla08IsnM26uzXAaZumNzl2qU0ThNNGct2+UaDjcAPncb8xy8tPUWDrMwwnNicP/k+3B6rXEI7yyc3XBLOvUV0DUDTK2zF4rk4zXFs1DFr34wSQZk1Da+HQmwEmib9czicUD6VBkeqoyE5HILWPQljKDnCUaiJap7V5KrdIF2X9HZjuy6ZRjDpLppY7vb/9gidrI7IF+p9rqjdSOLJYE72PL4rrlTF2CsqmenzhwtzLiiZj4ZJEoicn/A +YRsm+QD t2OxAkOSbiOfWj0LpNNPopZUW02YV4YBamZGDSaXKymzkGfgqo9LrKvcey8Veu9nYzrmLfnEezRqR1evHmpu0hc2fhtFirWgYsV8q6CkNQa9ngeUwMF3MyS2NLVOS6RCwmMW3HPqPm0fPYzVkdwpcqkKr6Wonqo7bcNXU/xgFQlmaB/ng428cCNuOSoJU6OKZhbzvsYp0xX7jni5TNRg9YXLR7XzxK28bLdcc0/4gQmQFSFPTlGR6iTSnB91IgdDXHS8417j4jnqQXi1ViVPzPKyADnTkJn/VYbccXV44y9ICKDm5RKbrlrqi5OpXpc0eYA8ZokLgelW+BYsnWAuYn6QZRx4MilEV0sdw/8zqKk1NwDXzqeAd4qLDBQ9WpMIhLr2Yxzds9sHpcPs= 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: List-Subscribe: List-Unsubscribe: On Thu, Aug 15, 2024 at 08:54:02AM -0700, Shakeel Butt wrote: > At the moment memcg IDs are managed through IDR which requires external > synchronization mechanisms and makes the allocation code a bit awkward. > Let's switch to xarray and make the code simpler. > > Signed-off-by: Shakeel Butt > Suggested-by: Matthew Wilcox > Reviewed-by: Roman Gushchin > Reviewed-by: Matthew Wilcox (Oracle) > Acked-by: Johannes Weiner > Reviewed-by: Muchun Song > Acked-by: Michal Hocko > Signed-off-by: Andrew Morton > --- > > Changes since v1: > - Fix error path in mem_cgroup_alloc (Dan Carpenter) > > mm/memcontrol.c | 39 ++++++++++----------------------------- > 1 file changed, 10 insertions(+), 29 deletions(-) > > diff --git a/mm/memcontrol.c b/mm/memcontrol.c > index df84683a0e1c..e8e03a5e1e5e 100644 > --- a/mm/memcontrol.c > +++ b/mm/memcontrol.c > @@ -3408,29 +3408,12 @@ static void memcg_wb_domain_size_changed(struct mem_cgroup *memcg) > */ > > #define MEM_CGROUP_ID_MAX ((1UL << MEM_CGROUP_ID_SHIFT) - 1) > -static DEFINE_IDR(mem_cgroup_idr); > -static DEFINE_SPINLOCK(memcg_idr_lock); > - > -static int mem_cgroup_alloc_id(void) > -{ > - int ret; > - > - idr_preload(GFP_KERNEL); > - spin_lock(&memcg_idr_lock); > - ret = idr_alloc(&mem_cgroup_idr, NULL, 1, MEM_CGROUP_ID_MAX + 1, > - GFP_NOWAIT); > - spin_unlock(&memcg_idr_lock); > - idr_preload_end(); > - return ret; > -} > +static DEFINE_XARRAY_ALLOC1(mem_cgroup_ids); > > static void mem_cgroup_id_remove(struct mem_cgroup *memcg) > { > if (memcg->id.id > 0) { > - spin_lock(&memcg_idr_lock); > - idr_remove(&mem_cgroup_idr, memcg->id.id); > - spin_unlock(&memcg_idr_lock); > - > + xa_erase(&mem_cgroup_ids, memcg->id.id); > memcg->id.id = 0; > } > } > @@ -3465,7 +3448,7 @@ static inline void mem_cgroup_id_put(struct mem_cgroup *memcg) > struct mem_cgroup *mem_cgroup_from_id(unsigned short id) > { > WARN_ON_ONCE(!rcu_read_lock_held()); > - return idr_find(&mem_cgroup_idr, id); > + return xa_load(&mem_cgroup_ids, id); > } > > #ifdef CONFIG_SHRINKER_DEBUG > @@ -3558,17 +3541,17 @@ static struct mem_cgroup *mem_cgroup_alloc(struct mem_cgroup *parent) > struct mem_cgroup *memcg; > int node, cpu; > int __maybe_unused i; > - long error = -ENOMEM; > + long error; > > memcg = kzalloc(struct_size(memcg, nodeinfo, nr_node_ids), GFP_KERNEL); > if (!memcg) > - return ERR_PTR(error); > + return ERR_PTR(-ENOMEM); > > - memcg->id.id = mem_cgroup_alloc_id(); > - if (memcg->id.id < 0) { > - error = memcg->id.id; > + error = xa_alloc(&mem_cgroup_ids, &memcg->id.id, NULL, > + XA_LIMIT(1, MEM_CGROUP_ID_MAX), GFP_KERNEL); > + if (error) > goto fail; > - } > + error = -ENOMEM; There is another subtle change here: xa_alloc() returns -EBUSY in the case of the address space exhaustion, while the old code returned -ENOSPC. It's unlikely a big practical problem.