From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f182.google.com (mail-pl1-f182.google.com [209.85.214.182]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E7A16426429 for ; Mon, 24 Aug 2026 13:42:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.182 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787578931; cv=none; b=n26ixV20iQmLemuq9LVcL6/AS1bNqHKwMeSu1pczDRf8Up+WkvAgiMjxuCfAYa/qPD5vF4GZi4vxt+YrMaAWyyVW3OzVjcJcbymZ3COOYYQPNayQv0VqaP56TZD2up+XNTUfF74q8EHA09m5nqb0zPiYzEpkdZGxfvp1Cq0DlhE= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787578931; c=relaxed/simple; bh=MbLrZ2RCv1yCQ+mW9gBRkfaav6HZkcrdFnHDVIZxe7A=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=khlcrBOY8wLd3RFYUIODC4y7GQf+0znoInFX1CunPJR/8wdJ/+71WoGKEj9WZMnF7ol4CNCa2E3tcrKwMtL8DKgmqpAtm9sHXrxmQSry7vaiKACfxcegzZHo0aS+bpGfCmmP4E+CTOk9memGOMrBkX/vM6uG9AmqRUiceMkEFZM= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=hx0oHI+n; arc=none smtp.client-ip=209.85.214.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="hx0oHI+n" Received: by mail-pl1-f182.google.com with SMTP id d9443c01a7336-2cacf197759so45918585ad.2 for ; Mon, 24 Aug 2026 06:42:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1787578929; x=1788183729; darn=vger.kernel.org; h=in-reply-to:content-disposition:content-type:mime-version :references:message-id:subject:cc:to:from:date:from:to:cc:subject :date:message-id:reply-to:content-type; bh=3HsIc5oa7SfTjXn5HfpWF7pds//yxw1/dVq8mya+hGA=; b=hx0oHI+nsDGZWTansTlipnOtz2pxatw3So+574mtoJ/qETONgceLkN3I2s6KjADbgf mTbsvGQFA/uXcZeibQKw8CFB82a3JW+x5CCo12yGgCaR9UlEBNJab7q6tJd5LrJnMJID e7obV0xTxzCcbPNj6ZTQNLd0S2mfqnzxWT0zCOJ63+BEUSlyrk1PEjSTqzurrvoceR0y hS4kGHuPQVfV23tBMaFHW9QhfexoVQjJJNekXJGU1M/now3eTCbVlHa8+PCA0qSgk16z cuPIhB/6bjWs9pO9S6O0sIDpQiMK1ICfcTiMQZQkUCx9vOCEVzZXLSdgJLuGMJ8gx/65 Am0Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787578929; x=1788183729; h=in-reply-to:content-disposition:content-type:mime-version :references:message-id:subject:cc:to:from:date:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=3HsIc5oa7SfTjXn5HfpWF7pds//yxw1/dVq8mya+hGA=; b=Qj/4gp4/Sr6ujuhqbDmTScl64i4YQGFxW+jIBjm+bG0tc09RcIdX3+3tZkSOxAeK0z s7BAW/LS+ZhAbNzDKESB7kFlwUNy14S4jcE8hhltV2e2p6kQSnOlNR5YCfOrV0rpc4Bp 6Q2S0I+omYYn4N1FlBY8bxxdcIf2o+dZgsdYDgIDwu33VQWE7KmN+QihCtB8JDvFI5U3 lRJebtSxHKPITZNt8BMqHHW61kaTJrr79Zj2oO8OI3tmocQ4XbMcNgtNr27FKGD3GGI4 mZlK8pkopUDJl+bT3CkXKCNv7qBouvrZ8me+otAfakeurFHrfsguzdgnpdLsAphp/5CC SqLA== X-Forwarded-Encrypted: i=1; AHgh+RquU33D19EKnX6uDXXKa+XI8F0UaFynQlvNBjXb42s4a3FdAHIR/8hRxUCzk/lyIHp7iK7qKjNWpXuKHck=@vger.kernel.org X-Gm-Message-State: AFuF++kkivjS2rnAU3YLmVRpnq7PNzuhmizsQJVcGQY+ucyjMO+Lup/q h3DYaAiZZ56Jr8XR/npu+hiGEIprC6xepTfHZiLvoygOH//8PLGtQN/9 X-Gm-Gg: AR+sD10pwvgMKMbz5+2rMsqoHLpEzY2/wQFMEhXpddpfvvm7e4eO7MKTSTJWOlwi2V9 STSzsL5zVvwg9RrLWTheSdHX3BBhj+avvvJRUcCLiDREuwySLamhW7skkMMpKWeUhWkCEPJq1la vEYGrh+tZAH/h+4oMViobOI9V+qBAQ3b8zvy1RkqcWhw2+IW6wuTTH9dFcBMBnrqsxaELe2UnUy GW+LUBtPymqNFoaussTJQvY3vRDHFkWJytf6g13iBhkjIlX4zvNXFH1FQBGdJlKEhhFFB/ItuDU jtWunpQ2upPV9OSp0YSPcQz8wm60VUnkEY6I7fzYY3nalwg9f8zp8OtOqIRWtUL8pQrjQ/bLzbS LpGOe3unJr0seSaPjVk/5N3VAHCHu50vhHLBts9QT1ofX9h+Q8d68rxwQ/iS2RKsVN/vyUew7Hr BQJKclH6AifvXQMdGJcQX+3a6kaARDA9SIsW8HvyXz7HsIu0WY0CQ5+UeuAMn9rV5HHrAhs3Ryi vpDLWQB+7hB39nVSRKYdPt83fE4ftFLLh9yhzhifQtoozi9aPKefkxx5GTOq7WM1q0LYI1e77O4 W1pYVL1Kor50 X-Received: by 2002:a17:903:19cd:b0:2ca:a03a:29b2 with SMTP id d9443c01a7336-2d64affe4b4mr509346545ad.8.1787578928941; Mon, 24 Aug 2026 06:42:08 -0700 (PDT) Received: from nickhuang (2001-b400-e2a6-81a4-7c3d-29c5-dd1d-e725.emome-ip6.hinet.net. [2001:b400:e2a6:81a4:7c3d:29c5:dd1d:e725]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2d6768dc09asm18001275ad.76.2026.08.24.06.42.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Aug 2026 06:42:08 -0700 (PDT) Date: Mon, 24 Aug 2026 13:42:01 +0000 From: Nick Huang To: Shakeel Butt Cc: Andrew Morton , Dave Chinner , Roman Gushchin , Muchun Song , Qi Zheng , Meta kernel team , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Zenghui Yu , Nhat Pham Subject: Re: [PATCH] mm/shrinker: do not hold RCU lock in shrinker_debugfs_count_show() Message-ID: References: <20260610232048.62930-1-shakeel.butt@linux.dev> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20260610232048.62930-1-shakeel.butt@linux.dev> On Wed, Jun 10, 2026 at 04:20:48PM -0700, Shakeel Butt wrote: > Reading the debugfs "count" file of a memcg-aware shrinker can sleep > inside an RCU read-side critical section: > > BUG: sleeping function called from invalid context at kernel/cgroup/rstat.c:421 > RCU nest depth: 1, expected: 0 > css_rstat_flush > mem_cgroup_flush_stats > zswap_shrinker_count > shrinker_debugfs_count_show > > shrinker_debugfs_count_show() invokes the ->count_objects() callback > under rcu_read_lock(). The zswap callback flushes memcg stats via > css_rstat_flush(), which may sleep, so it must not run under RCU. > > The RCU lock is not needed here. mem_cgroup_iter() takes RCU internally > and returns a memcg holding a css reference (dropped on the next > iteration or by mem_cgroup_iter_break()), so the memcg stays alive > without it. The shrinker is kept alive by the open debugfs file: > shrinker_free() removes the debugfs entries via > debugfs_remove_recursive(), which waits for in-flight readers to drain, > before call_rcu(..., shrinker_free_rcu_cb). The sibling "scan" handler > already invokes the sleeping ->scan_objects() callback with no RCU > section. > > Drop the rcu_read_lock()/rcu_read_unlock(). > > Fixes: 5035ebc644ae ("mm: shrinkers: introduce debugfs interface for memory shrinkers") > Reported-by: Zenghui Yu > Closes: https://lore.kernel.org/all/c052a064-cddb-494f-a0d8-f8a10b4b1c4d@linux.dev/ > Suggested-by: Nhat Pham > Signed-off-by: Shakeel Butt > --- > mm/shrinker_debug.c | 4 ---- > 1 file changed, 4 deletions(-) > > diff --git a/mm/shrinker_debug.c b/mm/shrinker_debug.c > index affa64437302..cda4e86428c8 100644 > --- a/mm/shrinker_debug.c > +++ b/mm/shrinker_debug.c > @@ -57,8 +57,6 @@ static int shrinker_debugfs_count_show(struct seq_file *m, void *v) > if (!count_per_node) > return -ENOMEM; > > - rcu_read_lock(); > - > memcg_aware = shrinker->flags & SHRINKER_MEMCG_AWARE; > > memcg = mem_cgroup_iter(NULL, NULL, NULL); > @@ -88,8 +86,6 @@ static int shrinker_debugfs_count_show(struct seq_file *m, void *v) > } > } while ((memcg = mem_cgroup_iter(NULL, memcg, NULL)) != NULL); > > - rcu_read_unlock(); > - > kfree(count_per_node); > return ret; > } > -- > 2.53.0-Meta > Reviewed-by: Nick Huang