From nobody Sun Feb 8 05:37:25 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BFCC423507E; Tue, 10 Jun 2025 14:59:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749567585; cv=none; b=tc9kTjyXxC8VOgq6XZjNWDP83GNjtV89+jT9LXHbDjRIfqcPyp06hL1O/KZY3tbW0fiQaHxvVi/hU5NhWbjxrq/9JzHxaTOkSlwUCEvCOxYafD/fQLJRvK8Uj1ujL+QmRKRUXyNHn8pYX6T3/xyv0ZWYARYWHcY7r5TpstLVVyg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749567585; c=relaxed/simple; bh=kh/qFeLAyxVm0bBT3X1rDJqrmW5QgjHwPovsCE5exFQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=oz4PbxhiHFw//OryXzC8jXToTCsBVEUvffyShYi5TyuFhjdojhTDg29xCINlLYMGG8Mq5X8J0eBv3rsYltzVEgO87UKwzeaUtcQg69ifgeCxogB7ylr2mOTPp8yQ5TkppDPcIWL8QXg73I8dgKu0+YhFS8MMc2KHIVMKCeFDw9I= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=MCzZIQsO; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="MCzZIQsO" Received: by smtp.kernel.org (Postfix) with ESMTPSA id B3F37C4CEF1; Tue, 10 Jun 2025 14:59:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1749567585; bh=kh/qFeLAyxVm0bBT3X1rDJqrmW5QgjHwPovsCE5exFQ=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=MCzZIQsOECXqcmrna81KK3quV72mw6stAln0Y2nJrgEnaj9PGw5gYlO4PYQubt4xG vZg/mnai10U33TVRRNMTg+FUgcaIoHld0ccXeWnSdqoeNmXn8kglDkfEYOVA3MUEsb x//3H+HaR64sDZtP4OukNYHuudz2+HMeDqR6WuKrgVFreS+lFdU352xxFbbDBb12VC r4IvTV/8x0PXL7cnCYtBJeqUTRFYGZmpFT7wN/sltEVxppSSg9sF3pibbiIWk6qfWk VY751tsYM0PjRWMqtXuVXmOlU2+cj2/5vInNdH9NL6X4VmlAVSZHPAWIGDxt0N0bI4 4VMOcp9BEArjw== From: Jeff Layton Date: Tue, 10 Jun 2025 10:59:21 -0400 Subject: [PATCH v14 1/9] ref_tracker: don't use %pK in pr_ostream() output 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="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250610-reftrack-dbgfs-v14-1-efb532861428@kernel.org> References: <20250610-reftrack-dbgfs-v14-0-efb532861428@kernel.org> In-Reply-To: <20250610-reftrack-dbgfs-v14-0-efb532861428@kernel.org> To: Andrew Morton , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Tvrtko Ursulin Cc: Krzysztof Karas , Kuniyuki Iwashima , Qasim Ijaz , Nathan Chancellor , Andrew Lunn , linux-kernel@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, Jeff Layton , =?utf-8?q?Thomas_Wei=C3=9Fschuh?= X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1888; i=jlayton@kernel.org; h=from:subject:message-id; bh=kh/qFeLAyxVm0bBT3X1rDJqrmW5QgjHwPovsCE5exFQ=; b=owEBbQKS/ZANAwAKAQAOaEEZVoIVAcsmYgBoSEhbAWNgWom2fzGCJ+t5Z/GvnJq2l2QaCsQ/P tnSV9QgfrSJAjMEAAEKAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaEhIWwAKCRAADmhBGVaC Feq6D/4muyMWUff29ZCkmEl2BtTkrkuooi9rJVLs5x8uwJ233hNAgNw3ojWNub7eCfrlw8UWV4u 9JC+dK1U88vhlVJJ7ZqtNxkm0DqilTArDYXP53Y//gbS1prCpA9wEdK7cIL6yfySWt3jbUeV1z8 sowuJ53akcqMYe2eR5hv+PwzBxB73xgKRHsoxjW5t4Y7JE/OfijwifJag6p5oaF4lHESSL6ZMyQ 9bBVyv4xdO48HJFSw30pv5jYFwBpNr9vOxjtA0/8cQRfYqp14auPcwy92GVNn47xBBdCWoCuSnK F7LymjvcSUdfHU+KMwJRwx8bSVE6RxyeDJfwxH8bIy0pd/61+1h0NYTtdcnTR5fq3zpixfHxWSu tgLCLfnSIay1/9ZcCDMu5hRGg5srMwbZdUNuINjG8Y9RfzllRdMR/cMKYtPXdCWojSFd1BXebNS 2Ihg9+Mwhcd8NmI2bZ6tKEinlWFDlXlVYA8iu/tGISSRgoDUkQ2S8kgWAwfk8nw/jexfRqk1BPg r9YP/NREvCN8Y70Hu0Q6MrhvIG7WlpxkRcrZSUbWrvnG4JMNDPXmJE4t5PFby2yJrRCZuMpOYZf stHfx+A4ig+e1iGvj2p6T6Mv16ZwGpwTlTymVscmm89BzjdP/pfvMB82okRjc+DbQTZKLc08p7k 00Y5nT6khCf66Yg== X-Developer-Key: i=jlayton@kernel.org; a=openpgp; fpr=4BC0D7B24471B2A184EAF5D3000E684119568215 As Thomas Wei=C3=9Fschuh points out [1], it is now preferable to use %p instead of hashed pointers with printk(), since raw pointers should no longer be leaked into the kernel log. Change the ref_tracker infrastructure to use %p instead of %pK in its formats. [1]: https://lore.kernel.org/netdev/20250414-restricted-pointers-net-v1-0-1= 2af0ce46cdd@linutronix.de/ Cc: Thomas Wei=C3=9Fschuh Reviewed-by: Thomas Wei=C3=9Fschuh Reviewed-by: Krzysztof Karas Signed-off-by: Jeff Layton --- lib/ref_tracker.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/ref_tracker.c b/lib/ref_tracker.c index cf5609b1ca79361763abe5a3a98484a3ee591ff2..de71439e12a3bab6456910986fa= 611dfbdd97980 100644 --- a/lib/ref_tracker.c +++ b/lib/ref_tracker.c @@ -96,7 +96,7 @@ __ref_tracker_dir_pr_ostream(struct ref_tracker_dir *dir, =20 stats =3D ref_tracker_get_stats(dir, display_limit); if (IS_ERR(stats)) { - pr_ostream(s, "%s@%pK: couldn't get stats, error %pe\n", + pr_ostream(s, "%s@%p: couldn't get stats, error %pe\n", dir->name, dir, stats); return; } @@ -107,13 +107,13 @@ __ref_tracker_dir_pr_ostream(struct ref_tracker_dir *= dir, stack =3D stats->stacks[i].stack_handle; if (sbuf && !stack_depot_snprint(stack, sbuf, STACK_BUF_SIZE, 4)) sbuf[0] =3D 0; - pr_ostream(s, "%s@%pK has %d/%d users at\n%s\n", dir->name, dir, + pr_ostream(s, "%s@%p has %d/%d users at\n%s\n", dir->name, dir, stats->stacks[i].count, stats->total, sbuf); skipped -=3D stats->stacks[i].count; } =20 if (skipped) - pr_ostream(s, "%s@%pK skipped reports about %d/%d users.\n", + pr_ostream(s, "%s@%p skipped reports about %d/%d users.\n", dir->name, dir, skipped, stats->total); =20 kfree(sbuf); --=20 2.49.0 From nobody Sun Feb 8 05:37:25 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1311922E3FF; Tue, 10 Jun 2025 14:59:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749567588; cv=none; b=o3BomRl7ZGC2Q0ElakBgLV9RfbTT/npNTcO+FfD0vF4614SjQPgD+pNA01PhqQ15UYjrHt4r6t2TWSkik49dAXGZEDSERWhDTp+cF3rANl0aSFEKltY7OKXUc1ku+fENJJ0Ec3Gmq5CFW8O65GI4fnQslMLHs/19kpPEIVbzEoI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749567588; c=relaxed/simple; bh=Cf9EAXyNK0VxD7speigkvYTyuNOgS7Co5M1zyvhQst0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=shS+voSAY3QOOCleZXh6Xdqe3i3XJGAuwDXX43Sh9gNnscHmvzMrKdGWt/Ow4h7RxNMC2pVMKIoHmabB3YWWGaBrJMe7GYlCGC//WN8SUugTIdwFspuBzIjK3XPFTi4ZjWYDJG6ADn23vHZj3zAHBMt8zAlEBw+nGgyQdUL+Xrk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=jRVyUSQi; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="jRVyUSQi" Received: by smtp.kernel.org (Postfix) with ESMTPSA id CED83C4CEF3; Tue, 10 Jun 2025 14:59:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1749567587; bh=Cf9EAXyNK0VxD7speigkvYTyuNOgS7Co5M1zyvhQst0=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=jRVyUSQi5NSA/8G51s+61XcdJIiDrwXTSB5z9QhQftdni3LWaPEYBOAb87eSGyLm/ zFuXvaJ7Qx6GuvC1jjYNIKV7/G/FqLxZqOAyqr6diaqRU5V7ou2yxF1sVeo88CmhgQ 9yS4xnxq+KWDRap4WpGfmMRJk/NWj7YMrHNsy0iX9Mm8VdQd4rdB9qJkA11n0HLxf0 zfXgXcZIJzWfE/JpW+GkRqyWOXPuo/MjNQA42S2GwdMubVaYboz0sIhB7APoj+nCaT yeM6QIAWOU/MRoEj9f+2kvtZ4Q4ecqayPQ74Wn1EHiIXXlqLkT+U5jFDT+GaljGWmV R3Vtf5pFNdiBA== From: Jeff Layton Date: Tue, 10 Jun 2025 10:59:22 -0400 Subject: [PATCH v14 2/9] ref_tracker: add a top level debugfs directory for ref_tracker 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="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250610-reftrack-dbgfs-v14-2-efb532861428@kernel.org> References: <20250610-reftrack-dbgfs-v14-0-efb532861428@kernel.org> In-Reply-To: <20250610-reftrack-dbgfs-v14-0-efb532861428@kernel.org> To: Andrew Morton , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Tvrtko Ursulin Cc: Krzysztof Karas , Kuniyuki Iwashima , Qasim Ijaz , Nathan Chancellor , Andrew Lunn , linux-kernel@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, Jeff Layton X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1088; i=jlayton@kernel.org; h=from:subject:message-id; bh=Cf9EAXyNK0VxD7speigkvYTyuNOgS7Co5M1zyvhQst0=; b=owEBbQKS/ZANAwAKAQAOaEEZVoIVAcsmYgBoSEhb0Bhnkc9PAOi30w9auebrSUuXyd5qHc8q0 c2ofUayTW6JAjMEAAEKAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaEhIWwAKCRAADmhBGVaC FY9mD/92bM8abh1wNsArTm5QPT2mp6uHBRpU3d3q0Wqx5NX2sBpp4i976a2dlVesF4LwlD+NHTV UkAf43I1gMudrDtCUFEXfF7WqkA8WqvmE46VjC0efWLpF8wkHwiT7J3Xg6c9nQE2OyKd4xFnaU2 blAVVty1u9bJY8hDOs2WjVWzMLIqE2h793JS1uORilNVdc4BCMzHvV/+919AqURdh3vWH22hAfx IZM03cJlqnFvR9HC4re6RoR9k7oUSzOZI+ZoqRMc01k8JMfFCQQHvfRi+beVOfH0gZLUNPE4zit osn3+oqXWDI6zpGM/0fd1NiS7Y4/fdbr/vZwg+N6ymtkZfj8uaTIrSqebUSM5yIz7is6Ji6t1Qu Bnz6j1i83JTu+0IMzCdIOMHwwov/oVJd5pnJLtP7vSQkQGh8TlXyL+epG1b9Tzr+U0z9aMVyjJX vIFlgl3i4z8J6yi8oosD1kUsB9qPeVBiJL6t2EejGvlBFUSaL9/r5y2rbOtgIw+KPuCX282eCF9 skkGXCf36tra4DYscKf7OYWgHw6DP9hNV6jRzbgW1arSgPefy9fvLdZ1mG2cxWPJWyQXIh3Zt1k Mlh2O70jeMKs7KUN8Id2IeHU2BVd4yD0f7b/TubZKMoAt4XPhSALWOX4d25Hsst1BtNaZZdtWIt zf7fAEPcO0h1feg== X-Developer-Key: i=jlayton@kernel.org; a=openpgp; fpr=4BC0D7B24471B2A184EAF5D3000E684119568215 Add a new "ref_tracker" directory in debugfs. Each individual refcount tracker can register files under there to display info about currently-held references. Reviewed-by: Andrew Lunn Reviewed-by: Krzysztof Karas Signed-off-by: Jeff Layton --- lib/ref_tracker.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/lib/ref_tracker.c b/lib/ref_tracker.c index de71439e12a3bab6456910986fa611dfbdd97980..d374e5273e1497cac0d70c02c28= 2baa2c3ab63fe 100644 --- a/lib/ref_tracker.c +++ b/lib/ref_tracker.c @@ -273,3 +273,16 @@ int ref_tracker_free(struct ref_tracker_dir *dir, return 0; } EXPORT_SYMBOL_GPL(ref_tracker_free); + +#ifdef CONFIG_DEBUG_FS +#include + +static struct dentry *ref_tracker_debug_dir =3D (struct dentry *)-ENOENT; + +static int __init ref_tracker_debugfs_init(void) +{ + ref_tracker_debug_dir =3D debugfs_create_dir("ref_tracker", NULL); + return 0; +} +late_initcall(ref_tracker_debugfs_init); +#endif /* CONFIG_DEBUG_FS */ --=20 2.49.0 From nobody Sun Feb 8 05:37:25 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CAB102367AF; Tue, 10 Jun 2025 14:59:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749567589; cv=none; b=ct/99x20J3ue+EPekmTjWVuyClLE/d4AswGUTVvNgNekVBT40LEM1vtus0TEUkli8n49tqgSKz0TpLlorllx6iBPF3aIDxRs9aTSnku/aABVJTQejqtCTNUdlcYnt8CHP9u9OXUeX8tdxZJiBfQwJwfO5qAoEyyH4mv6ShtLMO4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749567589; c=relaxed/simple; bh=TA7LFTdMJDELDuvkJuuGw4yjXy1LcM/cr6YWykJIBfY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=K1xvzacYHCPy9VDMYurnvZzIP9nf7VIMMDgzqV/1bCCW4MjJVnPt1D4xzPGAvvDhahASBl5cp4ZKGGW1BsCXepbVPGGhw/aPdNrnI7kMoMN0cbqDFpnzgSaHfLmhAFc6YHZ0BSpMw6afdmchJRUhOg85hv0KgxSVQJUjGzNN5nY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=GNqqe3Ht; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="GNqqe3Ht" Received: by smtp.kernel.org (Postfix) with ESMTPSA id D81FBC4CEF0; Tue, 10 Jun 2025 14:59:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1749567589; bh=TA7LFTdMJDELDuvkJuuGw4yjXy1LcM/cr6YWykJIBfY=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=GNqqe3Ht7L5uldmEHCP7RLJaG2BHU3kY8H80TOvJVTiDeo5JFq+w20dyptvq/CkfF E1qitf9Vh1g3irZGKxiZhHYSQn8W+0L7g19lXcweWM4VKupRWGOu5xPqaOx3vUFFDR 15IRG54ikjZQ5oy2H1o9Eg0G5BQmKvgxpm9Lncy2KVtsttkiRMz/WY2JLte0F1wM4l uypoA3ITLKC9OtgGWEr23lugj8/gk1lLfG/Ij/r919tL1GSj2BT3q7Ys2ASVRfTDgf 00KBw1BAntWdwdgmQAFVjuYWvHCpNqL4RTkoGz6DbXREN5QsKGr1S5tDc1Qf8JO5DC yfbaM7I7o3RZA== From: Jeff Layton Date: Tue, 10 Jun 2025 10:59:23 -0400 Subject: [PATCH v14 3/9] ref_tracker: have callers pass output function to pr_ostream() 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="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250610-reftrack-dbgfs-v14-3-efb532861428@kernel.org> References: <20250610-reftrack-dbgfs-v14-0-efb532861428@kernel.org> In-Reply-To: <20250610-reftrack-dbgfs-v14-0-efb532861428@kernel.org> To: Andrew Morton , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Tvrtko Ursulin Cc: Krzysztof Karas , Kuniyuki Iwashima , Qasim Ijaz , Nathan Chancellor , Andrew Lunn , linux-kernel@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, Jeff Layton X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4259; i=jlayton@kernel.org; h=from:subject:message-id; bh=TA7LFTdMJDELDuvkJuuGw4yjXy1LcM/cr6YWykJIBfY=; b=owEBbQKS/ZANAwAKAQAOaEEZVoIVAcsmYgBoSEhbBaxUwN4zmjZxczwu5+EAvIJySnjzanBf0 QAwBGwzG+mJAjMEAAEKAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaEhIWwAKCRAADmhBGVaC FV+1EADPUoMc5SDvMOerP9H5Ji5Ywu/H6z3pilAz49hGSmmNpqumFD90az6zOBik1x2uagsUHH8 FtjrCnfzcIXeqy2ExfHIrm22zTcxxmQfZ/r02Q270v7lspfRF6528sui2LNq2KBYQZvejSywHW8 FG40u4hV/0XGNt0zxYGVBGfBFj5y2laaMK1HjZ5mnymOcA7rvaVk717oTAQrr3mpMAKYrp7O/E1 RkrHX/oczM/cQM7hW/wMzBG7Fne4qaQ4pbWzQ2IXjGY/5Sd4aapQq+AKhO7XadZbS+LbtoT1Yiz yV0Ne8LVh4bTnrljrziZp/jdOoxZTL/jpTCygQ4vulVDkChnwcO0kgVdt1kjSZ8f6qUrvTqqe6R 1q/NKh/wcy2bLtVCdRmtltqFHUf+zuIoifQ5q/avWysthzEuvSIt8Ugql8OSdd+GQbCijvOodrx lX93zrx3MXOc1YSaegRDubzNDdDUq+pVjS8jKzrKnqKN3mnAH1oek42h8jAtIQsaGgeuKUhxRAK 6brHvKV6jIoB8I3wXAu00ffDzDKzNaUz04gzJF6LBJdy7evjHIS+0CtZoMXggcvWtgqOyhDmqQu ezBxKfXGm2VsVgt1TjgrQxe5ysVdPbgdGU8rXhjyqwXCCl1Kfyl+xInvrHDIewGA/MDYJ8tEcXW E2MNjijdb7hiKLw== X-Developer-Key: i=jlayton@kernel.org; a=openpgp; fpr=4BC0D7B24471B2A184EAF5D3000E684119568215 In a later patch, we'll be adding a 3rd mechanism for outputting ref_tracker info via seq_file. Instead of a conditional, have the caller set a pointer to an output function in struct ostream. As part of this, the log prefix must be explicitly passed in, as it's too late for the pr_fmt macro. Reviewed-by: Andrew Lunn Signed-off-by: Jeff Layton Reviewed-by: Krzysztof Karas --- include/linux/ref_tracker.h | 2 ++ lib/ref_tracker.c | 52 ++++++++++++++++++++++++++++++++---------= ---- 2 files changed, 39 insertions(+), 15 deletions(-) diff --git a/include/linux/ref_tracker.h b/include/linux/ref_tracker.h index 8eac4f3d52547ccbaf9dcd09962ce80d26fbdff8..a0a1ee43724ffa00e60c116be18= e481bfe1d1455 100644 --- a/include/linux/ref_tracker.h +++ b/include/linux/ref_tracker.h @@ -6,6 +6,8 @@ #include #include =20 +#define __ostream_printf __printf(2, 3) + struct ref_tracker; =20 struct ref_tracker_dir { diff --git a/lib/ref_tracker.c b/lib/ref_tracker.c index d374e5273e1497cac0d70c02c282baa2c3ab63fe..42872f406b2a91b5bc611405cae= 7ce883fd8ed22 100644 --- a/lib/ref_tracker.c +++ b/lib/ref_tracker.c @@ -63,21 +63,38 @@ ref_tracker_get_stats(struct ref_tracker_dir *dir, unsi= gned int limit) } =20 struct ostream { + void __ostream_printf (*func)(struct ostream *stream, char *fmt, ...); + char *prefix; char *buf; int size, used; }; =20 +static void __ostream_printf pr_ostream_log(struct ostream *stream, char *= fmt, ...) +{ + va_list args; + + va_start(args, fmt); + vprintk(fmt, args); + va_end(args); +} + +static void __ostream_printf pr_ostream_buf(struct ostream *stream, char *= fmt, ...) +{ + int ret, len =3D stream->size - stream->used; + va_list args; + + va_start(args, fmt); + ret =3D vsnprintf(stream->buf + stream->used, len, fmt, args); + va_end(args); + if (ret > 0) + stream->used +=3D min(ret, len); +} + #define pr_ostream(stream, fmt, args...) \ ({ \ struct ostream *_s =3D (stream); \ \ - if (!_s->buf) { \ - pr_err(fmt, ##args); \ - } else { \ - int ret, len =3D _s->size - _s->used; \ - ret =3D snprintf(_s->buf + _s->used, len, pr_fmt(fmt), ##args); \ - _s->used +=3D min(ret, len); \ - } \ + _s->func(_s, fmt, ##args); \ }) =20 static void @@ -96,8 +113,8 @@ __ref_tracker_dir_pr_ostream(struct ref_tracker_dir *dir, =20 stats =3D ref_tracker_get_stats(dir, display_limit); if (IS_ERR(stats)) { - pr_ostream(s, "%s@%p: couldn't get stats, error %pe\n", - dir->name, dir, stats); + pr_ostream(s, "%s%s@%p: couldn't get stats, error %pe\n", + s->prefix, dir->name, dir, stats); return; } =20 @@ -107,14 +124,15 @@ __ref_tracker_dir_pr_ostream(struct ref_tracker_dir *= dir, stack =3D stats->stacks[i].stack_handle; if (sbuf && !stack_depot_snprint(stack, sbuf, STACK_BUF_SIZE, 4)) sbuf[0] =3D 0; - pr_ostream(s, "%s@%p has %d/%d users at\n%s\n", dir->name, dir, - stats->stacks[i].count, stats->total, sbuf); + pr_ostream(s, "%s%s@%p has %d/%d users at\n%s\n", s->prefix, + dir->name, dir, stats->stacks[i].count, + stats->total, sbuf); skipped -=3D stats->stacks[i].count; } =20 if (skipped) - pr_ostream(s, "%s@%p skipped reports about %d/%d users.\n", - dir->name, dir, skipped, stats->total); + pr_ostream(s, "%s%s@%p skipped reports about %d/%d users.\n", + s->prefix, dir->name, dir, skipped, stats->total); =20 kfree(sbuf); =20 @@ -124,7 +142,8 @@ __ref_tracker_dir_pr_ostream(struct ref_tracker_dir *di= r, void ref_tracker_dir_print_locked(struct ref_tracker_dir *dir, unsigned int display_limit) { - struct ostream os =3D {}; + struct ostream os =3D { .func =3D pr_ostream_log, + .prefix =3D "ref_tracker: " }; =20 __ref_tracker_dir_pr_ostream(dir, display_limit, &os); } @@ -143,7 +162,10 @@ EXPORT_SYMBOL(ref_tracker_dir_print); =20 int ref_tracker_dir_snprint(struct ref_tracker_dir *dir, char *buf, size_t= size) { - struct ostream os =3D { .buf =3D buf, .size =3D size }; + struct ostream os =3D { .func =3D pr_ostream_buf, + .prefix =3D "ref_tracker: ", + .buf =3D buf, + .size =3D size }; unsigned long flags; =20 spin_lock_irqsave(&dir->lock, flags); --=20 2.49.0 From nobody Sun Feb 8 05:37:25 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 199A5235052; Tue, 10 Jun 2025 14:59:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749567592; cv=none; b=GBJoq75wZiXZCzM+PK28fNLxM5NnWXvEMAM7y7eUzF7v10R2K4lF61YpTJEEDCdAcGI7SUaubN0nGzjJArjjFaLJIUPFeDwZJbeEVusDPmqjaXJ7eEWSGRoJpeTXI+OEpRo57/bif1VfKr4a6XS/2eqOAp4HIX+ozDHGWOIu/jM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749567592; c=relaxed/simple; bh=sDvBzK8bp/Z2sPKX3249YaEV241YJ6Xk50FlZaY0KPY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=fLrW9rnCQiNCHW8cAme4p/Mk+eof+s+X0eb8VsIjehYHb3MgeLeOm3O3ISltyu2UVEInC81hEFNgjIOze6reE4mIGhxSDy7/17wnQxMql/cRe0KhusDGsfY+QyJs9yiJrRk7QQqJXoEV3dYY1YzOAfFtOp4Pgkoga47TnTjZAus= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=KeQSNh67; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="KeQSNh67" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E1747C4CEF3; Tue, 10 Jun 2025 14:59:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1749567591; bh=sDvBzK8bp/Z2sPKX3249YaEV241YJ6Xk50FlZaY0KPY=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=KeQSNh67vtUl8X+urRiWp3K5tMh7rnfFMmHK7G5oCLikDHNqMdMQzb/j4Ifkai5Ot AX0DL+YdUTSzU2mjcgvaYEIWOJfQ8gbXL5LPqi66YWOkVWFJPk3AeEshbzA8aK9TKM QDSTpH7jSuaxbX8O/HlH55+ZiI4SOmUjs2QlzwRUDvdFTUUXSuZyt809rnG81xFm+h tTgVakiOIGJLRINsQSEiNvdTr9nDBsm742C2JYISKeZgOslotzNZzB3bnezbLsiFce bm+p6qEfbJRP18+bNo9jzA6OqemnBCIvNCpkLP1Rja4ATnoxEL61dPtlz+LUSculXd nRzLOlZGIvoEA== From: Jeff Layton Date: Tue, 10 Jun 2025 10:59:24 -0400 Subject: [PATCH v14 4/9] ref_tracker: add a static classname string to each ref_tracker_dir 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="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250610-reftrack-dbgfs-v14-4-efb532861428@kernel.org> References: <20250610-reftrack-dbgfs-v14-0-efb532861428@kernel.org> In-Reply-To: <20250610-reftrack-dbgfs-v14-0-efb532861428@kernel.org> To: Andrew Morton , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Tvrtko Ursulin Cc: Krzysztof Karas , Kuniyuki Iwashima , Qasim Ijaz , Nathan Chancellor , Andrew Lunn , linux-kernel@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, Jeff Layton X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=6203; i=jlayton@kernel.org; h=from:subject:message-id; bh=sDvBzK8bp/Z2sPKX3249YaEV241YJ6Xk50FlZaY0KPY=; b=owEBbQKS/ZANAwAKAQAOaEEZVoIVAcsmYgBoSEhcWfgeOiWExVMYAVfWu2ssAvojdefj6czlX EPvRCHNdzeJAjMEAAEKAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaEhIXAAKCRAADmhBGVaC FcsVEAC64sXyuR2WZW/x+h4KSMGEHpc//yvFp/Ov7veq6oSj/eRBsP/KlrajR1lHp8HB2hYxHZT gcbk6tElrXzn6oBZI/mhqfNoQBZO/zVvZFMmQOOwp5pNDwNZ49xvaisZagoY53HpzGawJ78okzB VJ3aHnSWdX9Ujn+OnevEELBTDfmgIFzd1KXJaYCAJmcvrEXifmixP/H4d6tiQBc+ZpW89ui7r3G T5yy9sEA9AkYEupq/7ajW6bWM/n/PR8H91HUrVusMhAK/6ycPF+mQQ+vc0rOvZHVrXMcttApHRo ZuVFHzt4UWma58r5K9H4N0NezCteZKOHAk2cA+Vs3S6/PNA8kOQGeaktuno+JRRuDxP1lu7CALV k21b3T1P7ZyivUpTMRzN8i3gq2Gwfl3S139JwrLBvABa+gX9tBg/0WtVdDhT0PP2j3+ZHE8lpsX I/h0KVwpdC8KHr6H5JzxoXHD20d02X2ffAoiKa6qBm1eWYAFys6pZEqL/ov47SmoPIr17XE4PIL B4CsrwIHUmvkewbsxD3HGqyGq5VZ4Oy76g7MN+qmZD8XBYa0IEsT93Ily2hvxOr4QIytUQpoC+l v7SXh+o1AV66OClZ4mv8qxs7dgMiNnaTMiFkmW5nmRUWXOgIjPHCnLI+6z01N70F48QkSLKTc8G 00vTZjdfJQx6DuQ== X-Developer-Key: i=jlayton@kernel.org; a=openpgp; fpr=4BC0D7B24471B2A184EAF5D3000E684119568215 A later patch in the series will be adding debugfs files for each ref_tracker that get created in ref_tracker_dir_init(). The format will be "class@%px". The current "name" string can vary between ref_tracker_dir objects of the same type, so it's not suitable for this purpose. Add a new "class" string to the ref_tracker dir that describes the the type of object (sans any individual info for that object). Also, in the i915 driver, gate the creation of debugfs files on whether the dentry pointer is still set to NULL. CI has shown that the ref_tracker_dir can be initialized more than once. Signed-off-by: Jeff Layton Reviewed-by: Krzysztof Karas --- drivers/gpu/drm/display/drm_dp_tunnel.c | 2 +- drivers/gpu/drm/i915/intel_runtime_pm.c | 4 +++- drivers/gpu/drm/i915/intel_wakeref.c | 3 ++- include/linux/ref_tracker.h | 4 ++++ lib/test_ref_tracker.c | 2 +- net/core/dev.c | 2 +- net/core/net_namespace.c | 4 ++-- 7 files changed, 14 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/display/drm_dp_tunnel.c b/drivers/gpu/drm/disp= lay/drm_dp_tunnel.c index 076edf1610480275c62395334ab0536befa42f15..b9c12b8bf2a3e400b6d8e9d1841= 45834c603b9e1 100644 --- a/drivers/gpu/drm/display/drm_dp_tunnel.c +++ b/drivers/gpu/drm/display/drm_dp_tunnel.c @@ -1920,7 +1920,7 @@ drm_dp_tunnel_mgr_create(struct drm_device *dev, int = max_group_count) } =20 #ifdef CONFIG_DRM_DISPLAY_DP_TUNNEL_STATE_DEBUG - ref_tracker_dir_init(&mgr->ref_tracker, 16, "dptun"); + ref_tracker_dir_init(&mgr->ref_tracker, 16, "drm_dptun", "dptun"); #endif =20 for (i =3D 0; i < max_group_count; i++) { diff --git a/drivers/gpu/drm/i915/intel_runtime_pm.c b/drivers/gpu/drm/i915= /intel_runtime_pm.c index 8d9f4c410546e4144d4bc8bbc6696f3bd9498848..90d90145a1890bf788e789858dd= ad3b3d8e3b978 100644 --- a/drivers/gpu/drm/i915/intel_runtime_pm.c +++ b/drivers/gpu/drm/i915/intel_runtime_pm.c @@ -59,7 +59,9 @@ static struct drm_i915_private *rpm_to_i915(struct intel_= runtime_pm *rpm) =20 static void init_intel_runtime_pm_wakeref(struct intel_runtime_pm *rpm) { - ref_tracker_dir_init(&rpm->debug, INTEL_REFTRACK_DEAD_COUNT, dev_name(rpm= ->kdev)); + if (!rpm->debug.class) + ref_tracker_dir_init(&rpm->debug, INTEL_REFTRACK_DEAD_COUNT, + "intel_runtime_pm", dev_name(rpm->kdev)); } =20 static intel_wakeref_t diff --git a/drivers/gpu/drm/i915/intel_wakeref.c b/drivers/gpu/drm/i915/in= tel_wakeref.c index 07e81be4d3920febece34709c63a63204a41583c..21dcee7c9a659ac1fb0aa19f301= 8647be3bda754 100644 --- a/drivers/gpu/drm/i915/intel_wakeref.c +++ b/drivers/gpu/drm/i915/intel_wakeref.c @@ -114,7 +114,8 @@ void __intel_wakeref_init(struct intel_wakeref *wf, "wakeref.work", &key->work, 0); =20 #if IS_ENABLED(CONFIG_DRM_I915_DEBUG_WAKEREF) - ref_tracker_dir_init(&wf->debug, INTEL_REFTRACK_DEAD_COUNT, name); + if (!wf->debug.class) + ref_tracker_dir_init(&wf->debug, INTEL_REFTRACK_DEAD_COUNT, "intel_waker= ef", name); #endif } =20 diff --git a/include/linux/ref_tracker.h b/include/linux/ref_tracker.h index a0a1ee43724ffa00e60c116be18e481bfe1d1455..3968f993db81e95c0d58c814543= 11841c1b9cd35 100644 --- a/include/linux/ref_tracker.h +++ b/include/linux/ref_tracker.h @@ -19,6 +19,7 @@ struct ref_tracker_dir { bool dead; struct list_head list; /* List of active trackers */ struct list_head quarantine; /* List of dead trackers */ + const char *class; /* object classname */ char name[32]; #endif }; @@ -27,6 +28,7 @@ struct ref_tracker_dir { =20 static inline void ref_tracker_dir_init(struct ref_tracker_dir *dir, unsigned int quarantine_count, + const char *class, const char *name) { INIT_LIST_HEAD(&dir->list); @@ -36,6 +38,7 @@ static inline void ref_tracker_dir_init(struct ref_tracke= r_dir *dir, dir->dead =3D false; refcount_set(&dir->untracked, 1); refcount_set(&dir->no_tracker, 1); + dir->class =3D class; strscpy(dir->name, name, sizeof(dir->name)); stack_depot_init(); } @@ -60,6 +63,7 @@ int ref_tracker_free(struct ref_tracker_dir *dir, =20 static inline void ref_tracker_dir_init(struct ref_tracker_dir *dir, unsigned int quarantine_count, + const char *class, const char *name) { } diff --git a/lib/test_ref_tracker.c b/lib/test_ref_tracker.c index b983ceb12afcb84ad60360a1e6fec0072e78ef79..d263502a4c1db248f64a66a468e= 96c8e4cffab25 100644 --- a/lib/test_ref_tracker.c +++ b/lib/test_ref_tracker.c @@ -64,7 +64,7 @@ static int __init test_ref_tracker_init(void) { int i; =20 - ref_tracker_dir_init(&ref_dir, 100, "selftest"); + ref_tracker_dir_init(&ref_dir, 100, "selftest", "selftest"); =20 timer_setup(&test_ref_tracker_timer, test_ref_tracker_timer_func, 0); mod_timer(&test_ref_tracker_timer, jiffies + 1); diff --git a/net/core/dev.c b/net/core/dev.c index be97c440ecd5f993344ae08d76c0b5216c4d296a..12cf4e5ae9c5437bcfec657e37b= 7e08792bc14bf 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -11715,7 +11715,7 @@ struct net_device *alloc_netdev_mqs(int sizeof_priv= , const char *name, =20 dev->priv_len =3D sizeof_priv; =20 - ref_tracker_dir_init(&dev->refcnt_tracker, 128, name); + ref_tracker_dir_init(&dev->refcnt_tracker, 128, "netdev", name); #ifdef CONFIG_PCPU_DEV_REFCNT dev->pcpu_refcnt =3D alloc_percpu(int); if (!dev->pcpu_refcnt) diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c index ae54f26709ca242567e5d62d7b5dcc7f6303da57..aa1e34181ed6f353921a23411fa= 227b612db661a 100644 --- a/net/core/net_namespace.c +++ b/net/core/net_namespace.c @@ -403,8 +403,8 @@ static __net_init void preinit_net(struct net *net, str= uct user_namespace *user_ { refcount_set(&net->passive, 1); refcount_set(&net->ns.count, 1); - ref_tracker_dir_init(&net->refcnt_tracker, 128, "net refcnt"); - ref_tracker_dir_init(&net->notrefcnt_tracker, 128, "net notrefcnt"); + ref_tracker_dir_init(&net->refcnt_tracker, 128, "net_refcnt", "net_refcnt= "); + ref_tracker_dir_init(&net->notrefcnt_tracker, 128, "net_notrefcnt", "net_= notrefcnt"); =20 get_random_bytes(&net->hash_mix, sizeof(u32)); net->dev_base_seq =3D 1; --=20 2.49.0 From nobody Sun Feb 8 05:37:25 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 10598238159; Tue, 10 Jun 2025 14:59:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749567594; cv=none; b=mirnhCxBVyFEBi3rxlQCqGXWf9WXIWK8M2u0D6GtfLy2bNISr8k+UnCQVUHYHK95RH/DaHdfJt8P8y8OxLvLOYCKV2nlGQ82JVFYUNKtplZoKi2X2yhuAWH91U4GC3t8fiH1cfN5U8ZZMMOFRoycYWy3R9q+BMfs5Q8WYjEHWzU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749567594; c=relaxed/simple; bh=fIUtfKsTxdswV0+z7NV6Nx2ljCgH4pcViNimfWT3u1o=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ehTUnf8Np9GQzyuOcw5xf4fbDUWfZ1NoBlr076x834hWNxoYUIeYbbySZuOeHI0LZP6BYvXg9sBkocTFX7eJra4xYPpiDZdav3C/N2sPWOp5Ua7x5WxoPCkYlGrEy646QxBcaT9anLGuxOrlnqdWdI+PQfvyH5CVne2Do58CnxU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=M5rL0v3E; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="M5rL0v3E" Received: by smtp.kernel.org (Postfix) with ESMTPSA id EBA0AC4CEF0; Tue, 10 Jun 2025 14:59:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1749567593; bh=fIUtfKsTxdswV0+z7NV6Nx2ljCgH4pcViNimfWT3u1o=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=M5rL0v3EHgtzm1+YPuRcK2PSIOLO9mlfBdonjLj5F4sfLQypAm1+pB1TXYtMM7fpk 6KLgCw5CkKufVZ1l0tkGw6xLxxX/1vMyCfzgLNZDdN0DPv0EyOAfhqHmBB0Xe1KO+1 0VXLviw2MPa0tpydfSLnut1HqjP2FFqsjAGEc4/FTXyy/RH6I9ZFP6zdePgiG18yB7 nZA7IqiEUXYtL9A2aSJbrsJRp7YASgQqfFnSb1gSFuPq4wi3h+r+yV04K2vTORqz9D HL8+Be9UTgYmTKddM1NeJzxOOM9X2twBrT9nli2s8bAMgU1mtfuj1CAOEjKH/cvfFr toNQhgU8MIaXA== From: Jeff Layton Date: Tue, 10 Jun 2025 10:59:25 -0400 Subject: [PATCH v14 5/9] ref_tracker: allow pr_ostream() to print directly to a seq_file 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="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250610-reftrack-dbgfs-v14-5-efb532861428@kernel.org> References: <20250610-reftrack-dbgfs-v14-0-efb532861428@kernel.org> In-Reply-To: <20250610-reftrack-dbgfs-v14-0-efb532861428@kernel.org> To: Andrew Morton , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Tvrtko Ursulin Cc: Krzysztof Karas , Kuniyuki Iwashima , Qasim Ijaz , Nathan Chancellor , Andrew Lunn , linux-kernel@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, Jeff Layton X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1919; i=jlayton@kernel.org; h=from:subject:message-id; bh=fIUtfKsTxdswV0+z7NV6Nx2ljCgH4pcViNimfWT3u1o=; b=owEBbQKS/ZANAwAKAQAOaEEZVoIVAcsmYgBoSEhcnHtf/8juAzoak1v6poZL6p29vAqIwvQWR a6pOohhBWyJAjMEAAEKAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaEhIXAAKCRAADmhBGVaC Ff+HD/9vTdoNPo+3wTbGpEMt9ydg3c6ivO2MrcOnnHyyGvkoa/t7uiHV1J93vQln5SQpAnQpjls RtfB3oXiuxy3z/9it2bTtHqUlES5HpHDPhycMos5uAtjlPpFYVUkGUnKKlSEzzMjfK3xzHyOmE7 1Aq3rXvaqxSU+SnxZRRVBECoSZn8Al1Wm7WRrpwmqGi38RD9zMBgl7VrqVcrSBwYe+WBaXg7erF VvajFxbiIRvv4CBFvVyhv3RXPWvknXC3sPs9mt2DEqpcEG3tuLsZUn4+EUBJedDdSwJK4UyaGcE k5pbvKZrUzUIzb0RNDlqYC76ej9KTT4I3UlqoLr8X3aoMSdM2vwmxQ3ve6UNL5DnHz89wzkwurZ E/B8XiseC1+x3kMON/Gcrwvu7v4hdggbPZdksjrgCQrCISoF4ka5AHjvh2/34bFCgbPjgDfBtbM iRj7E/OSQ6niXden1KFkbuekkrg/tP9B9/tYQMekqzw6kULbB7idAJF8eQWNqN7caOcHLoiEfYu ctfKLA0JCrrxTsBlPTjsKVW6PQvtMNf74ZwPHPDoe4TR2wlKNTpv6j/Wnod5L6VCoCIz/fbkZb0 crqSXwCGeryhbAdVz1gwGlD3m143OGGHltOGC83GRviAcRp+Vh6uwjx4EwcuLED38MCuvB88dUC RpjWRF4q3ehSslw== X-Developer-Key: i=jlayton@kernel.org; a=openpgp; fpr=4BC0D7B24471B2A184EAF5D3000E684119568215 Allow pr_ostream to also output directly to a seq_file without an intermediate buffer. The first caller of +ref_tracker_dir_seq_print() will come in a later patch, so mark that __maybe_unused for now. That designation will be removed once it is used. Reviewed-by: Andrew Lunn Signed-off-by: Jeff Layton Reviewed-by: Krzysztof Karas --- lib/ref_tracker.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/lib/ref_tracker.c b/lib/ref_tracker.c index 42872f406b2a91b5bc611405cae7ce883fd8ed22..73b606570cce9e551d13e65365a= 87dc4ce748b13 100644 --- a/lib/ref_tracker.c +++ b/lib/ref_tracker.c @@ -8,6 +8,7 @@ #include #include #include +#include =20 #define REF_TRACKER_STACK_ENTRIES 16 #define STACK_BUF_SIZE 1024 @@ -66,6 +67,7 @@ struct ostream { void __ostream_printf (*func)(struct ostream *stream, char *fmt, ...); char *prefix; char *buf; + struct seq_file *seq; int size, used; }; =20 @@ -301,6 +303,30 @@ EXPORT_SYMBOL_GPL(ref_tracker_free); =20 static struct dentry *ref_tracker_debug_dir =3D (struct dentry *)-ENOENT; =20 +static void __ostream_printf pr_ostream_seq(struct ostream *stream, char *= fmt, ...) +{ + va_list args; + + va_start(args, fmt); + seq_vprintf(stream->seq, fmt, args); + va_end(args); +} + +static __maybe_unused int +ref_tracker_dir_seq_print(struct ref_tracker_dir *dir, struct seq_file *se= q) +{ + struct ostream os =3D { .func =3D pr_ostream_seq, + .prefix =3D "", + .seq =3D seq }; + unsigned long flags; + + spin_lock_irqsave(&dir->lock, flags); + __ref_tracker_dir_pr_ostream(dir, 16, &os); + spin_unlock_irqrestore(&dir->lock, flags); + + return os.used; +} + static int __init ref_tracker_debugfs_init(void) { ref_tracker_debug_dir =3D debugfs_create_dir("ref_tracker", NULL); --=20 2.49.0 From nobody Sun Feb 8 05:37:25 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E931D239573; Tue, 10 Jun 2025 14:59:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749567596; cv=none; b=sy3gEIPBBNve3RxnRSWxozAwGmv54jnF3uzJPcYfBp5+UdL/bXeSvypOxDxrfvonk78jvJK6mXZgTuTOUSId8tO5cTHzUHeFnSVtHkxug9NtKzQyZwDfj4TNO3zQ04klUDm9NVJvg9e/kT7VDZBKJndnkkXDFv/POQHw5y7m4dw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749567596; c=relaxed/simple; bh=ob2J7Msv8h2cZKowGcg3nUnj/KyBV1iiFj/iRxCix9Q=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=sKOl6K3T/+hqC8N/XGeny0q3uUX0mthGO3lxfI2byJrAONpBJunVEfIMbbimKB0F3BYyx31hlE2qbb1dWOi1zsI+GOpw1winxO/Yndmkr5tVKZFETXy5tnm/Nei7bnJdHBDGO3ZMH8+MMHtv73LQz28ug5tEKXkexaLVsZ6Oimc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=qsGoeAqN; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="qsGoeAqN" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 019D8C4CEF6; Tue, 10 Jun 2025 14:59:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1749567595; bh=ob2J7Msv8h2cZKowGcg3nUnj/KyBV1iiFj/iRxCix9Q=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=qsGoeAqN/2CN0puEK0XlHTa1qGoG8bfo7dRj02BHIV1ZgHmXOpTQvXt9gbxEI/Jgk SAll1SyhelrX/tj4HaA3tmvjJYcTkwq5xRT3rp1PHEG7u5war2fvqluHol3afuOBPp AlktCdTIAR0Ljl29AVbofsmpfRoP6THSgxjfSlF+Ognwl1uNl89o39a0JsPrd/W26k N37XrR69Rnsr6JUHW9qTZwmmdi9xi+6EeoQ1MQVIt/POGwErbv31/ehwp1GgOUrxif gyENj3CeszHTud5gX8lBzfr9B8ZlyBwUPm2Ln5a5zCQ/XYGLBNE/gratKCRoPc0Asj XtJZiczyvvFPA== From: Jeff Layton Date: Tue, 10 Jun 2025 10:59:26 -0400 Subject: [PATCH v14 6/9] ref_tracker: automatically register a file in debugfs for a ref_tracker_dir 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="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250610-reftrack-dbgfs-v14-6-efb532861428@kernel.org> References: <20250610-reftrack-dbgfs-v14-0-efb532861428@kernel.org> In-Reply-To: <20250610-reftrack-dbgfs-v14-0-efb532861428@kernel.org> To: Andrew Morton , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Tvrtko Ursulin Cc: Krzysztof Karas , Kuniyuki Iwashima , Qasim Ijaz , Nathan Chancellor , Andrew Lunn , linux-kernel@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, Jeff Layton X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=8555; i=jlayton@kernel.org; h=from:subject:message-id; bh=ob2J7Msv8h2cZKowGcg3nUnj/KyBV1iiFj/iRxCix9Q=; b=owEBbQKS/ZANAwAKAQAOaEEZVoIVAcsmYgBoSEhcmmuM8Z5aF9Wr0CHZ2yxOD9QkATP6OhjEG 7u5qWbEDHKJAjMEAAEKAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaEhIXAAKCRAADmhBGVaC FT9ND/0TtO4WqgMGYyGM1SB88qkEkTv1o6pnZMFgt5k7UCy2YJkEVWpxuUYeVS4IxtLzBeF928l p6y6emxrASi5dBhTqjLkdApzwMsQ1eNG/NYP8VjeySldZNeT+U+u2b5KlB9Emsm8IVO3ptBYZ1F rjFh4cTLMQsDBiDJRqwyuU3EgEW/Isg1mjA5fKbL14+TzXCeMm4IhhLXqHQnhYN66/Lq6Q1FT3/ FPSX+Zn9jy2zd1FToBAx9XUA5prCpjU//vDf5Rv4mM0bl5iyvJS3EXEpy9rZzxJTwk8tdK8ERJs Rav1Cpkyyu1GsaX+LyH/aZEIbhikF3GhFp2RvIFBmVn9LBKtM6ugIqq7x6eht8YUyfmDbXu+P85 sLtRbItiVWHWdGpEstFKmvFmytv/ArE/xCYgmZC2iB1CM1fR0FwOLbI8fUgN758ywT3V0740lAt f8YEHmsnJ5RwuV3OoExcQV/OAJtwDrGmRsd3Wv7dkN01l799Xg19tCEjVjaV5ILEYiocKtEGBQx LrPJsVWbfUn3ofAIxUXAvJ4XRLYWIZXPJcqkTjAUf1ys7j5CR5CCFfwNf7TJB2H1pxuTH7xhEEC Bi7wp42R3F9FBXEXyy3vOB1ZlBo6S9joWMd85sfnXpiVGvbViSDPiIHQbjKrwGhPlBAyDkX/DjT /XAeGfna/8s6hFA== X-Developer-Key: i=jlayton@kernel.org; a=openpgp; fpr=4BC0D7B24471B2A184EAF5D3000E684119568215 Currently, there is no convenient way to see the info that the ref_tracking infrastructure collects. Attempt to create a file in debugfs when called from ref_tracker_dir_init(). The file is given the name "class@%px", as having the unmodified address is helpful for debugging. This should be safe since this directory is only accessible by root While ref_tracker_dir_init() is generally called from a context where sleeping is OK, ref_tracker_dir_exit() can be called from anywhere. Thus, dentry cleanup must be handled asynchronously. Add a new global xarray that has entries with the ref_tracker_dir pointer as the index and the corresponding debugfs dentry pointer as the value. Instead of removing the debugfs dentry, have ref_tracker_dir_exit() set a mark on the xarray entry and schedule a workqueue job. The workqueue job then walks the xarray looking for marked entries, and removes their xarray entries and the debugfs dentries. Because of this, the debugfs dentry can outlive the corresponding ref_tracker_dir. Have ref_tracker_debugfs_show() take extra care to ensure that it's safe to dereference the dir pointer before using it. Signed-off-by: Jeff Layton --- include/linux/ref_tracker.h | 17 +++++ lib/ref_tracker.c | 147 ++++++++++++++++++++++++++++++++++++++++= ++-- 2 files changed, 159 insertions(+), 5 deletions(-) diff --git a/include/linux/ref_tracker.h b/include/linux/ref_tracker.h index 3968f993db81e95c0d58c81454311841c1b9cd35..28bbf436a8f4646cfac181d6181= 95a9460bda196 100644 --- a/include/linux/ref_tracker.h +++ b/include/linux/ref_tracker.h @@ -26,6 +26,18 @@ struct ref_tracker_dir { =20 #ifdef CONFIG_REF_TRACKER =20 +#ifdef CONFIG_DEBUG_FS + +void ref_tracker_dir_debugfs(struct ref_tracker_dir *dir); + +#else /* CONFIG_DEBUG_FS */ + +static inline void ref_tracker_dir_debugfs(struct ref_tracker_dir *dir) +{ +} + +#endif /* CONFIG_DEBUG_FS */ + static inline void ref_tracker_dir_init(struct ref_tracker_dir *dir, unsigned int quarantine_count, const char *class, @@ -40,6 +52,7 @@ static inline void ref_tracker_dir_init(struct ref_tracke= r_dir *dir, refcount_set(&dir->no_tracker, 1); dir->class =3D class; strscpy(dir->name, name, sizeof(dir->name)); + ref_tracker_dir_debugfs(dir); stack_depot_init(); } =20 @@ -68,6 +81,10 @@ static inline void ref_tracker_dir_init(struct ref_track= er_dir *dir, { } =20 +static inline void ref_tracker_dir_debugfs(struct ref_tracker_dir *dir) +{ +} + static inline void ref_tracker_dir_exit(struct ref_tracker_dir *dir) { } diff --git a/lib/ref_tracker.c b/lib/ref_tracker.c index 73b606570cce9e551d13e65365a87dc4ce748b13..4f1c4fe5e6b1274b6aeb733a3f8= c06d1dff003f5 100644 --- a/lib/ref_tracker.c +++ b/lib/ref_tracker.c @@ -29,6 +29,35 @@ struct ref_tracker_dir_stats { } stacks[]; }; =20 +#ifdef CONFIG_DEBUG_FS +#include + +/* + * ref_tracker_dir_init() is usually called in allocation-safe contexts, b= ut + * the same is not true of ref_tracker_dir_exit() which can be called from + * anywhere an object is freed. Removing debugfs dentries is a blocking + * operation, so we defer that work to the debugfs_reap_worker. + * + * Each dentry is tracked in the appropriate xarray. When + * ref_tracker_dir_exit() is called, its entries in the xarrays are marked= and + * the workqueue job is scheduled. The worker then runs and deletes any ma= rked + * dentries asynchronously. + */ +static struct xarray debugfs_dentries; +static struct work_struct debugfs_reap_worker; + +#define REF_TRACKER_DIR_DEAD XA_MARK_0 +static inline void ref_tracker_debugfs_mark(struct ref_tracker_dir *dir) +{ + xa_set_mark(&debugfs_dentries, (unsigned long)dir, REF_TRACKER_DIR_DEAD); + schedule_work(&debugfs_reap_worker); +} +#else +static inline void ref_tracker_debugfs_mark(struct ref_tracker_dir *dir) +{ +} +#endif + static struct ref_tracker_dir_stats * ref_tracker_get_stats(struct ref_tracker_dir *dir, unsigned int limit) { @@ -185,6 +214,11 @@ void ref_tracker_dir_exit(struct ref_tracker_dir *dir) bool leak =3D false; =20 dir->dead =3D true; + /* + * The xarray entries must be marked before the dir->lock is taken to + * protect simultaneous debugfs readers. + */ + ref_tracker_debugfs_mark(dir); spin_lock_irqsave(&dir->lock, flags); list_for_each_entry_safe(tracker, n, &dir->quarantine, head) { list_del(&tracker->head); @@ -312,23 +346,126 @@ static void __ostream_printf pr_ostream_seq(struct o= stream *stream, char *fmt, . va_end(args); } =20 -static __maybe_unused int -ref_tracker_dir_seq_print(struct ref_tracker_dir *dir, struct seq_file *se= q) +static int ref_tracker_dir_seq_print(struct ref_tracker_dir *dir, struct s= eq_file *seq) { struct ostream os =3D { .func =3D pr_ostream_seq, .prefix =3D "", .seq =3D seq }; - unsigned long flags; =20 - spin_lock_irqsave(&dir->lock, flags); __ref_tracker_dir_pr_ostream(dir, 16, &os); - spin_unlock_irqrestore(&dir->lock, flags); =20 return os.used; } =20 +static int ref_tracker_debugfs_show(struct seq_file *f, void *v) +{ + struct ref_tracker_dir *dir =3D f->private; + unsigned long index =3D (unsigned long)dir; + unsigned long flags; + int ret; + + /* + * "dir" may not exist at this point if ref_tracker_dir_exit() has + * already been called. Take care not to dereference it until its + * legitimacy is established. + * + * The xa_lock is necessary to ensure that "dir" doesn't disappear + * before its lock can be taken. If it's in the hash and not marked + * dead, then it's safe to take dir->lock which prevents + * ref_tracker_dir_exit() from completing. Once the dir->lock is + * acquired, the xa_lock can be released. All of this must be IRQ-safe. + */ + xa_lock_irqsave(&debugfs_dentries, flags); + if (!xa_load(&debugfs_dentries, index) || + xa_get_mark(&debugfs_dentries, index, REF_TRACKER_DIR_DEAD)) { + xa_unlock_irqrestore(&debugfs_dentries, flags); + return -ENODATA; + } + + spin_lock(&dir->lock); + xa_unlock(&debugfs_dentries); + ret =3D ref_tracker_dir_seq_print(dir, f); + spin_unlock_irqrestore(&dir->lock, flags); + return ret; +} + +static int ref_tracker_debugfs_open(struct inode *inode, struct file *filp) +{ + struct ref_tracker_dir *dir =3D inode->i_private; + + return single_open(filp, ref_tracker_debugfs_show, dir); +} + +static const struct file_operations ref_tracker_debugfs_fops =3D { + .owner =3D THIS_MODULE, + .open =3D ref_tracker_debugfs_open, + .read =3D seq_read, + .llseek =3D seq_lseek, + .release =3D single_release, +}; + +/** + * ref_tracker_dir_debugfs - create debugfs file for ref_tracker_dir + * @dir: ref_tracker_dir to be associated with debugfs file + * + * In most cases, a debugfs file will be created automatically for every + * ref_tracker_dir. If the object was created before debugfs is brought up + * then that may fail. In those cases, it is safe to call this at a later + * time to create the file. + */ +void ref_tracker_dir_debugfs(struct ref_tracker_dir *dir) +{ + char name[NAME_MAX + 1]; + struct dentry *dentry; + int ret; + + /* No-op if already created */ + dentry =3D xa_load(&debugfs_dentries, (unsigned long)dir); + if (dentry && !xa_is_err(dentry)) + return; + + ret =3D snprintf(name, sizeof(name), "%s@%px", dir->class, dir); + name[sizeof(name) - 1] =3D '\0'; + + if (ret < sizeof(name)) { + dentry =3D debugfs_create_file(name, S_IFREG | 0400, + ref_tracker_debug_dir, dir, + &ref_tracker_debugfs_fops); + if (!IS_ERR(dentry)) { + void *old; + + old =3D xa_store(&debugfs_dentries, (unsigned long)dir, + dentry, GFP_KERNEL); + + if (xa_is_err(old)) + debugfs_remove(dentry); + else + WARN_ON_ONCE(old); + } + } +} +EXPORT_SYMBOL(ref_tracker_dir_debugfs); + +static void debugfs_reap_work(struct work_struct *work) +{ + struct dentry *dentry; + unsigned long index; + bool reaped; + + do { + reaped =3D false; + xa_for_each_marked(&debugfs_dentries, index, dentry, REF_TRACKER_DIR_DEA= D) { + xa_erase(&debugfs_dentries, index); + debugfs_remove(dentry); + reaped =3D true; + } + } while (reaped); +} + static int __init ref_tracker_debugfs_init(void) { + INIT_WORK(&debugfs_reap_worker, debugfs_reap_work); + xa_init_flags(&debugfs_dentries, XA_FLAGS_LOCK_IRQ); ref_tracker_debug_dir =3D debugfs_create_dir("ref_tracker", NULL); return 0; } --=20 2.49.0 From nobody Sun Feb 8 05:37:25 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 46DFC239E83; Tue, 10 Jun 2025 14:59:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749567598; cv=none; b=p1D3ZQT2m092ZNcJJ/NRFB2g9OHkf8Njlrr6ftrsOgGULJOlZKwisdXBOBhx4vI0Z+QW0lUw/S48Fo5WkTCgQGeDcPqk8iGMzRe2CAL6fF/r7Pe6/aVa1wqHnVDt61Oj78Lon3yVvF5BL4zOnXvMAR0vtSTAbPH2oOJr4TNWf34= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749567598; c=relaxed/simple; bh=7m03JAiZi1htmYekkvb9rqbrYXBGjMPA6O2hU2YNZfg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=eRse7GjUbmFM2xxh3pGrKF+5I+PebwQ4i/PfEuVHQPwxhVdC2QokyhWJWJ5hCDvDCPzWk4rZyYL/YMFVdcXtx+xuaqjj+mh0AtfXTjFZXb3f/6GJ1YoV3FxfIkWuZZNT2QfNVtbNjE8uYyFBKZP7SNjlmij0OHwNgDzxUshdfUE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=X1mBI/Br; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="X1mBI/Br" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0C9FCC4CEF0; Tue, 10 Jun 2025 14:59:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1749567597; bh=7m03JAiZi1htmYekkvb9rqbrYXBGjMPA6O2hU2YNZfg=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=X1mBI/BrkIVVEi+7ujtAIxmQkOD0Q6zJvDHYsEFEsjx6XHANtrx0AIjuPAdMRZA2s mmUJonEAmz/SXll8JOLXEKuK53RMgRk77nBiZ53uWzsm0Swt2GaDRlx/ILeUZ2QuHI ug33Cvpb5WsLgQqaSqUxQixugGUB/Wb8EqR/OQqTtv79mxsDxqagtNl9jFcuf7cZpo YokBQsWzbj3F+uiiU8LGWd/S4ZckjcVv2VQFypZzqwmrJwg6rzuccitMIGhz09KVwZ UFTRea9e/hgEjvg+vndDCSQgIGE2Ye3v8GCiHExlGQndDEt6Da3W3Ohn1JZfEkjiFd XqGjOJPs0u6Sg== From: Jeff Layton Date: Tue, 10 Jun 2025 10:59:27 -0400 Subject: [PATCH v14 7/9] ref_tracker: add a way to create a symlink to the ref_tracker_dir debugfs file 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="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250610-reftrack-dbgfs-v14-7-efb532861428@kernel.org> References: <20250610-reftrack-dbgfs-v14-0-efb532861428@kernel.org> In-Reply-To: <20250610-reftrack-dbgfs-v14-0-efb532861428@kernel.org> To: Andrew Morton , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Tvrtko Ursulin Cc: Krzysztof Karas , Kuniyuki Iwashima , Qasim Ijaz , Nathan Chancellor , Andrew Lunn , linux-kernel@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, Jeff Layton X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4362; i=jlayton@kernel.org; h=from:subject:message-id; bh=7m03JAiZi1htmYekkvb9rqbrYXBGjMPA6O2hU2YNZfg=; b=owEBbQKS/ZANAwAKAQAOaEEZVoIVAcsmYgBoSEhcWNIJlZnhzGeL+qd5tiKogrC7IEUHAoeQK t1pfDqVMsOJAjMEAAEKAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaEhIXAAKCRAADmhBGVaC FdCCD/9LbCB1ebJIYKI+eoqgpNwqW3aTFJ7tA44mMMmfutC61PKkSsKyo5uqkjFFWGNJK9ks4w2 VWtCcInLhjQv1y5eyaSXJYpvsO2Bq0AN7cYotbEKRECILXHGeMuhgRFeTHRRvlWr/1NZEfquf0I yp+StaxcLp0cGwglPEcPrJt3TG5rEfkR6krnUgRUSBuWG9Mc23VRXL3H9ZHctWaegIPPqpT8WMC zlcddrtnepAqTXMHvADW+ay0LmlsDnZU4CUHfBJrQjT/TfIntT05O5IBvJjeTPSWmHxOEkaSVPD 6rbLTfNva5i4Xf4dDp1LCWO1svJDvuxWJ3gJg/ymyE3jWhdU9eLfR/S5+1CpG8qCLRjKEUgna8/ 4luzUmakSd+N7JynGyBWo3nuXgP21+KPiu9VXRw/z1EDP0nepDxestwAvXBpqertI+2G4x7itBz Pj9doyav+xYb76++p1/9MRSMlmrzLa1G2bz3xobfSKwIdF2SQguu6gCLN71wCivVNzEHKe9Xszh Iz0uVLsq27x6JW717pSd/bIi1qOohun4jimiJgbefaEZ+9OxnUZf0pslvdZtvedgnm8R3HqqChx Z9+xRYptUJMzJX+rFF5yiKLeS20DT4ECRduC/crgtLz/FuRk6mkdAYBRPi8j1UAHJGAUkW9WVPR Zq5Vm/5SMnP+XRA== X-Developer-Key: i=jlayton@kernel.org; a=openpgp; fpr=4BC0D7B24471B2A184EAF5D3000E684119568215 Add the ability for a subsystem to add a user-friendly symlink that points to a ref_tracker_dir's debugfs file. Add a separate debugfs_symlinks xarray and use that to track symlinks. The reaper workqueue job will remove symlinks before their corresponding dentries. Signed-off-by: Jeff Layton --- include/linux/ref_tracker.h | 11 +++++++++++ lib/ref_tracker.c | 47 +++++++++++++++++++++++++++++++++++++++++= ++++ 2 files changed, 58 insertions(+) diff --git a/include/linux/ref_tracker.h b/include/linux/ref_tracker.h index 28bbf436a8f4646cfac181d618195a9460bda196..e1323de93bf6b891aa14ad8d9b4= b28d02e10f9f7 100644 --- a/include/linux/ref_tracker.h +++ b/include/linux/ref_tracker.h @@ -29,6 +29,7 @@ struct ref_tracker_dir { #ifdef CONFIG_DEBUG_FS =20 void ref_tracker_dir_debugfs(struct ref_tracker_dir *dir); +void ref_tracker_dir_symlink(struct ref_tracker_dir *dir, const char *fmt,= ...); =20 #else /* CONFIG_DEBUG_FS */ =20 @@ -36,6 +37,11 @@ static inline void ref_tracker_dir_debugfs(struct ref_tr= acker_dir *dir) { } =20 +static inline __ostream_printf +void ref_tracker_dir_symlink(struct ref_tracker_dir *dir, const char *fmt,= ...) +{ +} + #endif /* CONFIG_DEBUG_FS */ =20 static inline void ref_tracker_dir_init(struct ref_tracker_dir *dir, @@ -85,6 +91,11 @@ static inline void ref_tracker_dir_debugfs(struct ref_tr= acker_dir *dir) { } =20 +static inline __ostream_printf +void ref_tracker_dir_symlink(struct ref_tracker_dir *dir, const char *fmt,= ...) +{ +} + static inline void ref_tracker_dir_exit(struct ref_tracker_dir *dir) { } diff --git a/lib/ref_tracker.c b/lib/ref_tracker.c index 4f1c4fe5e6b1274b6aeb733a3f8c06d1dff003f5..a78741308a2c2dc7aff65519970= ad081b59e0de5 100644 --- a/lib/ref_tracker.c +++ b/lib/ref_tracker.c @@ -44,11 +44,13 @@ struct ref_tracker_dir_stats { * dentries asynchronously. */ static struct xarray debugfs_dentries; +static struct xarray debugfs_symlinks; static struct work_struct debugfs_reap_worker; =20 #define REF_TRACKER_DIR_DEAD XA_MARK_0 static inline void ref_tracker_debugfs_mark(struct ref_tracker_dir *dir) { + xa_set_mark(&debugfs_symlinks, (unsigned long)dir, REF_TRACKER_DIR_DEAD); xa_set_mark(&debugfs_dentries, (unsigned long)dir, REF_TRACKER_DIR_DEAD); schedule_work(&debugfs_reap_worker); } @@ -446,6 +448,45 @@ void ref_tracker_dir_debugfs(struct ref_tracker_dir *d= ir) } EXPORT_SYMBOL(ref_tracker_dir_debugfs); =20 +void __ostream_printf ref_tracker_dir_symlink(struct ref_tracker_dir *dir,= const char *fmt, ...) +{ + char name[NAME_MAX + 1]; + struct dentry *symlink, *dentry; + va_list args; + int ret; + + symlink =3D xa_load(&debugfs_symlinks, (unsigned long)dir); + dentry =3D xa_load(&debugfs_dentries, (unsigned long)dir); + + /* Already created?*/ + if (symlink && !xa_is_err(symlink)) + return; + + if (!dentry || xa_is_err(dentry)) + return; + + va_start(args, fmt); + ret =3D vsnprintf(name, sizeof(name), fmt, args); + va_end(args); + name[sizeof(name) - 1] =3D '\0'; + + if (ret < sizeof(name)) { + symlink =3D debugfs_create_symlink(name, ref_tracker_debug_dir, + dentry->d_name.name); + if (!IS_ERR(symlink)) { + void *old; + + old =3D xa_store(&debugfs_symlinks, (unsigned long)dir, + symlink, GFP_KERNEL); + if (xa_is_err(old)) + debugfs_remove(symlink); + else + WARN_ON_ONCE(old); + } + } +} +EXPORT_SYMBOL(ref_tracker_dir_symlink); + static void debugfs_reap_work(struct work_struct *work) { struct dentry *dentry; @@ -454,6 +495,11 @@ static void debugfs_reap_work(struct work_struct *work) =20 do { reaped =3D false; + xa_for_each_marked(&debugfs_symlinks, index, dentry, REF_TRACKER_DIR_DEA= D) { + xa_erase(&debugfs_symlinks, index); + debugfs_remove(dentry); + reaped =3D true; + } xa_for_each_marked(&debugfs_dentries, index, dentry, REF_TRACKER_DIR_DEA= D) { xa_erase(&debugfs_dentries, index); debugfs_remove(dentry); @@ -466,6 +512,7 @@ static int __init ref_tracker_debugfs_init(void) { INIT_WORK(&debugfs_reap_worker, debugfs_reap_work); xa_init_flags(&debugfs_dentries, XA_FLAGS_LOCK_IRQ); + xa_init_flags(&debugfs_symlinks, XA_FLAGS_LOCK_IRQ); ref_tracker_debug_dir =3D debugfs_create_dir("ref_tracker", NULL); return 0; } --=20 2.49.0 From nobody Sun Feb 8 05:37:25 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0E1CC23ABAB; Tue, 10 Jun 2025 15:00:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749567600; cv=none; b=Bc0FR6hl46f8nGv5XKoGLNrmNStrk0XAYlPVIYEENUkmsKjXfZ2abS2Ezp4NIOIjau+OP1SgNumZn21S59dDe0nWxrMw6ls7vxnjXgQQp54ZXySBkpYF3sULWLkTbW3zOTDA54tkY4In/09XmTJF6y5G6d0fyci742tG/rjqIuo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749567600; c=relaxed/simple; bh=YMnNgfS5IcXRGDhGxBj9UTTtfo/Re9Qj3nh2BIc6ugE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=pDGqsq+Jb7DPwrUFOKimlfTlCkPDdFOWHe6we/byoD+glalZWhp7/bdvG/X5+eqGdmLlILzE3UDCvn4gWK/FA8k8lkgXaobPxY9R6PwXxSs0vAmM0B3Xup//PSYk4xflC72QKkQWy/LKXUdLr0LDfZeZhvf7OrYWijV/yUqxxYM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=RxVsxavL; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="RxVsxavL" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 176C0C4CEF1; Tue, 10 Jun 2025 14:59:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1749567599; bh=YMnNgfS5IcXRGDhGxBj9UTTtfo/Re9Qj3nh2BIc6ugE=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=RxVsxavLcI+lnDIlga13yI8c0cnXUE9sFNR97RHIQ8gqYoB/LYT7CSZnbSdnybg/f aN3EBGN2663enOloyG+dSipZzBaaw5S24ueXREuMLpNx+23EzIKlvQtq5hNJjfliBh erNCbTXh1JDBnFP7Zg97mHmf0dF6LDzG7WaqBXZBSwMLckwP1xztgF4ObV8OBaXhJk pv+2pCKwRtztQPbkDBenDtHKj0Lst64FJAdYR2fTxBuo1rZ5OBnP6cjvBxsaygIT/C 5iJDOPy68hRyEZLFvSbrXPc08Z+8pZI1Ok1bgYyl3mx7gC4Ax/c4rbPaZjq7Xylm+C rCyJTmN/CUTPg== From: Jeff Layton Date: Tue, 10 Jun 2025 10:59:28 -0400 Subject: [PATCH v14 8/9] net: add symlinks to ref_tracker_dir for netns 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="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250610-reftrack-dbgfs-v14-8-efb532861428@kernel.org> References: <20250610-reftrack-dbgfs-v14-0-efb532861428@kernel.org> In-Reply-To: <20250610-reftrack-dbgfs-v14-0-efb532861428@kernel.org> To: Andrew Morton , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Tvrtko Ursulin Cc: Krzysztof Karas , Kuniyuki Iwashima , Qasim Ijaz , Nathan Chancellor , Andrew Lunn , linux-kernel@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, Jeff Layton X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1850; i=jlayton@kernel.org; h=from:subject:message-id; bh=YMnNgfS5IcXRGDhGxBj9UTTtfo/Re9Qj3nh2BIc6ugE=; b=owEBbQKS/ZANAwAKAQAOaEEZVoIVAcsmYgBoSEhda2NSSlMwJbGmtJM03rnnBts2o8hxzaQAB pI5k2DCNXOJAjMEAAEKAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaEhIXQAKCRAADmhBGVaC FfBPD/0d+ayWz365la64UnrK/4njC9O23j4b89YXDZt1sfshz25GSKrTqYXGZA8QNsZSk77dveY bcKeuWIJ0WzvIeMGDbCuDLpn97WnsedcXc4YjMIaXAMipbf6bYU1UPqMApu24c7sO9USAu7oiWg SqK0rsxpayjUete2N+9DsAII+qaf/AzJxOc50trNmoDyHEztEwKc+6en2eXJhQ5Do/UUw50ADA6 nbZV96f2wAypOJXBvnz5BQaAdkhoiSxt8wY0OxGDazf4h27cubqySfPzBN5HXyE4jUKYZmeTfUl bi2LJjMZDvg2GWifibASM9jq4Ir9/R5E4WXNm6uDmXF7cDtmrr0xNIMcHrelCBcMzL45spT2Nch XFqnNEjNHSN1/5lZLPIVo8aH/4HtlGK9Ed7gRs97sY+yUKaqhXg98oMklA3FMwRXyW/x9GZcXnm pngtSCwLd5AdqZR1ttxZhEjzaGPF/kn3j0wHlPuUBhERhHShmwXSelRiLmE/Nvt2K8Qe2tggD4u ibMtawpxufOHn8DEETGB6Loir3tLQwe3iZT33w8yzuVBtePloXX1Q+qns/fsiEJRWaTaAml2ype DgxZaIxlhSmZYf/qNGhS2qrbNdKeISET7UN3/bO44OPxLVPyOTCNP9eWnTnuXg96n+VW2nQC2hC XKsvynEH6xrgMtw== X-Developer-Key: i=jlayton@kernel.org; a=openpgp; fpr=4BC0D7B24471B2A184EAF5D3000E684119568215 After assigning the inode number to the namespace, use it to create a unique name for each netns refcount tracker with the ns.inum and net_cookie values in it, and register a symlink to the debugfs file for it. init_net is registered before the ref_tracker dir is created, so add a late_initcall() to register its files and symlinks. Signed-off-by: Jeff Layton --- net/core/net_namespace.c | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c index aa1e34181ed6f353921a23411fa227b612db661a..45de05d8f0877a4e717bdad4ed7= 76ae27f98944a 100644 --- a/net/core/net_namespace.c +++ b/net/core/net_namespace.c @@ -791,12 +791,40 @@ struct net *get_net_ns_by_pid(pid_t pid) } EXPORT_SYMBOL_GPL(get_net_ns_by_pid); =20 +#ifdef CONFIG_NET_NS_REFCNT_TRACKER +static void net_ns_net_debugfs(struct net *net) +{ + ref_tracker_dir_symlink(&net->refcnt_tracker, "netns-%llx-%u-refcnt", + net->net_cookie, net->ns.inum); + ref_tracker_dir_symlink(&net->notrefcnt_tracker, "netns-%llx-%u-notrefcnt= ", + net->net_cookie, net->ns.inum); +} + +static int __init init_net_debugfs(void) +{ + ref_tracker_dir_debugfs(&init_net.refcnt_tracker); + ref_tracker_dir_debugfs(&init_net.notrefcnt_tracker); + net_ns_net_debugfs(&init_net); + return 0; +} +late_initcall(init_net_debugfs); +#else +static void net_ns_net_debugfs(struct net *net) +{ +} +#endif + static __net_init int net_ns_net_init(struct net *net) { + int ret; + #ifdef CONFIG_NET_NS net->ns.ops =3D &netns_operations; #endif - return ns_alloc_inum(&net->ns); + ret =3D ns_alloc_inum(&net->ns); + if (!ret) + net_ns_net_debugfs(net); + return ret; } =20 static __net_exit void net_ns_net_exit(struct net *net) --=20 2.49.0 From nobody Sun Feb 8 05:37:25 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5F39B23C508; Tue, 10 Jun 2025 15:00:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749567602; cv=none; b=ffJoY6N0StlrBnFTjMB+oVG0fU14rfdQFTQhIjBPMHA0CDOdzr91M+CoVqnIUPaDE8ryX8iKwPpq6niJb4qOM0yA1A8wWJt7bTsP/fPF9/vt7QcktY2ev3ayj81N9bhn9VOpkI4lh0Sq8K4SW0sb+dbCeq1Fj3DQdk4QMK0OiVE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749567602; c=relaxed/simple; bh=PbVv7f+KnjGsewIY799KTzuzC1xM5lRrR6nixzVLSbo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=N+aeLipj8Fc9C0s4XHB1BKj9RLjZIQCVYGIHhm7sr68TGEn09XOjhQ/rTXYneH26kCV8UfsbyoELngYBkR7UrRUZtg9yVP9S7kUytcFEZyQORdSkSt6jtrkCwXWl204Q88jqbrTRPZF681lW/bBdeXuqYLqaKlNa0wsBGlpkMKg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=r/ztvJYg; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="r/ztvJYg" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 23447C4CEED; Tue, 10 Jun 2025 15:00:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1749567602; bh=PbVv7f+KnjGsewIY799KTzuzC1xM5lRrR6nixzVLSbo=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=r/ztvJYgooNVr0yTCdY8xpRdHdnJBbBqnW6i6njVIPtZKF5basi7Tf/7mVNj2nHKR P0AzW74k1S0q9bhLP6fBdmtYrdnG0cQO2pTQQN4MWUUiqymZifv0pUGby/5NIloFvx /GtNBvgKlKNemWvOLqApqtAgJSMEENySRRLy8ml09O14L0xi3mFApfQpIth763ozb0 g6x+btyzi+813kgSDb8jleaAO2uN2yPXlRuwGemIXgKl4OJmhCrVUCx909Kag18VXN 4Z0pR9qNhso1RpAuALM/bD+HYI3tCnbFPDE3EkkCYqQewcIvGJ/61YSe8fTN8FNXCV WfM8A08bX9Niw== From: Jeff Layton Date: Tue, 10 Jun 2025 10:59:29 -0400 Subject: [PATCH v14 9/9] ref_tracker: eliminate the ref_tracker_dir name field 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="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250610-reftrack-dbgfs-v14-9-efb532861428@kernel.org> References: <20250610-reftrack-dbgfs-v14-0-efb532861428@kernel.org> In-Reply-To: <20250610-reftrack-dbgfs-v14-0-efb532861428@kernel.org> To: Andrew Morton , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Tvrtko Ursulin Cc: Krzysztof Karas , Kuniyuki Iwashima , Qasim Ijaz , Nathan Chancellor , Andrew Lunn , linux-kernel@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, Jeff Layton X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=7581; i=jlayton@kernel.org; h=from:subject:message-id; bh=PbVv7f+KnjGsewIY799KTzuzC1xM5lRrR6nixzVLSbo=; b=owEBbQKS/ZANAwAKAQAOaEEZVoIVAcsmYgBoSEhdKysw5x/A0SvBzqm4mi63KsHxOXUln9Sm0 jxsooYBF92JAjMEAAEKAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaEhIXQAKCRAADmhBGVaC FdCAD/9dxD9G9NIyAO5+Xx4tFr39YVxGNil75tUwlCoPk9jg6b9IxDigt563zRkEBCPtyUod2An Ao5hU8b8DVRRYcdWE4sQLLxcf9VYNlicr1z9WS5YaUQgVUo1G7eqC05jbCSEN2WfTi8M1ehwz1/ SEE/tLER1IHvQEnpAPUlYrf8uzUB/lufqMxgN3UNBvi7rFmYf7NThYREVB/KJmAdCFTd+j4qRIw QiisjG89UVv8hYQKSbQcxWHcnc3I4KOMQwQ57h93V8ooSwy0PL37y9O9KWLpjDM/8wJy5ANawjK xyGokqJZn+PTGthsky6rsKWh144exz1Yg6oygZ324AhS8tibD81sHTQ3As1+aiYwPjedHs+Q6bj d80Vksolxliwucw88ESUjeh8myJy4EyXeS8aencCLAw9Tyndh13jh3ZB0u7QnGNarikc+BWzhod 6k4ZOXP1svDa4Df/OWG0IVromdsejgFAyyfhxlPAvYRW0UgfLcg0U3qQoKSBvYuDNI0gp+qyVtz wSSpcZjDFVPvUFMvf+UiyhzlMOy7ckw5vGPj0NVk6LmlEAufwGtLnUeXMBz5PvZPamkhTqjXERJ CyK8cKIpQg9+VJUy4XgCAEIGUfHz+Zxv6vDi0nao8RYvDEly9zniwle50MwkB5bTc67s3QXYY+v +PEb5ypnTyiNBlw== X-Developer-Key: i=jlayton@kernel.org; a=openpgp; fpr=4BC0D7B24471B2A184EAF5D3000E684119568215 Now that we have dentries and the ability to create meaningful symlinks to them, don't keep a name string in each tracker. Switch the output format to print "class@address", and drop the name field. Also, add a kerneldoc header for ref_tracker_dir_init(). Signed-off-by: Jeff Layton --- drivers/gpu/drm/display/drm_dp_tunnel.c | 2 +- drivers/gpu/drm/i915/intel_runtime_pm.c | 2 +- drivers/gpu/drm/i915/intel_wakeref.c | 2 +- include/linux/ref_tracker.h | 20 ++++++++++++++------ lib/ref_tracker.c | 6 +++--- lib/test_ref_tracker.c | 2 +- net/core/dev.c | 2 +- net/core/net_namespace.c | 4 ++-- 8 files changed, 24 insertions(+), 16 deletions(-) diff --git a/drivers/gpu/drm/display/drm_dp_tunnel.c b/drivers/gpu/drm/disp= lay/drm_dp_tunnel.c index b9c12b8bf2a3e400b6d8e9d184145834c603b9e1..1205a4432eb4142344fb6eed1cb= 5ba5b21ec6953 100644 --- a/drivers/gpu/drm/display/drm_dp_tunnel.c +++ b/drivers/gpu/drm/display/drm_dp_tunnel.c @@ -1920,7 +1920,7 @@ drm_dp_tunnel_mgr_create(struct drm_device *dev, int = max_group_count) } =20 #ifdef CONFIG_DRM_DISPLAY_DP_TUNNEL_STATE_DEBUG - ref_tracker_dir_init(&mgr->ref_tracker, 16, "drm_dptun", "dptun"); + ref_tracker_dir_init(&mgr->ref_tracker, 16, "drm_dptun"); #endif =20 for (i =3D 0; i < max_group_count; i++) { diff --git a/drivers/gpu/drm/i915/intel_runtime_pm.c b/drivers/gpu/drm/i915= /intel_runtime_pm.c index 90d90145a1890bf788e789858ddad3b3d8e3b978..7ce3e6de0c1970697e0e58198e1= e3852975ee7bc 100644 --- a/drivers/gpu/drm/i915/intel_runtime_pm.c +++ b/drivers/gpu/drm/i915/intel_runtime_pm.c @@ -61,7 +61,7 @@ static void init_intel_runtime_pm_wakeref(struct intel_ru= ntime_pm *rpm) { if (!rpm->debug.class) ref_tracker_dir_init(&rpm->debug, INTEL_REFTRACK_DEAD_COUNT, - "intel_runtime_pm", dev_name(rpm->kdev)); + "intel_runtime_pm"); } =20 static intel_wakeref_t diff --git a/drivers/gpu/drm/i915/intel_wakeref.c b/drivers/gpu/drm/i915/in= tel_wakeref.c index 21dcee7c9a659ac1fb0aa19f3018647be3bda754..080535fc71d8c25dcc848eefd06= 3361bbe21b305 100644 --- a/drivers/gpu/drm/i915/intel_wakeref.c +++ b/drivers/gpu/drm/i915/intel_wakeref.c @@ -115,7 +115,7 @@ void __intel_wakeref_init(struct intel_wakeref *wf, =20 #if IS_ENABLED(CONFIG_DRM_I915_DEBUG_WAKEREF) if (!wf->debug.class) - ref_tracker_dir_init(&wf->debug, INTEL_REFTRACK_DEAD_COUNT, "intel_waker= ef", name); + ref_tracker_dir_init(&wf->debug, INTEL_REFTRACK_DEAD_COUNT, "intel_waker= ef"); #endif } =20 diff --git a/include/linux/ref_tracker.h b/include/linux/ref_tracker.h index e1323de93bf6b891aa14ad8d9b4b28d02e10f9f7..d10563afd91c0c551e08896fa53= 54e0a5894ba7c 100644 --- a/include/linux/ref_tracker.h +++ b/include/linux/ref_tracker.h @@ -20,7 +20,6 @@ struct ref_tracker_dir { struct list_head list; /* List of active trackers */ struct list_head quarantine; /* List of dead trackers */ const char *class; /* object classname */ - char name[32]; #endif }; =20 @@ -44,10 +43,21 @@ void ref_tracker_dir_symlink(struct ref_tracker_dir *di= r, const char *fmt, ...) =20 #endif /* CONFIG_DEBUG_FS */ =20 +/** + * ref_tracker_dir_init - initialize a ref_tracker dir + * @dir: ref_tracker_dir to be initialized + * @quarantine_count: max number of entries to be tracked + * @class: pointer to static string that describes object type + * + * Initialize a ref_tracker_dir. If debugfs is configured, then a file + * will also be created for it under the top-level ref_tracker debugfs + * directory. + * + * Note that @class must point to a static string. + */ static inline void ref_tracker_dir_init(struct ref_tracker_dir *dir, unsigned int quarantine_count, - const char *class, - const char *name) + const char *class) { INIT_LIST_HEAD(&dir->list); INIT_LIST_HEAD(&dir->quarantine); @@ -57,7 +67,6 @@ static inline void ref_tracker_dir_init(struct ref_tracke= r_dir *dir, refcount_set(&dir->untracked, 1); refcount_set(&dir->no_tracker, 1); dir->class =3D class; - strscpy(dir->name, name, sizeof(dir->name)); ref_tracker_dir_debugfs(dir); stack_depot_init(); } @@ -82,8 +91,7 @@ int ref_tracker_free(struct ref_tracker_dir *dir, =20 static inline void ref_tracker_dir_init(struct ref_tracker_dir *dir, unsigned int quarantine_count, - const char *class, - const char *name) + const char *class) { } =20 diff --git a/lib/ref_tracker.c b/lib/ref_tracker.c index a78741308a2c2dc7aff65519970ad081b59e0de5..39f8e931680a0b84cd7a8588db6= 59bfe2b348821 100644 --- a/lib/ref_tracker.c +++ b/lib/ref_tracker.c @@ -147,7 +147,7 @@ __ref_tracker_dir_pr_ostream(struct ref_tracker_dir *di= r, stats =3D ref_tracker_get_stats(dir, display_limit); if (IS_ERR(stats)) { pr_ostream(s, "%s%s@%p: couldn't get stats, error %pe\n", - s->prefix, dir->name, dir, stats); + s->prefix, dir->class, dir, stats); return; } =20 @@ -158,14 +158,14 @@ __ref_tracker_dir_pr_ostream(struct ref_tracker_dir *= dir, if (sbuf && !stack_depot_snprint(stack, sbuf, STACK_BUF_SIZE, 4)) sbuf[0] =3D 0; pr_ostream(s, "%s%s@%p has %d/%d users at\n%s\n", s->prefix, - dir->name, dir, stats->stacks[i].count, + dir->class, dir, stats->stacks[i].count, stats->total, sbuf); skipped -=3D stats->stacks[i].count; } =20 if (skipped) pr_ostream(s, "%s%s@%p skipped reports about %d/%d users.\n", - s->prefix, dir->name, dir, skipped, stats->total); + s->prefix, dir->class, dir, skipped, stats->total); =20 kfree(sbuf); =20 diff --git a/lib/test_ref_tracker.c b/lib/test_ref_tracker.c index d263502a4c1db248f64a66a468e96c8e4cffab25..b983ceb12afcb84ad60360a1e6f= ec0072e78ef79 100644 --- a/lib/test_ref_tracker.c +++ b/lib/test_ref_tracker.c @@ -64,7 +64,7 @@ static int __init test_ref_tracker_init(void) { int i; =20 - ref_tracker_dir_init(&ref_dir, 100, "selftest", "selftest"); + ref_tracker_dir_init(&ref_dir, 100, "selftest"); =20 timer_setup(&test_ref_tracker_timer, test_ref_tracker_timer_func, 0); mod_timer(&test_ref_tracker_timer, jiffies + 1); diff --git a/net/core/dev.c b/net/core/dev.c index 12cf4e5ae9c5437bcfec657e37b7e08792bc14bf..92a830162dd8f9e311d31e5285e= 394b0e9f20d42 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -11715,7 +11715,7 @@ struct net_device *alloc_netdev_mqs(int sizeof_priv= , const char *name, =20 dev->priv_len =3D sizeof_priv; =20 - ref_tracker_dir_init(&dev->refcnt_tracker, 128, "netdev", name); + ref_tracker_dir_init(&dev->refcnt_tracker, 128, "netdev"); #ifdef CONFIG_PCPU_DEV_REFCNT dev->pcpu_refcnt =3D alloc_percpu(int); if (!dev->pcpu_refcnt) diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c index 45de05d8f0877a4e717bdad4ed776ae27f98944a..d0f607507ee8d0b6d31f11a4942= 1b5f0a985bd3b 100644 --- a/net/core/net_namespace.c +++ b/net/core/net_namespace.c @@ -403,8 +403,8 @@ static __net_init void preinit_net(struct net *net, str= uct user_namespace *user_ { refcount_set(&net->passive, 1); refcount_set(&net->ns.count, 1); - ref_tracker_dir_init(&net->refcnt_tracker, 128, "net_refcnt", "net_refcnt= "); - ref_tracker_dir_init(&net->notrefcnt_tracker, 128, "net_notrefcnt", "net_= notrefcnt"); + ref_tracker_dir_init(&net->refcnt_tracker, 128, "net_refcnt"); + ref_tracker_dir_init(&net->notrefcnt_tracker, 128, "net_notrefcnt"); =20 get_random_bytes(&net->hash_mix, sizeof(u32)); net->dev_base_seq =3D 1; --=20 2.49.0