From patchwork Fri Apr 18 14:24:25 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Jeff Layton X-Patchwork-Id: 14057242 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 E525B197A8A; Fri, 18 Apr 2025 14:24:37 +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=1744986278; cv=none; b=DFo+Z9KkoVhBOI1xUTZSVpBDLjajgWwSrVyXWPyOmSSxa1XUax2ksByXDLcTUS9wMJnrOKQJKdHZ7OCeSCdpORNlDEFEMZkfqcD6o2OsPBy6ksxoW2As4sElLjb7S4POwZXgmpTYSAjUcvR0AUk4KkCK13gnGHDS1q6Yz9GkbSs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744986278; c=relaxed/simple; bh=qdjjg9250uAChp/B6CMoiJw5KiM08dmL8XUQ0eA5f48=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=O621Dh2Q3mn/tD3Uj11uqIkue4dKfX3dKtmbQbBY/KmjEAKMhTWcJ4jLerZ4uPJxYjsTfXMofSo2+tR0Tf8P1TrLp3cJnvM15E2AaUPH1l4L4LE6y4KE2JX3mmztCK9fag0B/X70R4WcYBV9s7UY59CXtxHhzloKW6inbvQX7Zw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=syoq3k9B; 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="syoq3k9B" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 93DE1C4CEEA; Fri, 18 Apr 2025 14:24:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1744986277; bh=qdjjg9250uAChp/B6CMoiJw5KiM08dmL8XUQ0eA5f48=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=syoq3k9BRd0Q7Ee8tcLMgcmvp9g141bsE91iVixdyLURQ1fCOH9A1XIX5rS56LzW0 sAIXO/uN6O+nV/Qf1PIuLMO7bRk8+Ga8XxFqYtg/lxGTuVV2ZbdlTAOb7WhvBiMM7o hXQ1nd7EttGTmpHK2tTF5whFbcyiyPawogIfaRxGoELrl/tMihDqnKjI1FQTZpSuNM dya7BeDXh4Q/NPrVPPR0kK6FobXDewSDfvJa+DYnonA5RJYxrKjzjjYTry98zdS/Cc JCj2QtsSErspRXmfoqXwbejooFRm1BAgrWGRqKKo8TomRgeYkELipwQj7VxiLsrTul qhPE2vyXULqtQ== From: Jeff Layton Date: Fri, 18 Apr 2025 10:24:25 -0400 Subject: [PATCH v4 1/7] ref_tracker: don't use %pK in pr_ostream() output Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250418-reftrack-dbgfs-v4-1-5ca5c7899544@kernel.org> References: <20250418-reftrack-dbgfs-v4-0-5ca5c7899544@kernel.org> In-Reply-To: <20250418-reftrack-dbgfs-v4-0-5ca5c7899544@kernel.org> To: Andrew Morton , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman Cc: Kuniyuki Iwashima , Qasim Ijaz , Nathan Chancellor , Andrew Lunn , linux-kernel@vger.kernel.org, netdev@vger.kernel.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=1830; i=jlayton@kernel.org; h=from:subject:message-id; bh=qdjjg9250uAChp/B6CMoiJw5KiM08dmL8XUQ0eA5f48=; b=owEBbQKS/ZANAwAIAQAOaEEZVoIVAcsmYgBoAmChYeaymIo4L+Tjw97Yx7kPt1/Rf9d9QRU7o 1vRDEKdfTCJAjMEAAEIAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaAJgoQAKCRAADmhBGVaC FazqD/9y761uiGFWmUq0MlOwKlrsglEqDzSR9wq/IrEo17NXhe0jkmnOSu3lOqQys8uKQ1dpdkr uGABVDP9ZQr8m+xPDXDr4bMxtR3JZ0lKw69s+fBAODevCTsfjZHNFrkPeJsoVz1DfiaNOsi8fmc 71Sy28KG/sfhs1vc2WMwWD6DwU0rXzsst65aginMNVNfhN4WBIlmgaPd3V5CexTdIPaxqKZmApT E1DCUIWRlf7TCyF1Kx2QoGd3gCraGUD8Mw/VGts1uQi+qWk0MsbQFmybOHrNnafDFvhotwwbGfZ e5692kwVw1EF02oJ0pE8bx6CLdts31VJ7vrAphyEBmAxCaUPYzaUlQBWf6+J51/rDQAQAxW2KYB VQoUJVC/MEAadu//0G/t1gZ2h3RqivYHuxY7yhAYe8hgYPfjwLyh6WAdy5imUKnBZ8OF6lyhynU jlvSZOkILMkgYnfJNNR9mKMhmQTD5TPEFge2ugYQ3KhieLqeLKRqnH1FYw+nrpd6ccoqdykNxWG r9X7j+9fm5BEfhLBvzdg0j0RiiBjNR/FkcsVPB227WcZrY4iIwf+XmGqTqjHdgpOgUugWu6r36Y v02sOSxc4nWSqbkhGntnw0x8v496IJ89RuS+KLktauzq+j7qOx1NxuDPvdaBrfvaCUj2SdQ1EBz QOtvUTBW3hFAUqw== X-Developer-Key: i=jlayton@kernel.org; a=openpgp; fpr=4BC0D7B24471B2A184EAF5D3000E684119568215 As Thomas Weißschuh 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-12af0ce46cdd@linutronix.de/ Cc: Thomas Weißschuh Reviewed-by: Thomas Weißschuh 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..de71439e12a3bab6456910986fa611dfbdd97980 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, stats = 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 = stats->stacks[i].stack_handle; if (sbuf && !stack_depot_snprint(stack, sbuf, STACK_BUF_SIZE, 4)) sbuf[0] = 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 -= stats->stacks[i].count; } 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); kfree(sbuf); From patchwork Fri Apr 18 14:24:26 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jeff Layton X-Patchwork-Id: 14057243 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 61C761ACED2; Fri, 18 Apr 2025 14:24:39 +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=1744986279; cv=none; b=Bs+pye8KW809KP913DdR1qngTAXnOU+jxC1ShbaiuIyVR8H2X1RMacLB5ZTPpFl3OYCSSOCGiCmy5n4pymKSKkwI4oeVmpPcICpbVYNWax9LuY0akQO6/X2ifFShtQ+ZoXO4SmqKkTOGmqkBvvxT1B6zYqTA/YxP8sz0P9tKbJM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744986279; c=relaxed/simple; bh=h02vtg+uo9MQLcJqO0oaAc8ETCkA4CEZoiZkSocwMrw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=XCbEj1I1WEd0hLd7n4MHqJLE1CyQf8qhSVUpedYR9y8daeU5gNLzGuyEBehbTxoj/ZRHwgKxVEZSWgu13B+eDixPsMPSJlELlrIEHUFWS4YgNosafLRskNtje/ni+gYbEvDr0lspmEHxzECfMiXIcY3ZbTNM044H40eV9HXMCuA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=un2kzyb3; 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="un2kzyb3" Received: by smtp.kernel.org (Postfix) with ESMTPSA id DA7E4C4CEF4; Fri, 18 Apr 2025 14:24:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1744986278; bh=h02vtg+uo9MQLcJqO0oaAc8ETCkA4CEZoiZkSocwMrw=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=un2kzyb3Jw5a/WGU7JhYO6HNh0+xXefSMmsB6B4+konGaaxnkDbToOx3+9/yADdkm aw4r0D+h2mXlRkZLS0c8WQVoOHNEhvOqiXNlumo3wN4QmlVtypdlklvGkwPOuStSq0 Igzn8GB7WxEqsqS3bPfHRToof+E5gFwGMChY205g9LmFpcpvNiJC5+igYMzpId3DCt UOj/yTi1orS84jLCJldUi9kPUyYnQ/NYe3cRlOb00cchG1QfFhhbU8vA69GbOz80Sa 71kJqor6t0HRnKLc4ymVgHRLUGZoUo+rJBLOmK3Yd1vXz/lQkFyzoCc/qKJda1kZh9 xeScjy+RFRzhQ== From: Jeff Layton Date: Fri, 18 Apr 2025 10:24:26 -0400 Subject: [PATCH v4 2/7] ref_tracker: add a top level debugfs directory for ref_tracker Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250418-reftrack-dbgfs-v4-2-5ca5c7899544@kernel.org> References: <20250418-reftrack-dbgfs-v4-0-5ca5c7899544@kernel.org> In-Reply-To: <20250418-reftrack-dbgfs-v4-0-5ca5c7899544@kernel.org> To: Andrew Morton , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman Cc: Kuniyuki Iwashima , Qasim Ijaz , Nathan Chancellor , Andrew Lunn , linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Jeff Layton X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1387; i=jlayton@kernel.org; h=from:subject:message-id; bh=h02vtg+uo9MQLcJqO0oaAc8ETCkA4CEZoiZkSocwMrw=; b=owEBbQKS/ZANAwAIAQAOaEEZVoIVAcsmYgBoAmChj0j6vUf8B5bNul8O2TxbCZBTtvMU/Q6Nx ZAl3cka4feJAjMEAAEIAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaAJgoQAKCRAADmhBGVaC FbuTEACmmnkYke/tsMFojYkHwz19RJIkrW6WhN54fGH+wClmIkUS6FR3EPYNXgzK5/cjoTWaLtt qNdTVhMzFBy0L2BvBMISnz7bhrWdOIc5W6cVOr+U1xdLZn/NHLcYy4q4uG8qiWqGEjivgr/qHc1 WkiOh8VCZUH7fgDtLo5YvbRMwBu8j/BCAsGM1cqFXHSY422TgQClNOSSBGifE3oOpSRyQl5kQUr 2r+DqCG6bY0cOnJ1Cgp20KG8rQoPCYd5SqL+cXp4E685SLjJDFDvZFmZk+Zx/j7/7yGJz6/j/a6 iegQt398aDjriMNRR+gkIHxbi2imEhI6sTiwhJO/ByHYLiO09rd1pUzGa8RNokFe+WqkLtv1Th9 xiH0Yr/+XaF8J1PL/mkvWTU/8h7bPJo6huT/D9iIwOr51bZXhQ441TSaPstz1OkFEEdv4bhn2xy KVz7rBnGj0nbSjk8GZGQOp/5Hd9yK3AzApEjmqGGEsfsldeUcCvxlMi48I1JDMOXG9+YmblFdcR FJhpg/Q3iQDGb4lTwo4F6icpQ2Xdua4gQomjruLLgJP/8rqR7X+YKEX3Pa1jBO7tx1HF1ZYTbVJ 4U+G5ae78/FP2LNS6pMnol0Mwk5la+37QtAjWAF40P26PnExgvcOm6CGd5FlREGnWvq+kCOul/c 0cxhtmw2hJWjWYw== 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 Signed-off-by: Jeff Layton --- lib/ref_tracker.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/lib/ref_tracker.c b/lib/ref_tracker.c index de71439e12a3bab6456910986fa611dfbdd97980..a66cde325920780cfe7529ea9d827d0ee943318d 100644 --- a/lib/ref_tracker.c +++ b/lib/ref_tracker.c @@ -12,6 +12,8 @@ #define REF_TRACKER_STACK_ENTRIES 16 #define STACK_BUF_SIZE 1024 +static struct dentry *ref_tracker_debug_dir = (struct dentry *)-ENOENT; + struct ref_tracker { struct list_head head; /* anchor into dir->list or dir->quarantine */ bool dead; @@ -273,3 +275,17 @@ int ref_tracker_free(struct ref_tracker_dir *dir, return 0; } EXPORT_SYMBOL_GPL(ref_tracker_free); + +#ifdef CONFIG_DEBUG_FS +#include + +static int __init ref_tracker_debugfs_init(void) +{ + ref_tracker_debug_dir = debugfs_create_dir("ref_tracker", NULL); + if (IS_ERR(ref_tracker_debug_dir)) + pr_warn("ref_tracker: unable to create debugfs ref_tracker directory: %pe\n", + ref_tracker_debug_dir); + return 0; +} +late_initcall(ref_tracker_debugfs_init); +#endif /* CONFIG_DEBUG_FS */ From patchwork Fri Apr 18 14:24:27 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jeff Layton X-Patchwork-Id: 14057245 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 9796E1C6FFD; Fri, 18 Apr 2025 14:24:40 +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=1744986281; cv=none; b=Y6u6fBP8wS5i7g7oo2MsoqnJBXe7CuhBSDblE1kbBQ7gR+TT5OgTDzh4yuGwd3Mpy15Oz9zrVTRqRNqO6rJ0cOfyMDABuLi6+JlhFYOPBaHmQhfpQHYnrUX6WTt5CO/rsEczUJQMpDBi9IMSrUZ3lc0U4h0Z6xKpE6X9xdr0GoA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744986281; c=relaxed/simple; bh=D7eYUyrEMPuIlNDnf5xYhfYtI7n2pvxbIb5qGlnf6w4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=miBLwVMcZEaN/HIgaHiYf6+PGTByymA9kbGaUs2KdAn24+SaXldqK7BzREo6ZvxluPZiIrMb4bKQPn7g6gW/CChUpEzhPtJRKFcvA6h+04zGsy7eyx0qrdCaij7L6ufPC8Rsi49UIyADT+Hn2ILTyXzf+MlmzmvlfGJbfj9jefE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ofYeUzlo; 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="ofYeUzlo" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1D6D7C4CEF2; Fri, 18 Apr 2025 14:24:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1744986280; bh=D7eYUyrEMPuIlNDnf5xYhfYtI7n2pvxbIb5qGlnf6w4=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=ofYeUzlox9uWtcLNl7Esb2oBKMELkdJ1ZGY9Bmhgf2TertDURWl5TShacXPzHgg+S HBEkd2DsXNkH5mA7r/1jXgMCLbsFiuBQ+e4rHYzqD7LKdw/zUT/ud+klGhv4aAcd3L Mv8h+iaq6bqlFNjVrMVJPXP4Tph2XEFMv8y8XEJf8bgY+HZIpm0GtBPMko8KhVaky7 b28rf2dp9+5XgyuypflWSM5u/iVJ/ZPGZxpnXztAkP6yzVMbuoHcesWFVgn5ZZPuh7 0du+BPkOpcl7FcKF3CD3FHhCkwn7PXB5h97LerF+bpehj5IfnunYOlXYTQUw0Bq3q0 lKqOZ9oKenmLQ== From: Jeff Layton Date: Fri, 18 Apr 2025 10:24:27 -0400 Subject: [PATCH v4 3/7] ref_tracker: have callers pass output function to pr_ostream() Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250418-reftrack-dbgfs-v4-3-5ca5c7899544@kernel.org> References: <20250418-reftrack-dbgfs-v4-0-5ca5c7899544@kernel.org> In-Reply-To: <20250418-reftrack-dbgfs-v4-0-5ca5c7899544@kernel.org> To: Andrew Morton , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman Cc: Kuniyuki Iwashima , Qasim Ijaz , Nathan Chancellor , Andrew Lunn , linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Jeff Layton X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3845; i=jlayton@kernel.org; h=from:subject:message-id; bh=D7eYUyrEMPuIlNDnf5xYhfYtI7n2pvxbIb5qGlnf6w4=; b=kA0DAAgBAA5oQRlWghUByyZiAGgCYKKgC08ojkyjrEZmeC7xYrrGwBw/T3ubSfBrpAusVY60X YkCMwQAAQgAHRYhBEvA17JEcbKhhOr10wAOaEEZVoIVBQJoAmCiAAoJEAAOaEEZVoIVwkQQAMDe s8XBGsAfFwViSoXC2FZCfUpv6SS7XHBf4kD7FHo2IDA1qnv7mevPEVBNiDuB1U0XoIluUJrWQRW WOkQ5jFeGGiRLBt92IkzdLjbe3Ccppi+EHpKUTIb9PPvtRKsstDEjwdNzBUM0goBgd/KCGtrdhI gJsgEKXt1gCTpe1jfjr41pc+bwSI4CRjYnyrnX3R/m03R4l4NtiS9cAAgKjERWHMfvrvetRJGYP rf9wjj1HJRpBoa8Zy5YjSUrIIW5fnNU+MyG1bV5LBXhy3zKiQaPWdUic3Ly9cfdTRkOyQ7yExyr Cm3SRq7KkYPMeXT0t1snbZig6ug1JogdD71puM8el/0gA2IUl3kS6FnfLG2yn8Bkawlil8hpxkl 0GDcstxb76L/c3JxEpcT8XcAmjGBCB8hJRWUyTt0YnqxD2SSpbVrGYlhxFiha3LynyfVqKaph5C yqMjt1tv+rHk5jBoF+MgGKG3VAnIq3H907YGsbU5KkLdIN1YlFlPuGLmEPvnLzGf7jrwj3dgHMP H0oHNf++lr+xmSDMewziXJBxUw5+/de6jFDEbCCdZTVRtOw3AkluiQP5WOUwYNe5WZK0eM8LoGc zrbbb2pQG4+L27ONpThnPkdmMmp8dTDkL4G/hPNsuCD0UKu5uqIA1zR7uZYYFJK0Qf4xSw57cEU zKUEi 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 --- lib/ref_tracker.c | 53 ++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 38 insertions(+), 15 deletions(-) diff --git a/lib/ref_tracker.c b/lib/ref_tracker.c index a66cde325920780cfe7529ea9d827d0ee943318d..b6e0a87dd75eddef4d504419c0cf398ea65c19d8 100644 --- a/lib/ref_tracker.c +++ b/lib/ref_tracker.c @@ -64,22 +64,40 @@ ref_tracker_get_stats(struct ref_tracker_dir *dir, unsigned int limit) return stats; } +#define __ostream_printf __printf(2, 3) + struct ostream { + void __ostream_printf (*func)(struct ostream *stream, char *fmt, ...); + char *prefix; char *buf; int size, used; }; +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 = stream->size - stream->used; + va_list args; + + va_start(args, fmt); + ret = vsnprintf(stream->buf + stream->used, len, fmt, args); + va_end(args); + stream->used += min(ret, len); +} + #define pr_ostream(stream, fmt, args...) \ ({ \ struct ostream *_s = (stream); \ \ - if (!_s->buf) { \ - pr_err(fmt, ##args); \ - } else { \ - int ret, len = _s->size - _s->used; \ - ret = snprintf(_s->buf + _s->used, len, pr_fmt(fmt), ##args); \ - _s->used += min(ret, len); \ - } \ + _s->func(_s, fmt, ##args); \ }) static void @@ -98,8 +116,8 @@ __ref_tracker_dir_pr_ostream(struct ref_tracker_dir *dir, stats = 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; } @@ -109,14 +127,15 @@ __ref_tracker_dir_pr_ostream(struct ref_tracker_dir *dir, stack = stats->stacks[i].stack_handle; if (sbuf && !stack_depot_snprint(stack, sbuf, STACK_BUF_SIZE, 4)) sbuf[0] = 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 -= stats->stacks[i].count; } 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); kfree(sbuf); @@ -126,7 +145,8 @@ __ref_tracker_dir_pr_ostream(struct ref_tracker_dir *dir, void ref_tracker_dir_print_locked(struct ref_tracker_dir *dir, unsigned int display_limit) { - struct ostream os = {}; + struct ostream os = { .func = pr_ostream_log, + .prefix = "ref_tracker: " }; __ref_tracker_dir_pr_ostream(dir, display_limit, &os); } @@ -145,7 +165,10 @@ EXPORT_SYMBOL(ref_tracker_dir_print); int ref_tracker_dir_snprint(struct ref_tracker_dir *dir, char *buf, size_t size) { - struct ostream os = { .buf = buf, .size = size }; + struct ostream os = { .func = pr_ostream_buf, + .prefix = "ref_tracker: ", + .buf = buf, + .size = size }; unsigned long flags; spin_lock_irqsave(&dir->lock, flags); From patchwork Fri Apr 18 14:24:28 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jeff Layton X-Patchwork-Id: 14057244 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 81BE31C5F37; Fri, 18 Apr 2025 14:24:41 +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=1744986281; cv=none; b=K4qzXHNgmNXuvx2Tr58LQDsazbybtKGxoTQWQPaW+Fd4jy3XknfYw+WJhbsK67ISqQQ8lu1RNaeAVnc0eMraSU3eQxLOJcXmU/R5/j07b8JU7uUTILMjTW+RaihuhpJw50R+R6sBmCCbPPgW8Eevp6EqnrCsAp4toddoe7M+FmI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744986281; c=relaxed/simple; bh=fZKlpIcOJEF616o9qzMIcvZOI/oG1RfsOsr5fOV2mTY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Ay/ZkjNPrVbBwi5tSrKk2/0Qp5QOqnnyh8YG84uez1ND2sOAWZoepcHUR8aeAJbjJ6YDiNqPleGI94uN2nRJbNhmzqMkbrRIQkT3FYwECK+fhuvv0QcYrSYMVKFEA4/TqifFJatL9LCVoYWA7tj0SjD4KSbhiV4VdtRtgW2Puyk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Sy4y7PTE; 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="Sy4y7PTE" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5651FC4CEE2; Fri, 18 Apr 2025 14:24:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1744986281; bh=fZKlpIcOJEF616o9qzMIcvZOI/oG1RfsOsr5fOV2mTY=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Sy4y7PTEdAWaHOLkwEEL+uDCGvA6ZEDjO+WyRUgAP7P176slTRHm1L/2ZJMK+DaoU dpPGC5idMXlMS+xzwtLX9iZHQ6ZYKqq39BBZlOk3kFlcBZlD0jv7tyCR4hfUDnIDWQ cxDFfiVOhZoyUMlJCfj4wIoDX7ebvcek8DIj9lmg5TiE75b9iBJMv8B06q11dCnzC0 MG/QyK7ll31ZkSWtzmJLrgLVZA63fYL0bdRZohWW0E2Nxu7K6t3uslv7oRC2zms8u4 MI+DfZlXMQmJkTR29J14L+TWH91Md+GYHtLPm+l/TUoKjVho4u1PYcKltgXit0/K6e /zt9tRdC1W5og== From: Jeff Layton Date: Fri, 18 Apr 2025 10:24:28 -0400 Subject: [PATCH v4 4/7] ref_tracker: allow pr_ostream() to print directly to a seq_file Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250418-reftrack-dbgfs-v4-4-5ca5c7899544@kernel.org> References: <20250418-reftrack-dbgfs-v4-0-5ca5c7899544@kernel.org> In-Reply-To: <20250418-reftrack-dbgfs-v4-0-5ca5c7899544@kernel.org> To: Andrew Morton , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman Cc: Kuniyuki Iwashima , Qasim Ijaz , Nathan Chancellor , Andrew Lunn , linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Jeff Layton X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1942; i=jlayton@kernel.org; h=from:subject:message-id; bh=fZKlpIcOJEF616o9qzMIcvZOI/oG1RfsOsr5fOV2mTY=; b=owEBbQKS/ZANAwAIAQAOaEEZVoIVAcsmYgBoAmCinpbaziQltBaRohrpGTmSAVuUse0XYHvoA PTj1MwrV4aJAjMEAAEIAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaAJgogAKCRAADmhBGVaC FSzlEACnnocC2WTgHkIMfOzvJieuIk8aTMSGhsQw+yQI0hAQWK7kr11tlVg56oRdHShiz5Hj2So +8FSHRSg9chXDGx0IQ/kFss0f9zSBvs8I8/dkm4xj1e09U0GjLD6yFvPKb4dN83+imFJtkVSWwk lVXJ1XYhrnwxaakfHmfrP0E0b2TM9B32apfFXeVTWbOu+tvW414d3f7EfjukF6BjdzE5xpY6wRg eoszf9vVIpqGzhCXuwUPW58W190AbhJHO+fqEputaWrbl9fiO5cRTLwwifOHxRqQR3TNI+XGVOr eQSM0o05UyPjeg5GBHHFuwEpxwQZYtw5LEqYCJLBorr2PdYg1h1+FE0bwlL1Mt45sJkWZIMEAcg 3m4dyrK/SZJnwanXx2G8LpBQ76CFpQyPnAI3A4II3hN1JyGLHKRLEdiTu4zC6HUz94+n+oklBRj in6Zt8etwWg76JPdy4UjrCdK9/+DLd/b1uiGDbsGGwF+7f0o7tNnLuj6fIzh24JLgV2Cy+6szow 8usiGhJaiQM922oh5i5bwpu3oU8uSFY7aeNHOOk1b9gbGiKsx3ytqW56jC3sbJxQwMWABnnLlyB KXQfplR4op5om4m6c2rX8c5sZJdrfqSoqNULv/wTCUlCLTUEn4Nj+jkkf3yvKTAQdkW37zoGo7l JRPrO2lXTfFrD8A== 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. Reviewed-by: Andrew Lunn Signed-off-by: Jeff Layton --- lib/ref_tracker.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/lib/ref_tracker.c b/lib/ref_tracker.c index b6e0a87dd75eddef4d504419c0cf398ea65c19d8..4857bcb6d4bf557a0089f51328e75e8209e959e6 100644 --- a/lib/ref_tracker.c +++ b/lib/ref_tracker.c @@ -8,6 +8,7 @@ #include #include #include +#include #define REF_TRACKER_STACK_ENTRIES 16 #define STACK_BUF_SIZE 1024 @@ -70,6 +71,7 @@ struct ostream { void __ostream_printf (*func)(struct ostream *stream, char *fmt, ...); char *prefix; char *buf; + struct seq_file *seq; int size, used; }; @@ -93,6 +95,15 @@ static void __ostream_printf pr_ostream_buf(struct ostream *stream, char *fmt, . stream->used += min(ret, len); } +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); +} + #define pr_ostream(stream, fmt, args...) \ ({ \ struct ostream *_s = (stream); \ @@ -302,6 +313,20 @@ EXPORT_SYMBOL_GPL(ref_tracker_free); #ifdef CONFIG_DEBUG_FS #include +static int ref_tracker_dir_seq_print(struct ref_tracker_dir *dir, struct seq_file *seq) +{ + struct ostream os = { .func = pr_ostream_seq, + .prefix = "", + .seq = 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 = debugfs_create_dir("ref_tracker", NULL); From patchwork Fri Apr 18 14:24:29 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jeff Layton X-Patchwork-Id: 14057246 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 AE99A1D54FA; Fri, 18 Apr 2025 14:24:42 +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=1744986282; cv=none; b=BXUt+7Ci0Pkph3+z0fwoMoTeZYiTjyiJXh5LAG7G8gmPavdfsEjduiP9rtSxqhN81O+BQ5VFzai368HYqRoej9ucylSDbRpuwz7OHqGfwbuJxtocuMDdVp67ryxL2vShtVgCFiFx18depwcpcnvVk8hCvOi76Qh2l8rCbKRZQXY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744986282; c=relaxed/simple; bh=l5/XOHywB9lKjB1qgOx9rhhgBpmkHLAVDfkHYdzS1Fg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=CE4mAfWoAYkNeBOKunT5gp4uzjkf+kq+G/Scg8r2EUBOe8daLAz+LRCVwYiBYwNkOayAOfnf9ZOOSVmSUSK5ge4kBlLb9xueEaVjAxl8n3FUolPHH3EzT29e85VSOIwwiwjGsRYQo4828x2Cft3bsSMQWBaKlwu7l1ytm0JkHZY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=kTjtiKn/; 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="kTjtiKn/" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8CA22C4CEF9; Fri, 18 Apr 2025 14:24:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1744986282; bh=l5/XOHywB9lKjB1qgOx9rhhgBpmkHLAVDfkHYdzS1Fg=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=kTjtiKn/w38dMuRUDh+BdC+255OuOoMasSWp230BxiqmoMMQ4b25hP7F5WzgEqSK+ 3qWMyAy/1pdXEr87RJIq5ndUwIIz8PBUCHnJ/GF7upWKKq2gP/GQNLCF1DwjjX1Lbm o9VYVn7Yl8vzbm3UeMany5YyMnQgYNGAPzhGUPBLsKC8hkjZhyfaKlHJGlVoyrXydt k19PLxhFhajEYDfdAdKE1pETGX6s7agtrf+qyE4GxfOOeVbvF53E5F3L7Z3mv93D9E GksUQ1rrC7A6JQBcDVOylsn2iZOUz+TCN6P+UTl5TkCd5LIRpIJE+TRDGMnAFH1yka 2SLPPGyIEJ2/g== From: Jeff Layton Date: Fri, 18 Apr 2025 10:24:29 -0400 Subject: [PATCH v4 5/7] ref_tracker: add ability to register a file in debugfs for a ref_tracker_dir Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250418-reftrack-dbgfs-v4-5-5ca5c7899544@kernel.org> References: <20250418-reftrack-dbgfs-v4-0-5ca5c7899544@kernel.org> In-Reply-To: <20250418-reftrack-dbgfs-v4-0-5ca5c7899544@kernel.org> To: Andrew Morton , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman Cc: Kuniyuki Iwashima , Qasim Ijaz , Nathan Chancellor , Andrew Lunn , linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Jeff Layton X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4764; i=jlayton@kernel.org; h=from:subject:message-id; bh=l5/XOHywB9lKjB1qgOx9rhhgBpmkHLAVDfkHYdzS1Fg=; b=owEBbQKS/ZANAwAIAQAOaEEZVoIVAcsmYgBoAmCiJpDdmm1FGJD8EuWDaTj+Dcpr+3q8vu+WH hl5eOuH+g6JAjMEAAEIAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaAJgogAKCRAADmhBGVaC FVObEADORujHToNmXBqCti8BoLyGbf6NoTYZyONOTh5/R5VC7GCv380knsTd6pe2EUA5jARdq7O uP8gxEUXJci3WuEr/TpZys9y8PyQj81uuVXky2eKn20qJRg+CHb6k0CaKTYLQMK5KdqXkN02+BB L83y42sD50ojjEsqbwHQVxQKMVmnSDKAI9eDFlFklg3NcRbfi6axfv3k5nukQhJQCXjg13tjzLT PdMzw17VpGbKMD9pdt0CnpUyM6/p0c/FCQAbQMDtNmKj9peA5o/2bPBQ2GMPX639wRym5Uj3AoK 0X7W1H1jnI7CuMZgNKkZBAFNe6JS2TgolAjvoa8Z3epRs4ztzvGOb70sQrRY8TpBX5aY+loOHdf 2Gz2pKJscASiySZ5pxSryIIbGTa6s/kmaYu5r0kIMHkuCY8fcLIO/xMO7IG9h0fYakS02SZKwao lmoMxC7Kxxgnk6M5SmAjjf/DxmYVzUBjsRKqIB606HyL204PXWxh2xHGCpaLIGzXZijHzTC5bNN 9W8IbmiTpXS3M+LuE/TmhkOMh8QheIrEnLjORW6oMQiDM1+UgO21HODEb+Mvv8dCtK9+Vo5MfHk Yi9+Jgc6ay8htmOvb10LsIxboTC+RN1z3b4MRmaPlw5NFz9MroXZbf1+BPEjsRbEkCalEoaefDt jpPuFI7mnrgO5VA== 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. Add a new function that other subsystems can optionally call to update the name field in the ref_tracker_dir and register a corresponding seq_file for it in the top-level ref_tracker directory. Reviewed-by: Andrew Lunn Signed-off-by: Jeff Layton --- include/linux/ref_tracker.h | 13 +++++++++++ lib/ref_tracker.c | 57 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+) diff --git a/include/linux/ref_tracker.h b/include/linux/ref_tracker.h index 8eac4f3d52547ccbaf9dcd09962ce80d26fbdff8..77a55a32c067216fa02ba349498f53bd289aee0c 100644 --- a/include/linux/ref_tracker.h +++ b/include/linux/ref_tracker.h @@ -5,6 +5,7 @@ #include #include #include +#include struct ref_tracker; @@ -17,6 +18,9 @@ struct ref_tracker_dir { bool dead; struct list_head list; /* List of active trackers */ struct list_head quarantine; /* List of dead trackers */ +#ifdef CONFIG_DEBUG_FS + struct dentry *dentry; +#endif char name[32]; #endif }; @@ -34,10 +38,15 @@ static inline void ref_tracker_dir_init(struct ref_tracker_dir *dir, dir->dead = false; refcount_set(&dir->untracked, 1); refcount_set(&dir->no_tracker, 1); +#ifdef CONFIG_DEBUG_FS + dir->dentry = NULL; +#endif strscpy(dir->name, name, sizeof(dir->name)); stack_depot_init(); } +void ref_tracker_dir_debugfs(struct ref_tracker_dir *dir, const char *name); + void ref_tracker_dir_exit(struct ref_tracker_dir *dir); void ref_tracker_dir_print_locked(struct ref_tracker_dir *dir, @@ -62,6 +71,10 @@ static inline void ref_tracker_dir_init(struct ref_tracker_dir *dir, { } +static inline void ref_tracker_dir_debugfs(struct ref_tracker_dir *dir, const char *name) +{ +} + 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 4857bcb6d4bf557a0089f51328e75e8209e959e6..d53105b959c122a85558cbe84551726f6429e08e 100644 --- a/lib/ref_tracker.c +++ b/lib/ref_tracker.c @@ -31,6 +31,14 @@ struct ref_tracker_dir_stats { } stacks[]; }; +#ifdef CONFIG_DEBUG_FS +static void ref_tracker_debugfs_remove(struct ref_tracker_dir *dir); +#else +static inline void ref_tracker_debugfs_remove(struct ref_tracker_dir *dir) +{ +} +#endif + static struct ref_tracker_dir_stats * ref_tracker_get_stats(struct ref_tracker_dir *dir, unsigned int limit) { @@ -197,6 +205,7 @@ void ref_tracker_dir_exit(struct ref_tracker_dir *dir) bool leak = false; dir->dead = true; + ref_tracker_debugfs_remove(dir); spin_lock_irqsave(&dir->lock, flags); list_for_each_entry_safe(tracker, n, &dir->quarantine, head) { list_del(&tracker->head); @@ -327,6 +336,54 @@ static int ref_tracker_dir_seq_print(struct ref_tracker_dir *dir, struct seq_fil return os.used; } +static int ref_tracker_debugfs_show(struct seq_file *f, void *v) +{ + struct ref_tracker_dir *dir = f->private; + + return ref_tracker_dir_seq_print(dir, f); +} + +static int ref_tracker_debugfs_open(struct inode *inode, struct file *filp) +{ + struct ref_tracker_dir *dir = inode->i_private; + + return single_open(filp, ref_tracker_debugfs_show, dir); +} + +static const struct file_operations ref_tracker_debugfs_fops = { + .owner = THIS_MODULE, + .open = ref_tracker_debugfs_open, + .read = seq_read, + .llseek = seq_lseek, + .release = single_release, +}; + +/** + * ref_tracker_dir_debugfs - create debugfs file for ref_tracker_dir + * @dir: ref_tracker_dir to finalize + * @name: updated name of the ref_tracker_dir + * + * In some cases, the name given to a ref_tracker_dir is based on incomplete information, + * and may not be unique. Call this to finalize the name of @dir, and create a debugfs + * file for it. If the name is not unique, a warning will be emitted but it is not fatal + * to the tracker. + */ +void ref_tracker_dir_debugfs(struct ref_tracker_dir *dir, const char *name) +{ + dir->dentry = debugfs_create_file(name, S_IFREG | 0400, + ref_tracker_debug_dir, dir, + &ref_tracker_debugfs_fops); + if (IS_ERR(dir->dentry)) + pr_warn("ref_tracker: unable to create debugfs file for %s: %pe\n", + name, dir->dentry); +} +EXPORT_SYMBOL(ref_tracker_dir_debugfs); + +static void ref_tracker_debugfs_remove(struct ref_tracker_dir *dir) +{ + debugfs_remove(dir->dentry); +} + static int __init ref_tracker_debugfs_init(void) { ref_tracker_debug_dir = debugfs_create_dir("ref_tracker", NULL); From patchwork Fri Apr 18 14:24:30 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jeff Layton X-Patchwork-Id: 14057247 X-Patchwork-Delegate: kuba@kernel.org 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 EAA811D9A49; Fri, 18 Apr 2025 14:24:43 +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=1744986284; cv=none; b=nokOauGQtrbFQkngoEsDeJ4hZ8XhYUnr5bITxOVg5Faih4SEt7eQVnKhriZrqG0LrGEpdnfJlzIYtWoiDvUZpZvystVshRgspMifLid9dG6+8NYCnpClXg/uVMhckNcGbl1oL9JeqW00apOWLc1mWrVCYXl71XKqIE8bgZ/8W+M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744986284; c=relaxed/simple; bh=RJRtNHg+95+XLhuKEmif7q5hF0e32tweD3eXg7ZWvp4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Ds/w3P7JXGV1Cko9E0oQ0vCN6Kc9balhBVU/wi1JlA+7cxKJAqvnlGc7Kazo56njc+rHWc4Oy8GxMIWlfdN0mnwHZ6O2aiPivaZqEerd/OpNLShEMxfokRX3XFQ84XI1KCE8u5nFKxzQNt/8LRXNVzcTjaA+CnnJ0PVN13d6n/Q= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=VeNdgVay; 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="VeNdgVay" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C8537C4CEEB; Fri, 18 Apr 2025 14:24:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1744986283; bh=RJRtNHg+95+XLhuKEmif7q5hF0e32tweD3eXg7ZWvp4=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=VeNdgVayFj7g81N/T0wYgYXvc5vkQxRW6Dr73vNE6/YURWzxqHsXGP8Xj2zhle0vf oyJOs4Pl3on3r2+OXeSbBycZ+CIbIopaGA39/fikfGQWpoeLcOZLyVVXKsEGHtprxS HwzxZu1vDaSV1ddRK2874K5WGVud+iBGg0XwSLd2Ilbb1vHODrvF9Njyg5j3qi+zrN FMUoa4kZUaqo8OQyo1KPfnjRU+BZOcL98l1ET4SOc3PxBejE/ndSW8gGZ+FNw0Za7E 9TNw0WpG6Zm5R72eAy1Ih4mSDTbw7Z100sm0JCiv/gMOfW+d9GHbJ+o2JtugkI9Wyg ButLHD8TVTjBg== From: Jeff Layton Date: Fri, 18 Apr 2025 10:24:30 -0400 Subject: [PATCH v4 6/7] net: add ref_tracker_dir_debugfs() calls for netns refcount tracking Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250418-reftrack-dbgfs-v4-6-5ca5c7899544@kernel.org> References: <20250418-reftrack-dbgfs-v4-0-5ca5c7899544@kernel.org> In-Reply-To: <20250418-reftrack-dbgfs-v4-0-5ca5c7899544@kernel.org> To: Andrew Morton , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman Cc: Kuniyuki Iwashima , Qasim Ijaz , Nathan Chancellor , Andrew Lunn , linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Jeff Layton X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1907; i=jlayton@kernel.org; h=from:subject:message-id; bh=RJRtNHg+95+XLhuKEmif7q5hF0e32tweD3eXg7ZWvp4=; b=owEBbQKS/ZANAwAIAQAOaEEZVoIVAcsmYgBoAmCicPUIx1rMgKXr3BYoBZgUTPjX2XxnGzZVy Upw31d0cFGJAjMEAAEIAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaAJgogAKCRAADmhBGVaC FdubD/475MUWwIHIQUz/yNHpnwmkhhYeaMJ7e2yG1OPlCGP23IoBwV4LUEXbQ7m0k+XKk29OamO T8/TnNv8PAmIykKFeTzJInwL26E0lOMIJlkvIq35WpwvxbA86tfYZ2u3g3Ht0OgtgIEQVLtaw2C DaLxy4HwFciNexX92IC4mz2k0PJJuz6cJWpAFR4uKHNxxyDcn1smHbKLlYFy15rbZYuBAV2qEDo k5e9igZgAmCobycugu64dW3+0pmK+/fYYJeF4Bny+3Vjd2V0wnipBBQcj47NOyQBq5nOLNLn2TE xeK3KJsK/EZIQl26xiVGQZtL3Sxw4D8oJUd8VVGzxPqKcYwmu3ToRgUCJ7xQycOf0p6nR1h664R ougHLj18GpcLYGWqT2n4atAwwVh2qb5Gv6OhludJNkt1XwOGIkC+Banwyuum9f1+FzM+Evqw9Ko 55ak70A7YjhZ65J2UT2KjhgDaYX55kTnBx6jjG7dcvPghH35bZ7bIdIc3WS7o+/O4p/AfSyoVi3 mrRAb5fTjwM83tigr9TisgMyWsObZcOHuYgtd6kEk3WZDpRy0+ulbSoPJeBEUwqu0JrK9HFMO8F OARsqk6FNl8eKg4zkMZzl6Th/xEHeaCm60ud8UA7a82zPt5tVmnMfDRFZNZ5i7UvRaaWnmYJNBx 4unARLotJ/oxcFg== X-Developer-Key: i=jlayton@kernel.org; a=openpgp; fpr=4BC0D7B24471B2A184EAF5D3000E684119568215 X-Patchwork-Delegate: kuba@kernel.org After assigning the inode number to the namespace, use it to create a unique name for each netns refcount tracker and register the debugfs files for them. init_net is registered before the ref_tracker dir is created, so add a late_initcall() to register its files. Reviewed-by: Kuniyuki Iwashima Reviewed-by: Andrew Lunn Signed-off-by: Jeff Layton --- net/core/net_namespace.c | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c index 4303f2a4926243e2c0ff0c0387383cd8e0658019..f35c51f1eddacf3e84cdd51d77dee9f1d6dc4f87 100644 --- a/net/core/net_namespace.c +++ b/net/core/net_namespace.c @@ -761,12 +761,44 @@ struct net *get_net_ns_by_pid(pid_t pid) } EXPORT_SYMBOL_GPL(get_net_ns_by_pid); +#ifdef CONFIG_NET_NS_REFCNT_TRACKER +static void net_ns_net_debugfs(struct net *net) +{ + char name[NAME_MAX + 1]; + size_t len; + + len = snprintf(name, sizeof(name), "netns-%u-refcnt", net->ns.inum); + if (len < sizeof(name)) + ref_tracker_dir_debugfs(&net->refcnt_tracker, name); + + len = snprintf(name, sizeof(name), "netns-%u-notrefcnt", net->ns.inum); + if (len < sizeof(name)) + ref_tracker_dir_debugfs(&net->notrefcnt_tracker, name); +} + +static int __init init_net_debugfs(void) +{ + 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 = &netns_operations; #endif - return ns_alloc_inum(&net->ns); + ret = ns_alloc_inum(&net->ns); + if (!ret) + net_ns_net_debugfs(net); + return ret; } static __net_exit void net_ns_net_exit(struct net *net) From patchwork Fri Apr 18 14:24:31 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jeff Layton X-Patchwork-Id: 14057248 X-Patchwork-Delegate: kuba@kernel.org 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 8B22B1DE4D5; Fri, 18 Apr 2025 14:24: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=1744986285; cv=none; b=MENsZnT5gvKkqXt/FXTHux8X3aW+wvQFlB1aLxSrrss18SdoOs+SqE5i0IvzcWX8MLJqYd8UO5MA+AN7eWA2f4MJy4kCHcqXInQSAvbM0kVNN3scOSFRk7h1g5FiGwbgGAj9Y8W0DurwW4RYqywmJMwT57jRWETe0AcDmlHJS9c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744986285; c=relaxed/simple; bh=VYc4cFX2kNa24+VMNVEjITkhtJG0EHEVrqimNoAqlQE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ZIkBmrlNgeAA/RO/pvnVMEH0isDhDYEiiOtI68dXlsVWtls0SNYo3QPNDBGALOtgH4KFe4SCiz63JQvmuNf/Wz4cghLuFWoe78aVmnBpvRfBj7M/4XNoQ/C+6OsCIhRsslzz8MnSdfigQXcmwJwJmyDsgvOjX3w8CfNNDUOtCqE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=pvAQt92z; 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="pvAQt92z" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0CC8CC4CEED; Fri, 18 Apr 2025 14:24:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1744986285; bh=VYc4cFX2kNa24+VMNVEjITkhtJG0EHEVrqimNoAqlQE=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=pvAQt92zkZx+onsQHNxzRQEupQHp8eFznCGYCeWGmlQfwPYcapTQrbevcMtB3YHQS uKHS8DnNfTAKAmBtG3h5tvbqE+M5xpACwq/C3Nl+Pk/Yg5QPYsO4szANR4t55XcSnG i+fSf/hVIyz8HtwFMmG6hqRHuHQoqwCdjR9i5+VIwjFe76xnAeBY4GJC/egbZ2xApF Ms5Fg2Nb10Cpa0yPn0v2pGYcdHLMVeOBOk0ehnAnziHGSa9MYGWOFgXw2I1X1enUxM /Ygrx2tB+WJH4jziuM68B6OUCwG5CFzFJ9Vh4C41TRtpUyx1w9ElyFPhBtS8Wnb3bM 1fuVP38JVs4+A== From: Jeff Layton Date: Fri, 18 Apr 2025 10:24:31 -0400 Subject: [PATCH v4 7/7] net: register debugfs file for net_device refcnt tracker Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250418-reftrack-dbgfs-v4-7-5ca5c7899544@kernel.org> References: <20250418-reftrack-dbgfs-v4-0-5ca5c7899544@kernel.org> In-Reply-To: <20250418-reftrack-dbgfs-v4-0-5ca5c7899544@kernel.org> To: Andrew Morton , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman Cc: Kuniyuki Iwashima , Qasim Ijaz , Nathan Chancellor , Andrew Lunn , linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Jeff Layton X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1306; i=jlayton@kernel.org; h=from:subject:message-id; bh=VYc4cFX2kNa24+VMNVEjITkhtJG0EHEVrqimNoAqlQE=; b=owEBbQKS/ZANAwAIAQAOaEEZVoIVAcsmYgBoAmCic1DxTa7/YRueIIGZpg4utucryKIFa0uLO Ib1Lc8GNpuJAjMEAAEIAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaAJgogAKCRAADmhBGVaC FYnNEADTvOQjXbqGWzjGC1YCBBgnunz+49uokptG6ejAhHPYiIlqQw2Wy9NFNITxfoNu5BZvs1e 1HvUGL86LFtNSOqOfpPDG39kbdSnSnqKlHwUMA2wSqpiKnrkqjPr5E1Jk9USNXIRTXBdF9//uQ2 0qbKjyMPYBSAcrn0vwjuAqFv/J0l5FzCRuwSQUU0iMhQeppwTU7imIcVN70vxCc3/Nbc5HXAZH6 BgFyp4fodJmGYQEBfFz8ruiC7F+Fq1FbGRP8dEOZRtSFHo87+RehHGg5mwNQ2SIRnTy8BBVGEXI XVNv1yrheGXJ5An8rxkQzhzT53uYstGCALLbmQQ54AW7eUOSln06ao73YNmu0LbQ4OjXuvDFXta O7z0xnX48yme7DuPhBtABT2wqhDKyV0CBN3l2pgf3PYQYDMuCwi+2qzCPFru0PgPvPlN+zKH9lY q0gF6UQspx7djjrAqYSYgrtqBk4/UVhH9xWh2PBhwc0JXcGtvzrQJ7w3k9ojuJIew+WHNmtgQ1j dPLXbWtbGdzS1ZogoNF9XmLLtNAxdguV/k6hhKmpTZlpGVCTxCBJTMndXfQO56/mwoMfRGQMSfJ 8mdZx3tDFqJkX7brojC/iLe+o19gXx1uMFvABFVZpZWldFg4kX9ZdNCVqDQH91wnwYEV23f3tpX AqUNLSluMusNfWw== X-Developer-Key: i=jlayton@kernel.org; a=openpgp; fpr=4BC0D7B24471B2A184EAF5D3000E684119568215 X-Patchwork-Delegate: kuba@kernel.org As a nearly-final step in register_netdevice(), finalize the name in the refcount tracker, and register a debugfs file for it. Reviewed-by: Kuniyuki Iwashima Reviewed-by: Andrew Lunn Signed-off-by: Jeff Layton --- net/core/dev.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/net/core/dev.c b/net/core/dev.c index 2f7f5fd9ffec7c0fc219eb6ba57d57a55134186e..377a19240f2b774281088d91e7da3e4b6ec52e33 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -10834,8 +10834,9 @@ static void netdev_free_phy_link_topology(struct net_device *dev) */ int register_netdevice(struct net_device *dev) { - int ret; struct net *net = dev_net(dev); + char name[NAME_MAX + 1]; + int ret; BUILD_BUG_ON(sizeof(netdev_features_t) * BITS_PER_BYTE < NETDEV_FEATURE_COUNT); @@ -10994,6 +10995,9 @@ int register_netdevice(struct net_device *dev) dev->rtnl_link_state == RTNL_LINK_INITIALIZED) rtmsg_ifinfo(RTM_NEWLINK, dev, ~0U, GFP_KERNEL, 0, NULL); + /* Register debugfs file for the refcount tracker */ + if (snprintf(name, sizeof(name), "netdev-%s@%p", dev->name, dev) < sizeof(name)) + ref_tracker_dir_debugfs(&dev->refcnt_tracker, name); out: return ret;