public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] ref_tracker: add stack_depot_save() failure handling to ref_tracker_alloc()
@ 2023-05-27 11:04 Tetsuo Handa
  2023-05-30  2:05 ` Jakub Kicinski
  0 siblings, 1 reply; 5+ messages in thread
From: Tetsuo Handa @ 2023-05-27 11:04 UTC (permalink / raw)
  To: Eric Dumazet, Dmitry Vyukov, Jakub Kicinski, David S. Miller; +Cc: LKML

stack_depot_save() cannot accept __GFP_NOFAIL flag because
__stack_depot_save() drops gfp flags which are not in
GFP_KERNEL | GFP_ATOMIC | __GFP_NOWARN. Also, changing
__stack_depot_save() to accept __GFP_NOFAIL is not possible
because rmqueue() does not want __GFP_NOFAIL flag for
order == DEPOT_POOL_ORDER allocation request.

Therefore, assume that stack_depot_save(GFP_KERNEL | __GFP_NOFAIL) from
ref_tracker_alloc() can silently fail, and emit "unreliable refcount
tracker." message.

Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
---
 lib/ref_tracker.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/lib/ref_tracker.c b/lib/ref_tracker.c
index dc7b14aa3431..ad48ff19adb2 100644
--- a/lib/ref_tracker.c
+++ b/lib/ref_tracker.c
@@ -84,12 +84,18 @@ int ref_tracker_alloc(struct ref_tracker_dir *dir,
 		gfp_mask |= __GFP_NOFAIL;
 	*trackerp = tracker = kzalloc(sizeof(*tracker), gfp_mask);
 	if (unlikely(!tracker)) {
+nomem:
 		pr_err_once("memory allocation failure, unreliable refcount tracker.\n");
 		refcount_inc(&dir->untracked);
 		return -ENOMEM;
 	}
 	nr_entries = stack_trace_save(entries, ARRAY_SIZE(entries), 1);
 	tracker->alloc_stack_handle = stack_depot_save(entries, nr_entries, gfp);
+	if (!tracker->alloc_stack_handle) {
+		*trackerp = NULL;
+		kfree(tracker);
+		goto nomem;
+	}
 
 	spin_lock_irqsave(&dir->lock, flags);
 	list_add(&tracker->head, &dir->list);
-- 
2.18.4


^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2023-05-30 10:07 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-05-27 11:04 [PATCH] ref_tracker: add stack_depot_save() failure handling to ref_tracker_alloc() Tetsuo Handa
2023-05-30  2:05 ` Jakub Kicinski
2023-05-30  7:22   ` Eric Dumazet
2023-05-30  9:51     ` Tetsuo Handa
2023-05-30 10:06       ` Eric Dumazet

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox