From patchwork Sun Dec 5 04:21:55 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 12656907 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1451CC433F5 for ; Sun, 5 Dec 2021 04:22:31 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231394AbhLEEZz (ORCPT ); Sat, 4 Dec 2021 23:25:55 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45864 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231387AbhLEEZz (ORCPT ); Sat, 4 Dec 2021 23:25:55 -0500 Received: from mail-pl1-x62d.google.com (mail-pl1-x62d.google.com [IPv6:2607:f8b0:4864:20::62d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9826CC061751 for ; Sat, 4 Dec 2021 20:22:28 -0800 (PST) Received: by mail-pl1-x62d.google.com with SMTP id k4so4835468plx.8 for ; Sat, 04 Dec 2021 20:22:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=JFPeeIF9LdcBAftFvXJ114QsIch1nlGj9KpbveqAer4=; b=IvbPrHOtlQb1D2RT7+75f/xfTtiCls2h9H3aTFLHJlYy4+DMd44vrbv4l7dyq1uhDK Fy5litRt06wsd1mRKy8F3YYTNft9UIdLeDePnUlSXKo1GGsXyjIaCQgNHa10h7fxNB/K v4tJFC+jy3jiplrLZtie64ywnhif/O+OXOsrnxUsUKlI6GPTr0t20QjytXN26UfSZiKM md+OELgyBlzJDo9yvtWeM0c+AZL4oBUWhsGVaHXcPp871sjb43gyZTmyT2ecZvqCHOZj 3uKDK0HdGRkK/csC+2B9CxN8BH6cqdDNqSd3L7Rw7mqxWQLOg+Z4Qt+6wsFDNDobF6o/ DUyw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=JFPeeIF9LdcBAftFvXJ114QsIch1nlGj9KpbveqAer4=; b=02jeLN+60pM7VKRjY+trtWaZfbVyyHGWxch9ynYbKAo7AUQGUQvdcSOkdZkl8KMjcI T0hMLDnH9epSIFc22CsuLNgiY3aiVZuSYamu0yeZ6k036j9d+tGCq7bTCoidpm5NxBm/ xVpQmChoLmFdo8263GtI5wafc1cJ8SOzDcssuw37NF3n5acwSzy9jzwQcD4HJ/95If/S m3sUP9iHcVlioY1yGAYS0nA+RTdv2H/DQ2s8MXHsEDChh+IsZoFZVE3WDkAKgrQlzTS9 wG2G204jW9OI4TuWpKPP1d7qOhzbltBAaLDYZeQ3pe09/Cz9FnHPxEVmcpQNJoaAMh+T lzkQ== X-Gm-Message-State: AOAM5316g9h5+EsehzP0cG4mPUDNUbxnf0R7fdUFsjQWYS4RDpE6G8mO vJExms8woMdxHobQAdyLjtU= X-Google-Smtp-Source: ABdhPJyV+vzxc7JmI9ghp555BCVoAiBvcVFS21u+MrPPF0pLt/k694DCSa6RxseQAUJIaqlWgS0Flg== X-Received: by 2002:a17:903:2443:b0:142:1e92:1d19 with SMTP id l3-20020a170903244300b001421e921d19mr34509648pls.24.1638678148117; Sat, 04 Dec 2021 20:22:28 -0800 (PST) Received: from edumazet1.svl.corp.google.com ([2620:15c:2c4:201:ffa7:1c62:2d55:eac2]) by smtp.gmail.com with ESMTPSA id 17sm6027095pgw.1.2021.12.04.20.22.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 04 Dec 2021 20:22:27 -0800 (PST) From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski Cc: netdev , Eric Dumazet , Eric Dumazet , Dmitry Vyukov Subject: [PATCH v3 net-next 01/23] lib: add reference counting tracking infrastructure Date: Sat, 4 Dec 2021 20:21:55 -0800 Message-Id: <20211205042217.982127-2-eric.dumazet@gmail.com> X-Mailer: git-send-email 2.34.1.400.ga245620fadb-goog In-Reply-To: <20211205042217.982127-1-eric.dumazet@gmail.com> References: <20211205042217.982127-1-eric.dumazet@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Eric Dumazet It can be hard to track where references are taken and released. In networking, we have annoying issues at device or netns dismantles, and we had various proposals to ease root causing them. This patch adds new infrastructure pairing refcount increases and decreases. This will self document code, because programmers will have to associate increments/decrements. This is controled by CONFIG_REF_TRACKER which can be selected by users of this feature. This adds both cpu and memory costs, and thus should probably be used with care. Signed-off-by: Eric Dumazet Reviewed-by: Dmitry Vyukov Signed-off-by: Vlastimil Babka Reviewed-by: Eric Dumazet Reported-by: Jiri Slab --- include/linux/ref_tracker.h | 73 +++++++++++++++++++ lib/Kconfig | 5 ++ lib/Makefile | 2 + lib/ref_tracker.c | 140 ++++++++++++++++++++++++++++++++++++ 4 files changed, 220 insertions(+) create mode 100644 include/linux/ref_tracker.h create mode 100644 lib/ref_tracker.c diff --git a/include/linux/ref_tracker.h b/include/linux/ref_tracker.h new file mode 100644 index 0000000000000000000000000000000000000000..c11c9db5825cf933acf529c83db441a818135f29 --- /dev/null +++ b/include/linux/ref_tracker.h @@ -0,0 +1,73 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +#ifndef _LINUX_REF_TRACKER_H +#define _LINUX_REF_TRACKER_H +#include +#include +#include + +struct ref_tracker; + +struct ref_tracker_dir { +#ifdef CONFIG_REF_TRACKER + spinlock_t lock; + unsigned int quarantine_avail; + refcount_t untracked; + struct list_head list; /* List of active trackers */ + struct list_head quarantine; /* List of dead trackers */ +#endif +}; + +#ifdef CONFIG_REF_TRACKER +static inline void ref_tracker_dir_init(struct ref_tracker_dir *dir, + unsigned int quarantine_count) +{ + INIT_LIST_HEAD(&dir->list); + INIT_LIST_HEAD(&dir->quarantine); + spin_lock_init(&dir->lock); + dir->quarantine_avail = quarantine_count; + refcount_set(&dir->untracked, 1); +} + +void ref_tracker_dir_exit(struct ref_tracker_dir *dir); + +void ref_tracker_dir_print(struct ref_tracker_dir *dir, + unsigned int display_limit); + +int ref_tracker_alloc(struct ref_tracker_dir *dir, + struct ref_tracker **trackerp, gfp_t gfp); + +int ref_tracker_free(struct ref_tracker_dir *dir, + struct ref_tracker **trackerp); + +#else /* CONFIG_REF_TRACKER */ + +static inline void ref_tracker_dir_init(struct ref_tracker_dir *dir, + unsigned int quarantine_count) +{ +} + +static inline void ref_tracker_dir_exit(struct ref_tracker_dir *dir) +{ +} + +static inline void ref_tracker_dir_print(struct ref_tracker_dir *dir, + unsigned int display_limit) +{ +} + +static inline int ref_tracker_alloc(struct ref_tracker_dir *dir, + struct ref_tracker **trackerp, + gfp_t gfp) +{ + return 0; +} + +static inline int ref_tracker_free(struct ref_tracker_dir *dir, + struct ref_tracker **trackerp) +{ + return 0; +} + +#endif + +#endif /* _LINUX_REF_TRACKER_H */ diff --git a/lib/Kconfig b/lib/Kconfig index 5e7165e6a346c9bec878b78c8c8c3d175fc98dfd..655b0e43f260bfca63240794191e3f1890b2e801 100644 --- a/lib/Kconfig +++ b/lib/Kconfig @@ -680,6 +680,11 @@ config STACK_HASH_ORDER Select the hash size as a power of 2 for the stackdepot hash table. Choose a lower value to reduce the memory impact. +config REF_TRACKER + bool + depends on STACKTRACE_SUPPORT + select STACKDEPOT + config SBITMAP bool diff --git a/lib/Makefile b/lib/Makefile index 364c23f1557816f73aebd8304c01224a4846ac6c..c1fd9243ddb9cc1ac5252d7eb8009f9290782c4a 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -270,6 +270,8 @@ obj-$(CONFIG_STACKDEPOT) += stackdepot.o KASAN_SANITIZE_stackdepot.o := n KCOV_INSTRUMENT_stackdepot.o := n +obj-$(CONFIG_REF_TRACKER) += ref_tracker.o + libfdt_files = fdt.o fdt_ro.o fdt_wip.o fdt_rw.o fdt_sw.o fdt_strerror.o \ fdt_empty_tree.o fdt_addresses.o $(foreach file, $(libfdt_files), \ diff --git a/lib/ref_tracker.c b/lib/ref_tracker.c new file mode 100644 index 0000000000000000000000000000000000000000..0ae2e66dcf0fdb976f4cb99e747c9448b37f22cc --- /dev/null +++ b/lib/ref_tracker.c @@ -0,0 +1,140 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +#include +#include +#include +#include +#include + +#define REF_TRACKER_STACK_ENTRIES 16 + +struct ref_tracker { + struct list_head head; /* anchor into dir->list or dir->quarantine */ + bool dead; + depot_stack_handle_t alloc_stack_handle; + depot_stack_handle_t free_stack_handle; +}; + +void ref_tracker_dir_exit(struct ref_tracker_dir *dir) +{ + struct ref_tracker *tracker, *n; + unsigned long flags; + bool leak = false; + + spin_lock_irqsave(&dir->lock, flags); + list_for_each_entry_safe(tracker, n, &dir->quarantine, head) { + list_del(&tracker->head); + kfree(tracker); + dir->quarantine_avail++; + } + list_for_each_entry_safe(tracker, n, &dir->list, head) { + pr_err("leaked reference.\n"); + if (tracker->alloc_stack_handle) + stack_depot_print(tracker->alloc_stack_handle); + leak = true; + list_del(&tracker->head); + kfree(tracker); + } + spin_unlock_irqrestore(&dir->lock, flags); + WARN_ON_ONCE(leak); + WARN_ON_ONCE(refcount_read(&dir->untracked) != 1); +} +EXPORT_SYMBOL(ref_tracker_dir_exit); + +void ref_tracker_dir_print(struct ref_tracker_dir *dir, + unsigned int display_limit) +{ + struct ref_tracker *tracker; + unsigned long flags; + unsigned int i = 0; + + spin_lock_irqsave(&dir->lock, flags); + list_for_each_entry(tracker, &dir->list, head) { + if (i < display_limit) { + pr_err("leaked reference.\n"); + if (tracker->alloc_stack_handle) + stack_depot_print(tracker->alloc_stack_handle); + i++; + } else { + break; + } + } + spin_unlock_irqrestore(&dir->lock, flags); +} +EXPORT_SYMBOL(ref_tracker_dir_print); + +int ref_tracker_alloc(struct ref_tracker_dir *dir, + struct ref_tracker **trackerp, + gfp_t gfp) +{ + unsigned long entries[REF_TRACKER_STACK_ENTRIES]; + struct ref_tracker *tracker; + unsigned int nr_entries; + unsigned long flags; + + *trackerp = tracker = kzalloc(sizeof(*tracker), gfp | __GFP_NOFAIL); + if (unlikely(!tracker)) { + 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); + nr_entries = filter_irq_stacks(entries, nr_entries); + tracker->alloc_stack_handle = stack_depot_save(entries, nr_entries, gfp); + + spin_lock_irqsave(&dir->lock, flags); + list_add(&tracker->head, &dir->list); + spin_unlock_irqrestore(&dir->lock, flags); + return 0; +} +EXPORT_SYMBOL_GPL(ref_tracker_alloc); + +int ref_tracker_free(struct ref_tracker_dir *dir, + struct ref_tracker **trackerp) +{ + unsigned long entries[REF_TRACKER_STACK_ENTRIES]; + struct ref_tracker *tracker = *trackerp; + depot_stack_handle_t stack_handle; + unsigned int nr_entries; + unsigned long flags; + + if (!tracker) { + refcount_dec(&dir->untracked); + return -EEXIST; + } + nr_entries = stack_trace_save(entries, ARRAY_SIZE(entries), 1); + nr_entries = filter_irq_stacks(entries, nr_entries); + stack_handle = stack_depot_save(entries, nr_entries, GFP_ATOMIC); + + spin_lock_irqsave(&dir->lock, flags); + if (tracker->dead) { + pr_err("reference already released.\n"); + if (tracker->alloc_stack_handle) { + pr_err("allocated in:\n"); + stack_depot_print(tracker->alloc_stack_handle); + } + if (tracker->free_stack_handle) { + pr_err("freed in:\n"); + stack_depot_print(tracker->free_stack_handle); + } + spin_unlock_irqrestore(&dir->lock, flags); + WARN_ON_ONCE(1); + return -EINVAL; + } + tracker->dead = true; + + tracker->free_stack_handle = stack_handle; + + list_move_tail(&tracker->head, &dir->quarantine); + if (!dir->quarantine_avail) { + tracker = list_first_entry(&dir->quarantine, struct ref_tracker, head); + list_del(&tracker->head); + } else { + dir->quarantine_avail--; + tracker = NULL; + } + spin_unlock_irqrestore(&dir->lock, flags); + + kfree(tracker); + return 0; +} +EXPORT_SYMBOL_GPL(ref_tracker_free); From patchwork Sun Dec 5 04:21:56 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 12656909 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id B2BECC433F5 for ; Sun, 5 Dec 2021 04:22:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231398AbhLEE0A (ORCPT ); Sat, 4 Dec 2021 23:26:00 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45880 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231387AbhLEEZ7 (ORCPT ); Sat, 4 Dec 2021 23:25:59 -0500 Received: from mail-pg1-x535.google.com (mail-pg1-x535.google.com [IPv6:2607:f8b0:4864:20::535]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C62C9C061751 for ; Sat, 4 Dec 2021 20:22:32 -0800 (PST) Received: by mail-pg1-x535.google.com with SMTP id l190so7099432pge.7 for ; Sat, 04 Dec 2021 20:22:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=ioZfax4o8NEFrVaprs98vL6qqVVok1UqZSkuU+qDvLA=; b=Dd1EeMBGfcOaeQL6c6Qrux5U+Cm9VTTrEXheMQHJsAEuSwvUoHVcRxlyhOqwoSzK8k gkY5MXrGEKVh//9pzOPsqaTxDENgEAfeX9jbxjNq9jft91B3SX4t2gNRN0V7s3lY/PuP rOxEva0P8nIIKp8rxIAJD42igDmJtr4m5gS5zde/MaKpNur77iUuqTgebtusQvWy5kPe qW9znf6yTCFkKaT+ghwXSgEHWL4n8pUcCzcS6Gafma+2b6Mm0/w/5N7Op/1fpv3Qyms/ wtfyqZfijemW9BuzyOuWdLR9cXMEEo2/BcwNRT4eHs3pxwLwqVjvFI6PtzOg2G8KH0fn GjBw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=ioZfax4o8NEFrVaprs98vL6qqVVok1UqZSkuU+qDvLA=; b=ofHAHVCPewJ17PvArPyzxq1qwFs4k0jsZ5Kw4DdqSose29Jmg4dv0O0yKmifwLuywH 8e+sVa1od2EoQcogQ/CZIS5ni5iE+mVGEDNvziJrKv2PXPJ/4XiK4wEfnAx3JC28JFo/ BPie9RUDEhSnwLVLZLlvUzF5gKR1NMYyvyiDBPS43RX3i1lNM4q2O307TWiYayfPqhgj YJ2MMpHCl4a6tZBhWXOqqECc/BdxSjNbKy77FLHXLMkThTTa3fvl9OWB2ejRnnI9sBFD veMLm6pCn647qttizOJUHOX7rI4bRKyMl1JWdIaTUSIkYdxrwCEnAYxKbRki9yU1k1AH LF7A== X-Gm-Message-State: AOAM531FFhOjrerPfEI5ZvuELqCfn1ruSUU5JVvDs86CRwCV9Whhk5Ca h5y7pih4y4ABI7uAx389sFE= X-Google-Smtp-Source: ABdhPJyf+mqxwnD3xPXAbdJvOQNwOcziMoK20BPHKt+PGCaCTe80iW3Iwpx7h7EIc3BdjHggYqMOnw== X-Received: by 2002:a05:6a00:248f:b0:4a0:1e25:3155 with SMTP id c15-20020a056a00248f00b004a01e253155mr29343128pfv.21.1638678152145; Sat, 04 Dec 2021 20:22:32 -0800 (PST) Received: from edumazet1.svl.corp.google.com ([2620:15c:2c4:201:ffa7:1c62:2d55:eac2]) by smtp.gmail.com with ESMTPSA id 17sm6027095pgw.1.2021.12.04.20.22.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 04 Dec 2021 20:22:31 -0800 (PST) From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski Cc: netdev , Eric Dumazet , Eric Dumazet , Dmitry Vyukov Subject: [PATCH v3 net-next 02/23] lib: add tests for reference tracker Date: Sat, 4 Dec 2021 20:21:56 -0800 Message-Id: <20211205042217.982127-3-eric.dumazet@gmail.com> X-Mailer: git-send-email 2.34.1.400.ga245620fadb-goog In-Reply-To: <20211205042217.982127-1-eric.dumazet@gmail.com> References: <20211205042217.982127-1-eric.dumazet@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Eric Dumazet This module uses reference tracker, forcing two issues. 1) Double free of a tracker 2) leak of two trackers, one being allocated from softirq context. "modprobe test_ref_tracker" would emit the following traces. (Use scripts/decode_stacktrace.sh if necessary) [ 171.648681] reference already released. [ 171.653213] allocated in: [ 171.656523] alloctest_ref_tracker_alloc2+0x1c/0x20 [test_ref_tracker] [ 171.656526] init_module+0x86/0x1000 [test_ref_tracker] [ 171.656528] do_one_initcall+0x9c/0x220 [ 171.656532] do_init_module+0x60/0x240 [ 171.656536] load_module+0x32b5/0x3610 [ 171.656538] __do_sys_init_module+0x148/0x1a0 [ 171.656540] __x64_sys_init_module+0x1d/0x20 [ 171.656542] do_syscall_64+0x4a/0xb0 [ 171.656546] entry_SYSCALL_64_after_hwframe+0x44/0xae [ 171.656549] freed in: [ 171.659520] alloctest_ref_tracker_free+0x13/0x20 [test_ref_tracker] [ 171.659522] init_module+0xec/0x1000 [test_ref_tracker] [ 171.659523] do_one_initcall+0x9c/0x220 [ 171.659525] do_init_module+0x60/0x240 [ 171.659527] load_module+0x32b5/0x3610 [ 171.659529] __do_sys_init_module+0x148/0x1a0 [ 171.659532] __x64_sys_init_module+0x1d/0x20 [ 171.659534] do_syscall_64+0x4a/0xb0 [ 171.659536] entry_SYSCALL_64_after_hwframe+0x44/0xae [ 171.659575] ------------[ cut here ]------------ [ 171.659576] WARNING: CPU: 5 PID: 13016 at lib/ref_tracker.c:112 ref_tracker_free+0x224/0x270 [ 171.659581] Modules linked in: test_ref_tracker(+) [ 171.659591] CPU: 5 PID: 13016 Comm: modprobe Tainted: G S 5.16.0-smp-DEV #290 [ 171.659595] RIP: 0010:ref_tracker_free+0x224/0x270 [ 171.659599] Code: 5e 41 5f 5d c3 48 c7 c7 04 9c 74 a6 31 c0 e8 62 ee 67 00 83 7b 14 00 75 1a 83 7b 18 00 75 30 4c 89 ff 4c 89 f6 e8 9c 00 69 00 <0f> 0b bb ea ff ff ff eb ae 48 c7 c7 3a 0a 77 a6 31 c0 e8 34 ee 67 [ 171.659601] RSP: 0018:ffff89058ba0bbd0 EFLAGS: 00010286 [ 171.659603] RAX: 0000000000000029 RBX: ffff890586b19780 RCX: 08895bff57c7d100 [ 171.659604] RDX: c0000000ffff7fff RSI: 0000000000000282 RDI: ffffffffc0407000 [ 171.659606] RBP: ffff89058ba0bc88 R08: 0000000000000000 R09: ffffffffa6f342e0 [ 171.659607] R10: 00000000ffff7fff R11: 0000000000000000 R12: 000000008f000000 [ 171.659608] R13: 0000000000000014 R14: 0000000000000282 R15: ffffffffc0407000 [ 171.659609] FS: 00007f97ea29d740(0000) GS:ffff8923ff940000(0000) knlGS:0000000000000000 [ 171.659611] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 171.659613] CR2: 00007f97ea299000 CR3: 0000000186b4a004 CR4: 00000000001706e0 [ 171.659614] Call Trace: [ 171.659615] [ 171.659631] ? alloctest_ref_tracker_free+0x13/0x20 [test_ref_tracker] [ 171.659633] ? init_module+0x105/0x1000 [test_ref_tracker] [ 171.659636] ? do_one_initcall+0x9c/0x220 [ 171.659638] ? do_init_module+0x60/0x240 [ 171.659641] ? load_module+0x32b5/0x3610 [ 171.659644] ? __do_sys_init_module+0x148/0x1a0 [ 171.659646] ? __x64_sys_init_module+0x1d/0x20 [ 171.659649] ? do_syscall_64+0x4a/0xb0 [ 171.659652] ? entry_SYSCALL_64_after_hwframe+0x44/0xae [ 171.659656] ? 0xffffffffc040a000 [ 171.659658] alloctest_ref_tracker_free+0x13/0x20 [test_ref_tracker] [ 171.659660] init_module+0x105/0x1000 [test_ref_tracker] [ 171.659663] do_one_initcall+0x9c/0x220 [ 171.659666] do_init_module+0x60/0x240 [ 171.659669] load_module+0x32b5/0x3610 [ 171.659672] __do_sys_init_module+0x148/0x1a0 [ 171.659676] __x64_sys_init_module+0x1d/0x20 [ 171.659678] do_syscall_64+0x4a/0xb0 [ 171.659694] ? exc_page_fault+0x6e/0x140 [ 171.659696] entry_SYSCALL_64_after_hwframe+0x44/0xae [ 171.659698] RIP: 0033:0x7f97ea3dbe7a [ 171.659700] Code: 48 8b 0d 61 8d 06 00 f7 d8 64 89 01 48 83 c8 ff c3 cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc 49 89 ca b8 af 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d 2e 8d 06 00 f7 d8 64 89 01 48 [ 171.659701] RSP: 002b:00007ffea67ce608 EFLAGS: 00000246 ORIG_RAX: 00000000000000af [ 171.659703] RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007f97ea3dbe7a [ 171.659704] RDX: 00000000013a0ba0 RSI: 0000000000002808 RDI: 00007f97ea299000 [ 171.659705] RBP: 00007ffea67ce670 R08: 0000000000000003 R09: 0000000000000000 [ 171.659706] R10: 0000000000000000 R11: 0000000000000246 R12: 00000000013a1048 [ 171.659707] R13: 00000000013a0ba0 R14: 0000000001399930 R15: 00000000013a1030 [ 171.659709] [ 171.659710] ---[ end trace f5dbd6afa41e60a9 ]--- [ 171.659712] leaked reference. [ 171.663393] alloctest_ref_tracker_alloc0+0x1c/0x20 [test_ref_tracker] [ 171.663395] test_ref_tracker_timer_func+0x9/0x20 [test_ref_tracker] [ 171.663397] call_timer_fn+0x31/0x140 [ 171.663401] expire_timers+0x46/0x110 [ 171.663403] __run_timers+0x16f/0x1b0 [ 171.663404] run_timer_softirq+0x1d/0x40 [ 171.663406] __do_softirq+0x148/0x2d3 [ 171.663408] leaked reference. [ 171.667101] alloctest_ref_tracker_alloc1+0x1c/0x20 [test_ref_tracker] [ 171.667103] init_module+0x81/0x1000 [test_ref_tracker] [ 171.667104] do_one_initcall+0x9c/0x220 [ 171.667106] do_init_module+0x60/0x240 [ 171.667108] load_module+0x32b5/0x3610 [ 171.667111] __do_sys_init_module+0x148/0x1a0 [ 171.667113] __x64_sys_init_module+0x1d/0x20 [ 171.667115] do_syscall_64+0x4a/0xb0 [ 171.667117] entry_SYSCALL_64_after_hwframe+0x44/0xae [ 171.667131] ------------[ cut here ]------------ [ 171.667132] WARNING: CPU: 5 PID: 13016 at lib/ref_tracker.c:30 ref_tracker_dir_exit+0x104/0x130 [ 171.667136] Modules linked in: test_ref_tracker(+) [ 171.667144] CPU: 5 PID: 13016 Comm: modprobe Tainted: G S W 5.16.0-smp-DEV #290 [ 171.667147] RIP: 0010:ref_tracker_dir_exit+0x104/0x130 [ 171.667150] Code: 01 00 00 00 00 ad de 48 89 03 4c 89 63 08 48 89 df e8 20 a0 d5 ff 4c 89 f3 4d 39 ee 75 a8 4c 89 ff 48 8b 75 d0 e8 7c 05 69 00 <0f> 0b eb 0c 4c 89 ff 48 8b 75 d0 e8 6c 05 69 00 41 8b 47 08 83 f8 [ 171.667151] RSP: 0018:ffff89058ba0bc68 EFLAGS: 00010286 [ 171.667154] RAX: 08895bff57c7d100 RBX: ffffffffc0407010 RCX: 000000000000003b [ 171.667156] RDX: 000000000000003c RSI: 0000000000000282 RDI: ffffffffc0407000 [ 171.667157] RBP: ffff89058ba0bc98 R08: 0000000000000000 R09: ffffffffa6f342e0 [ 171.667159] R10: 00000000ffff7fff R11: 0000000000000000 R12: dead000000000122 [ 171.667160] R13: ffffffffc0407010 R14: ffffffffc0407010 R15: ffffffffc0407000 [ 171.667162] FS: 00007f97ea29d740(0000) GS:ffff8923ff940000(0000) knlGS:0000000000000000 [ 171.667164] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 171.667166] CR2: 00007f97ea299000 CR3: 0000000186b4a004 CR4: 00000000001706e0 [ 171.667169] Call Trace: [ 171.667170] [ 171.667171] ? 0xffffffffc040a000 [ 171.667173] init_module+0x126/0x1000 [test_ref_tracker] [ 171.667175] do_one_initcall+0x9c/0x220 [ 171.667179] do_init_module+0x60/0x240 [ 171.667182] load_module+0x32b5/0x3610 [ 171.667186] __do_sys_init_module+0x148/0x1a0 [ 171.667189] __x64_sys_init_module+0x1d/0x20 [ 171.667192] do_syscall_64+0x4a/0xb0 [ 171.667194] ? exc_page_fault+0x6e/0x140 [ 171.667196] entry_SYSCALL_64_after_hwframe+0x44/0xae [ 171.667199] RIP: 0033:0x7f97ea3dbe7a [ 171.667200] Code: 48 8b 0d 61 8d 06 00 f7 d8 64 89 01 48 83 c8 ff c3 cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc 49 89 ca b8 af 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d 2e 8d 06 00 f7 d8 64 89 01 48 [ 171.667201] RSP: 002b:00007ffea67ce608 EFLAGS: 00000246 ORIG_RAX: 00000000000000af [ 171.667203] RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007f97ea3dbe7a [ 171.667204] RDX: 00000000013a0ba0 RSI: 0000000000002808 RDI: 00007f97ea299000 [ 171.667205] RBP: 00007ffea67ce670 R08: 0000000000000003 R09: 0000000000000000 [ 171.667206] R10: 0000000000000000 R11: 0000000000000246 R12: 00000000013a1048 [ 171.667207] R13: 00000000013a0ba0 R14: 0000000001399930 R15: 00000000013a1030 [ 171.667209] [ 171.667210] ---[ end trace f5dbd6afa41e60aa ]--- Signed-off-by: Eric Dumazet --- lib/Kconfig.debug | 10 ++++ lib/Makefile | 2 +- lib/test_ref_tracker.c | 115 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 126 insertions(+), 1 deletion(-) create mode 100644 lib/test_ref_tracker.c diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index 5c12bde10996cf97b5f075d318089b1be73f71d7..633c2c5cb45bd435a7684dbe2f2eca477c871463 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug @@ -2106,6 +2106,16 @@ config BACKTRACE_SELF_TEST Say N if you are unsure. +config TEST_REF_TRACKER + tristate "Self test for reference tracker" + depends on DEBUG_KERNEL && STACKTRACE_SUPPORT + select REF_TRACKER + help + This option provides a kernel module performing tests + using reference tracker infrastructure. + + Say N if you are unsure. + config RBTREE_TEST tristate "Red-Black tree test" depends on DEBUG_KERNEL diff --git a/lib/Makefile b/lib/Makefile index c1fd9243ddb9cc1ac5252d7eb8009f9290782c4a..b213a7bbf3fda2eb9f234fb7473b8f1b617bed6b 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -101,7 +101,7 @@ obj-$(CONFIG_TEST_LOCKUP) += test_lockup.o obj-$(CONFIG_TEST_HMM) += test_hmm.o obj-$(CONFIG_TEST_FREE_PAGES) += test_free_pages.o obj-$(CONFIG_KPROBES_SANITY_TEST) += test_kprobes.o - +obj-$(CONFIG_TEST_REF_TRACKER) += test_ref_tracker.o # # CFLAGS for compiling floating point code inside the kernel. x86/Makefile turns # off the generation of FPU/SSE* instructions for kernel proper but FPU_FLAGS diff --git a/lib/test_ref_tracker.c b/lib/test_ref_tracker.c new file mode 100644 index 0000000000000000000000000000000000000000..19d7dec70cc62f0a7b274cd5ec8bf8cec62b0af3 --- /dev/null +++ b/lib/test_ref_tracker.c @@ -0,0 +1,115 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Referrence tracker self test. + * + * Copyright (c) 2021 Eric Dumazet + */ +#include +#include +#include +#include +#include +#include + +static struct ref_tracker_dir ref_dir; +static struct ref_tracker *tracker[20]; + +#define TRT_ALLOC(X) static noinline void \ + alloctest_ref_tracker_alloc##X(struct ref_tracker_dir *dir, \ + struct ref_tracker **trackerp) \ + { \ + ref_tracker_alloc(dir, trackerp, GFP_KERNEL); \ + } + +TRT_ALLOC(1) +TRT_ALLOC(2) +TRT_ALLOC(3) +TRT_ALLOC(4) +TRT_ALLOC(5) +TRT_ALLOC(6) +TRT_ALLOC(7) +TRT_ALLOC(8) +TRT_ALLOC(9) +TRT_ALLOC(10) +TRT_ALLOC(11) +TRT_ALLOC(12) +TRT_ALLOC(13) +TRT_ALLOC(14) +TRT_ALLOC(15) +TRT_ALLOC(16) +TRT_ALLOC(17) +TRT_ALLOC(18) +TRT_ALLOC(19) + +#undef TRT_ALLOC + +static noinline void +alloctest_ref_tracker_free(struct ref_tracker_dir *dir, + struct ref_tracker **trackerp) +{ + ref_tracker_free(dir, trackerp); +} + + +static struct timer_list test_ref_tracker_timer; +static atomic_t test_ref_timer_done = ATOMIC_INIT(0); + +static void test_ref_tracker_timer_func(struct timer_list *t) +{ + ref_tracker_alloc(&ref_dir, &tracker[0], GFP_ATOMIC); + atomic_set(&test_ref_timer_done, 1); +} + +static int __init test_ref_tracker_init(void) +{ + int i; + + ref_tracker_dir_init(&ref_dir, 100); + + timer_setup(&test_ref_tracker_timer, test_ref_tracker_timer_func, 0); + mod_timer(&test_ref_tracker_timer, jiffies + 1); + + alloctest_ref_tracker_alloc1(&ref_dir, &tracker[1]); + alloctest_ref_tracker_alloc2(&ref_dir, &tracker[2]); + alloctest_ref_tracker_alloc3(&ref_dir, &tracker[3]); + alloctest_ref_tracker_alloc4(&ref_dir, &tracker[4]); + alloctest_ref_tracker_alloc5(&ref_dir, &tracker[5]); + alloctest_ref_tracker_alloc6(&ref_dir, &tracker[6]); + alloctest_ref_tracker_alloc7(&ref_dir, &tracker[7]); + alloctest_ref_tracker_alloc8(&ref_dir, &tracker[8]); + alloctest_ref_tracker_alloc9(&ref_dir, &tracker[9]); + alloctest_ref_tracker_alloc10(&ref_dir, &tracker[10]); + alloctest_ref_tracker_alloc11(&ref_dir, &tracker[11]); + alloctest_ref_tracker_alloc12(&ref_dir, &tracker[12]); + alloctest_ref_tracker_alloc13(&ref_dir, &tracker[13]); + alloctest_ref_tracker_alloc14(&ref_dir, &tracker[14]); + alloctest_ref_tracker_alloc15(&ref_dir, &tracker[15]); + alloctest_ref_tracker_alloc16(&ref_dir, &tracker[16]); + alloctest_ref_tracker_alloc17(&ref_dir, &tracker[17]); + alloctest_ref_tracker_alloc18(&ref_dir, &tracker[18]); + alloctest_ref_tracker_alloc19(&ref_dir, &tracker[19]); + + /* free all trackers but first 0 and 1. */ + for (i = 2; i < ARRAY_SIZE(tracker); i++) + alloctest_ref_tracker_free(&ref_dir, &tracker[i]); + + /* Attempt to free an already freed tracker. */ + alloctest_ref_tracker_free(&ref_dir, &tracker[2]); + + while (!atomic_read(&test_ref_timer_done)) + msleep(1); + + /* This should warn about tracker[0] & tracker[1] being not freed. */ + ref_tracker_dir_exit(&ref_dir); + + return 0; +} + +static void __exit test_ref_tracker_exit(void) +{ +} + +module_init(test_ref_tracker_init); +module_exit(test_ref_tracker_exit); + +MODULE_LICENSE("GPL v2"); From patchwork Sun Dec 5 04:21:57 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 12656911 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id DFA2BC433EF for ; Sun, 5 Dec 2021 04:22:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231410AbhLEE0D (ORCPT ); Sat, 4 Dec 2021 23:26:03 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45898 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231387AbhLEE0C (ORCPT ); Sat, 4 Dec 2021 23:26:02 -0500 Received: from mail-pj1-x102e.google.com (mail-pj1-x102e.google.com [IPv6:2607:f8b0:4864:20::102e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 184F3C061751 for ; Sat, 4 Dec 2021 20:22:36 -0800 (PST) Received: by mail-pj1-x102e.google.com with SMTP id np3so5258204pjb.4 for ; Sat, 04 Dec 2021 20:22:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=bYzAipWROA+AcebJbtrB31MReiZwS6nzh/y/yf0jbMQ=; b=P8Muk312jT45TmKvqGVvLEXUzGewSo1EHCSvN8pSZxYJBgSsB5TFTyVrLEu7IRhG/K ZON9WWLMeq4sM3fj1LpsDcyi84uQ/I6x0gHEXlTlyW88zUHl0f1gMsTaWEOYqduo4Zu2 +owul30aaIYfxbiuDleuGSiu3eVGiha30gL3cMvT2tCV81J5YBWIpFY5Uaap5Twf/bRd Ac4tmoI16lTbztV9OlwwriMKvBuDdp8s/pAb1y/Ce3tahINSs6+NdU3YLV+lSuxtxJ1U IbY2EKPvWJkgByoSj3cSvWmgGkrp+/Y6E2us6co5jE0Y/pVyCnk4rk+6ikDTFC9IUA7K UEgQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=bYzAipWROA+AcebJbtrB31MReiZwS6nzh/y/yf0jbMQ=; b=D7uU/cuBPmKGqfgSiQiqoMIR63o8STgYlXf9Svm8lTp8zuoZpnS45783OBN+7TR6jy iU0A2TdsEvHMkHnxbLOXA1rrYUhvqMme2xQyqX9fZmNstiRlcwDuYaokX6DXm3En/n1S 1IN2uIIHw0dAyI7sRnhhzskdqPxth2gJbEU8YEAeius+4d74x7CylRTkB9UzOg6v5QbF eKAmglmXrbYfvxaMbHxWSZ/3hGu3xBKIy9zEA9R+As/Pfu2eam1rmfMEuqU7ITkCL16L crnMSkgVgsJkumQFmQAvy+LUtTRttp0HzjNZAbIOsy6r9hJDPpR9jlpAPVVb50sGF/FP IP1w== X-Gm-Message-State: AOAM5333BxC5XVsKP8vh6/m3PB3ZhccjAb+wMWzR1ZqjOoBT4hQHjkYq cUS/CZY6o5D/lWDWj7otUz1uk3QzT48= X-Google-Smtp-Source: ABdhPJzoqNOIFIXWv948FUdGZ0NHAn/TUZZHkfmY08MymIIkK48LkV3f3Zn28gRlyoUFarYQsqIUBg== X-Received: by 2002:a17:902:7d8b:b0:144:e29b:4f2b with SMTP id a11-20020a1709027d8b00b00144e29b4f2bmr34210710plm.57.1638678155556; Sat, 04 Dec 2021 20:22:35 -0800 (PST) Received: from edumazet1.svl.corp.google.com ([2620:15c:2c4:201:ffa7:1c62:2d55:eac2]) by smtp.gmail.com with ESMTPSA id 17sm6027095pgw.1.2021.12.04.20.22.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 04 Dec 2021 20:22:35 -0800 (PST) From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski Cc: netdev , Eric Dumazet , Eric Dumazet , Dmitry Vyukov Subject: [PATCH v3 net-next 03/23] net: add net device refcount tracker infrastructure Date: Sat, 4 Dec 2021 20:21:57 -0800 Message-Id: <20211205042217.982127-4-eric.dumazet@gmail.com> X-Mailer: git-send-email 2.34.1.400.ga245620fadb-goog In-Reply-To: <20211205042217.982127-1-eric.dumazet@gmail.com> References: <20211205042217.982127-1-eric.dumazet@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Eric Dumazet net device are refcounted. Over the years we had numerous bugs caused by imbalanced dev_hold() and dev_put() calls. The general idea is to be able to precisely pair each decrement with a corresponding prior increment. Both share a cookie, basically a pointer to private data storing stack traces. This patch adds dev_hold_track() and dev_put_track(). To use these helpers, each data structure owning a refcount should also use a "netdevice_tracker" to pair the hold and put. netdevice_tracker dev_tracker; ... dev_hold_track(dev, &dev_tracker, GFP_ATOMIC); ... dev_put_track(dev, &dev_tracker); Whenever a leak happens, we will get precise stack traces of the point dev_hold_track() happened, at device dismantle phase. We will also get a stack trace if too many dev_put_track() for the same netdevice_tracker are attempted. This is guarded by CONFIG_NET_DEV_REFCNT_TRACKER option. Signed-off-by: Eric Dumazet --- include/linux/netdevice.h | 45 +++++++++++++++++++++++++++++++++++++++ lib/Kconfig.debug | 5 +++++ net/Kconfig.debug | 11 ++++++++++ net/core/dev.c | 3 +++ 4 files changed, 64 insertions(+) create mode 100644 net/Kconfig.debug diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 65117f01d5f2a9c9e815b6c967d5e9e4c94af0ae..143d60ed004732e4a086e66fdcf7b3d362c1dc20 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -48,6 +48,7 @@ #include #include #include +#include struct netpoll_info; struct device; @@ -300,6 +301,12 @@ enum netdev_state_t { }; +#ifdef CONFIG_NET_DEV_REFCNT_TRACKER +typedef struct ref_tracker *netdevice_tracker; +#else +typedef struct {} netdevice_tracker; +#endif + struct gro_list { struct list_head list; int count; @@ -1865,6 +1872,7 @@ enum netdev_ml_priv_type { * @proto_down_reason: reason a netdev interface is held down * @pcpu_refcnt: Number of references to this device * @dev_refcnt: Number of references to this device + * @refcnt_tracker: Tracker directory for tracked references to this device * @todo_list: Delayed register/unregister * @link_watch_list: XXX: need comments on this one * @@ -2178,6 +2186,7 @@ struct net_device { #else refcount_t dev_refcnt; #endif + struct ref_tracker_dir refcnt_tracker; struct list_head link_watch_list; @@ -3805,6 +3814,7 @@ void netdev_run_todo(void); * @dev: network device * * Release reference to device to allow it to be freed. + * Try using dev_put_track() instead. */ static inline void dev_put(struct net_device *dev) { @@ -3822,6 +3832,7 @@ static inline void dev_put(struct net_device *dev) * @dev: network device * * Hold reference to device to keep it from being freed. + * Try using dev_hold_track() instead. */ static inline void dev_hold(struct net_device *dev) { @@ -3834,6 +3845,40 @@ static inline void dev_hold(struct net_device *dev) } } +static inline void netdev_tracker_alloc(struct net_device *dev, + netdevice_tracker *tracker, gfp_t gfp) +{ +#ifdef CONFIG_NET_DEV_REFCNT_TRACKER + ref_tracker_alloc(&dev->refcnt_tracker, tracker, gfp); +#endif +} + +static inline void netdev_tracker_free(struct net_device *dev, + netdevice_tracker *tracker) +{ +#ifdef CONFIG_NET_DEV_REFCNT_TRACKER + ref_tracker_free(&dev->refcnt_tracker, tracker); +#endif +} + +static inline void dev_hold_track(struct net_device *dev, + netdevice_tracker *tracker, gfp_t gfp) +{ + if (dev) { + dev_hold(dev); + netdev_tracker_alloc(dev, tracker, gfp); + } +} + +static inline void dev_put_track(struct net_device *dev, + netdevice_tracker *tracker) +{ + if (dev) { + netdev_tracker_free(dev, tracker); + dev_put(dev); + } +} + /* Carrier loss detection, dial on demand. The functions netif_carrier_on * and _off may be called from IRQ context, but it is caller * who is responsible for serialization of these calls. diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index 633c2c5cb45bd435a7684dbe2f2eca477c871463..6504b97f8dfd786b6a7b9cdb2c2eda5aaa2c2b03 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug @@ -598,6 +598,11 @@ config DEBUG_MISC Say Y here if you need to enable miscellaneous debug code that should be under a more specific debug option but isn't. +menu "Networking Debugging" + +source "net/Kconfig.debug" + +endmenu # "Networking Debugging" menu "Memory Debugging" diff --git a/net/Kconfig.debug b/net/Kconfig.debug new file mode 100644 index 0000000000000000000000000000000000000000..ee8d67a784291fb126d95324db05183b5a78ab70 --- /dev/null +++ b/net/Kconfig.debug @@ -0,0 +1,11 @@ +# SPDX-License-Identifier: GPL-2.0-only + +config NET_DEV_REFCNT_TRACKER + bool "Enable net device refcount tracking" + depends on DEBUG_KERNEL && STACKTRACE_SUPPORT + select REF_TRACKER + default n + help + Enable debugging feature to track device references. + This adds memory and cpu costs. + diff --git a/net/core/dev.c b/net/core/dev.c index aba8acc1238c2213b9fc0c47c93568f731f375e5..1740d6cfe86b58359cceaec7ee9cc015a3843723 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -9864,6 +9864,7 @@ static void netdev_wait_allrefs(struct net_device *dev) netdev_unregister_timeout_secs * HZ)) { pr_emerg("unregister_netdevice: waiting for %s to become free. Usage count = %d\n", dev->name, refcnt); + ref_tracker_dir_print(&dev->refcnt_tracker, 10); warning_time = jiffies; } } @@ -10154,6 +10155,7 @@ struct net_device *alloc_netdev_mqs(int sizeof_priv, const char *name, dev = PTR_ALIGN(p, NETDEV_ALIGN); dev->padded = (char *)dev - (char *)p; + ref_tracker_dir_init(&dev->refcnt_tracker, 128); #ifdef CONFIG_PCPU_DEV_REFCNT dev->pcpu_refcnt = alloc_percpu(int); if (!dev->pcpu_refcnt) @@ -10270,6 +10272,7 @@ void free_netdev(struct net_device *dev) list_for_each_entry_safe(p, n, &dev->napi_list, dev_list) netif_napi_del(p); + ref_tracker_dir_exit(&dev->refcnt_tracker); #ifdef CONFIG_PCPU_DEV_REFCNT free_percpu(dev->pcpu_refcnt); dev->pcpu_refcnt = NULL; From patchwork Sun Dec 5 04:21:58 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 12656913 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id DE692C433EF for ; Sun, 5 Dec 2021 04:22:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231415AbhLEE0H (ORCPT ); Sat, 4 Dec 2021 23:26:07 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45914 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231387AbhLEE0G (ORCPT ); Sat, 4 Dec 2021 23:26:06 -0500 Received: from mail-pg1-x533.google.com (mail-pg1-x533.google.com [IPv6:2607:f8b0:4864:20::533]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3A2CDC061751 for ; Sat, 4 Dec 2021 20:22:40 -0800 (PST) Received: by mail-pg1-x533.google.com with SMTP id r5so7101836pgi.6 for ; Sat, 04 Dec 2021 20:22:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=GGeU+jp0LY5iv+WjCQyx9JP4s1aigp4ZNnokq1KrHEM=; b=iavKHjb8f3kMy315ZdZV0yngJORdxvvLumy57NmWuUzwpLyBSnQXiFhLb6JPIVdp9N 8qFk7s7uuyxNLGttgVgNTeiwj4UNwXXZJMnPLcP1VcuW+MGXES4w1C4YMa26DaPWMeVk F+vGyqC0GmFd7HNksDC75cnFdSd6/izZ6+5yyqwgppDqQUZdgacxd3QUNgih5RxGgF21 O6j+i1K2nu38dFUUimbnRGlV5BwKjmNbKryLkYAPeFAb9lH9DmuCZxtywf8nx6S9SQwt FUHZsG9Tgg1o1MPMOAdVKXDkdCSYf/0V2VbtGQ9UnFyE0FC9T7ocHESO2nkFFIQcocbr nbKA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=GGeU+jp0LY5iv+WjCQyx9JP4s1aigp4ZNnokq1KrHEM=; b=JsRIv/31kBkh5yZSoE/J7sHxp9LUPlvMyFo0c4y4HwcTq3Mpiw+kSooKTE8TMiKt6Z /aDcGY0RyzlJr48X2b2ECdx6zmYCL/Jy+OerE8ghGFTqQtH7P5BrDKc5PGo5BIMgCODV fxaJRH1tgLQ4rd/R5C77mll5TMTQ+QGqAjGBeRH0YwIryAsUbqC07kN6JVM8kRRGWX8c b7Tnqb6UMbvGyJyvQS9+HlamiW4OJ4SZAD8Xp9aAa40JKZgThH+fJP6OwZ2JuXkTRRLc k6iHgCB5/Jt/otw1vp1+p+2xWW9mvGiaCj0tsLYZzMjM3ndWvR5mPgXO0braS94/iS++ Scgg== X-Gm-Message-State: AOAM532aKFP4JxA1fSe3r4ZUhhhNnkY+XIN8wl4c2lre8NqyZSRm/pqK aszX+x2yA8PP73AAdudncnU= X-Google-Smtp-Source: ABdhPJzcmUcGPw/wQRWdOluEnSfyHjR2jmHtzxHZAcPTGaAwcM8uqSjMw9/VLOrFxVZzRwSOL1HOhA== X-Received: by 2002:a63:8041:: with SMTP id j62mr12150822pgd.517.1638678159846; Sat, 04 Dec 2021 20:22:39 -0800 (PST) Received: from edumazet1.svl.corp.google.com ([2620:15c:2c4:201:ffa7:1c62:2d55:eac2]) by smtp.gmail.com with ESMTPSA id 17sm6027095pgw.1.2021.12.04.20.22.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 04 Dec 2021 20:22:39 -0800 (PST) From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski Cc: netdev , Eric Dumazet , Eric Dumazet , Dmitry Vyukov Subject: [PATCH v3 net-next 04/23] net: add net device refcount tracker to struct netdev_rx_queue Date: Sat, 4 Dec 2021 20:21:58 -0800 Message-Id: <20211205042217.982127-5-eric.dumazet@gmail.com> X-Mailer: git-send-email 2.34.1.400.ga245620fadb-goog In-Reply-To: <20211205042217.982127-1-eric.dumazet@gmail.com> References: <20211205042217.982127-1-eric.dumazet@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Eric Dumazet This helps debugging net device refcount leaks. Signed-off-by: Eric Dumazet --- include/linux/netdevice.h | 2 ++ net/core/net-sysfs.c | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 143d60ed004732e4a086e66fdcf7b3d362c1dc20..3d691fadd56907212b8562432bb5fe0ced0fd962 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -741,6 +741,8 @@ struct netdev_rx_queue { #endif struct kobject kobj; struct net_device *dev; + netdevice_tracker dev_tracker; + #ifdef CONFIG_XDP_SOCKETS struct xsk_buff_pool *pool; #endif diff --git a/net/core/net-sysfs.c b/net/core/net-sysfs.c index affe34d71d313498d8fae4a319696250aa3aef0a..27a7ac2e516f65dbfdb2a2319e6faa27c7dd8f31 100644 --- a/net/core/net-sysfs.c +++ b/net/core/net-sysfs.c @@ -1004,7 +1004,7 @@ static void rx_queue_release(struct kobject *kobj) #endif memset(kobj, 0, sizeof(*kobj)); - dev_put(queue->dev); + dev_put_track(queue->dev, &queue->dev_tracker); } static const void *rx_queue_namespace(struct kobject *kobj) @@ -1044,7 +1044,7 @@ static int rx_queue_add_kobject(struct net_device *dev, int index) /* Kobject_put later will trigger rx_queue_release call which * decreases dev refcount: Take that reference here */ - dev_hold(queue->dev); + dev_hold_track(queue->dev, &queue->dev_tracker, GFP_KERNEL); kobj->kset = dev->queues_kset; error = kobject_init_and_add(kobj, &rx_queue_ktype, NULL, From patchwork Sun Dec 5 04:21:59 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 12656915 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3BA9BC433F5 for ; Sun, 5 Dec 2021 04:22:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231425AbhLEE0K (ORCPT ); Sat, 4 Dec 2021 23:26:10 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45928 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231424AbhLEE0K (ORCPT ); Sat, 4 Dec 2021 23:26:10 -0500 Received: from mail-pj1-x102f.google.com (mail-pj1-x102f.google.com [IPv6:2607:f8b0:4864:20::102f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BAEDBC061751 for ; Sat, 4 Dec 2021 20:22:43 -0800 (PST) Received: by mail-pj1-x102f.google.com with SMTP id p18-20020a17090ad31200b001a78bb52876so8229196pju.3 for ; Sat, 04 Dec 2021 20:22:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=+45D+NR04lSsJ9/LKIhtU5WULWdUBQCD1Ai2qKN+DHw=; b=b3P8M2TEKHCduglLOFu7wQ0WBCm4ja/hIogVysH31gtpH+23fuyNG9eVsZOSGwILGM L+nkdl+X40cI2+pQyXhTRRe1PubADaXBwnP6sUREi23kiHqrxY96uXx4DpHh+17VEYsC H81fkYaNvvtiMDSbz8VyqeEzRhKAzwfhNsTNUTnp2bnWmonvQ+RSKDSQnWQ0Qq9kgHYp 6pcz9c0dAW9fpw5tJ4mKFfs4/+ZZesjMI+/VgtQf8zLpPD0fbTMiSPC/LFp3QmKUxiJz /rXeFT0jj53gamOx15+9aPs0jgcR2+/DeMWG0YuYtflGF/ZUlXoYJrk0s8gTAdJem9bM +HSQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=+45D+NR04lSsJ9/LKIhtU5WULWdUBQCD1Ai2qKN+DHw=; b=vVgRkBiHVoi0VfxJ2E0wDERoIJaB4aYp2Wk4EpQY1qtfiYC6S8IVIqc/2/VBHksupi 8066dHoRPPNzVB1fy5ySU8h5CsZ7oqWKRzrI2eFXHwEbTH8pG8J1C3jq2LbTE2Was78J OFOY3VS1MU7UnGqmkkAcm0ZPjEyHQajqrFuT6HBS+BSg47h+S77/0yXpJ4OLJkWCR7vJ /r230TA6xqF5Z96YROjsoXuveDM0IkaK6qbsDXmeenNYtFTzJySlfseE1q7cyf96VfsN 9FMKZnndDjtwk0PqlBgn1vmlg3meIDHSsV31aPTn0jvK02mI4zrhsdbMZTYRj9T/Bzhm 1W4g== X-Gm-Message-State: AOAM533cW2DlEILfIriZeegZ/p50c7DljhqO2LPUWFm/jRz8DEXdcOkb o6Y3HChXe9guRp6LJ+lUn9Y= X-Google-Smtp-Source: ABdhPJyQBP+TZriux8QJziHGCGVzeoZStcv9ggrw7Cq7woCyHDd3s0o49F2rMcD/xcgv9STfqLm9WA== X-Received: by 2002:a17:903:24d:b0:143:beb5:b6b1 with SMTP id j13-20020a170903024d00b00143beb5b6b1mr34551166plh.54.1638678163297; Sat, 04 Dec 2021 20:22:43 -0800 (PST) Received: from edumazet1.svl.corp.google.com ([2620:15c:2c4:201:ffa7:1c62:2d55:eac2]) by smtp.gmail.com with ESMTPSA id 17sm6027095pgw.1.2021.12.04.20.22.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 04 Dec 2021 20:22:42 -0800 (PST) From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski Cc: netdev , Eric Dumazet , Eric Dumazet , Dmitry Vyukov Subject: [PATCH v3 net-next 05/23] net: add net device refcount tracker to struct netdev_queue Date: Sat, 4 Dec 2021 20:21:59 -0800 Message-Id: <20211205042217.982127-6-eric.dumazet@gmail.com> X-Mailer: git-send-email 2.34.1.400.ga245620fadb-goog In-Reply-To: <20211205042217.982127-1-eric.dumazet@gmail.com> References: <20211205042217.982127-1-eric.dumazet@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Eric Dumazet This will help debugging pesky netdev reference leaks. Signed-off-by: Eric Dumazet --- include/linux/netdevice.h | 2 ++ net/core/net-sysfs.c | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 3d691fadd56907212b8562432bb5fe0ced0fd962..b4f704337f657ebc46e02c9e5e7f5d2c2c64685e 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -586,6 +586,8 @@ struct netdev_queue { * read-mostly part */ struct net_device *dev; + netdevice_tracker dev_tracker; + struct Qdisc __rcu *qdisc; struct Qdisc *qdisc_sleeping; #ifdef CONFIG_SYSFS diff --git a/net/core/net-sysfs.c b/net/core/net-sysfs.c index 27a7ac2e516f65dbfdb2a2319e6faa27c7dd8f31..3b2cdbbdc858e06fb0a482a9b7fc778e501ba1e0 100644 --- a/net/core/net-sysfs.c +++ b/net/core/net-sysfs.c @@ -1607,7 +1607,7 @@ static void netdev_queue_release(struct kobject *kobj) struct netdev_queue *queue = to_netdev_queue(kobj); memset(kobj, 0, sizeof(*kobj)); - dev_put(queue->dev); + dev_put_track(queue->dev, &queue->dev_tracker); } static const void *netdev_queue_namespace(struct kobject *kobj) @@ -1647,7 +1647,7 @@ static int netdev_queue_add_kobject(struct net_device *dev, int index) /* Kobject_put later will trigger netdev_queue_release call * which decreases dev refcount: Take that reference here */ - dev_hold(queue->dev); + dev_hold_track(queue->dev, &queue->dev_tracker, GFP_KERNEL); kobj->kset = dev->queues_kset; error = kobject_init_and_add(kobj, &netdev_queue_ktype, NULL, From patchwork Sun Dec 5 04:22:00 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 12656917 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id C70A4C433F5 for ; Sun, 5 Dec 2021 04:22:52 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231428AbhLEE0R (ORCPT ); Sat, 4 Dec 2021 23:26:17 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45948 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231439AbhLEE0O (ORCPT ); Sat, 4 Dec 2021 23:26:14 -0500 Received: from mail-pj1-x1034.google.com (mail-pj1-x1034.google.com [IPv6:2607:f8b0:4864:20::1034]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2CB52C0613F8 for ; Sat, 4 Dec 2021 20:22:48 -0800 (PST) Received: by mail-pj1-x1034.google.com with SMTP id v23so5255373pjr.5 for ; Sat, 04 Dec 2021 20:22:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=eOkbTqC70cMxk+SiiC//4vDcMoRtO5s+8GF7iQiCxQY=; b=RUtP0sLMbS1UjWyurpex245tw7JbuX4AFjJ/GVIvY+/8p3Ou0qOnF5PZN34RJ5wxI8 5SZS4JXWaCVQBpy3df5Xz89RZpfk2P2mXBJ6T13Ch3DLWdTWR+03CietrbR0a3R+I00L 85AC0VGC5zPLXsQmheqtAr7fA9rSEHxv6nbBJa6KHLqWRXi+T6WNQacbbwSqaKJo1GF/ AjjwRxaU/3BUBp6UhBGVqcn2d3NIF7u85LgIMjelXqyPW6Sd+WaC8MXl9n6WYy46sfAM pY4TOMjzE/MAvTuL5tNBKKOSu0+d+hXqG/4tTNSaBLJm+2AamgWxaeLGp/cETPf0Gj9H AhVA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=eOkbTqC70cMxk+SiiC//4vDcMoRtO5s+8GF7iQiCxQY=; b=cvB2ZXhOOkPzFIuYh+Mda4hJPt2Pt5G/kK8CmKBMCFWubB2P4C/KJc64knUtTfQ80F LHYLUlMtU5lh1lG5xsYfACH+abpwc6nbE3AUPCNHkhohCYgMB8t3eJ3aYyrxkJTCMLY3 lHxy4LItb/GmRn+qj/o/IYGcg9+T6n4TwE4nrhDrgZucU8u1OKEo0y10Cd9MHAUyL6G8 CsE4mXfxdPDBxqjujdAAvSsDJvX9Jxz8bQtCeBGI+XOwnxiTHL6jjYURO8itWGcQkhaP XFkYk3LGIyUTtb1gpZK5lUy1z0mD0zNtKXqni/yzU3K8Zse4VJ2w6fqXNx5Jv+cPKoJ9 wECw== X-Gm-Message-State: AOAM531Z6CPZ30v5T5+lxjtZDkmVFYYgKmxjtTnK1NWTCUESDKL7Ktgl Bf9qCMClZ+2D70SHJSta7KY= X-Google-Smtp-Source: ABdhPJytoj9PrQmQ62Zy2AIDRss5TNegknqL/d8kI1AAmjqK2ccPh9s35eIHbt8i/HhUwazQBfbR2g== X-Received: by 2002:a17:902:8e87:b0:143:759c:6a2d with SMTP id bg7-20020a1709028e8700b00143759c6a2dmr33715022plb.59.1638678167738; Sat, 04 Dec 2021 20:22:47 -0800 (PST) Received: from edumazet1.svl.corp.google.com ([2620:15c:2c4:201:ffa7:1c62:2d55:eac2]) by smtp.gmail.com with ESMTPSA id 17sm6027095pgw.1.2021.12.04.20.22.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 04 Dec 2021 20:22:47 -0800 (PST) From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski Cc: netdev , Eric Dumazet , Eric Dumazet , Dmitry Vyukov Subject: [PATCH v3 net-next 06/23] net: add net device refcount tracker to ethtool_phys_id() Date: Sat, 4 Dec 2021 20:22:00 -0800 Message-Id: <20211205042217.982127-7-eric.dumazet@gmail.com> X-Mailer: git-send-email 2.34.1.400.ga245620fadb-goog In-Reply-To: <20211205042217.982127-1-eric.dumazet@gmail.com> References: <20211205042217.982127-1-eric.dumazet@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Eric Dumazet This helper might hold a netdev reference for a long time, lets add reference tracking. Signed-off-by: Eric Dumazet --- net/ethtool/ioctl.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/net/ethtool/ioctl.c b/net/ethtool/ioctl.c index fa8aa5ec19ba1cfff611a159c5b8bcd02f74c5ca..9a113d89352123acf56ec598c191bb75985c6be5 100644 --- a/net/ethtool/ioctl.c +++ b/net/ethtool/ioctl.c @@ -1989,6 +1989,7 @@ static int ethtool_phys_id(struct net_device *dev, void __user *useraddr) struct ethtool_value id; static bool busy; const struct ethtool_ops *ops = dev->ethtool_ops; + netdevice_tracker dev_tracker; int rc; if (!ops->set_phys_id) @@ -2008,7 +2009,7 @@ static int ethtool_phys_id(struct net_device *dev, void __user *useraddr) * removal of the device. */ busy = true; - dev_hold(dev); + dev_hold_track(dev, &dev_tracker, GFP_KERNEL); rtnl_unlock(); if (rc == 0) { @@ -2032,7 +2033,7 @@ static int ethtool_phys_id(struct net_device *dev, void __user *useraddr) } rtnl_lock(); - dev_put(dev); + dev_put_track(dev, &dev_tracker); busy = false; (void) ops->set_phys_id(dev, ETHTOOL_ID_INACTIVE); From patchwork Sun Dec 5 04:22:01 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 12656919 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5679AC433F5 for ; Sun, 5 Dec 2021 04:22:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231447AbhLEE0U (ORCPT ); Sat, 4 Dec 2021 23:26:20 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45970 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231439AbhLEE0T (ORCPT ); Sat, 4 Dec 2021 23:26:19 -0500 Received: from mail-pg1-x534.google.com (mail-pg1-x534.google.com [IPv6:2607:f8b0:4864:20::534]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 40090C061751 for ; Sat, 4 Dec 2021 20:22:53 -0800 (PST) Received: by mail-pg1-x534.google.com with SMTP id m15so7090100pgu.11 for ; Sat, 04 Dec 2021 20:22:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=iCVrtbrupO2p3CSbIlgpBTs9TIXh0ks/7pAWJkZoW3E=; b=PWuT52dDo7AhMh1ukX0XxpAHSCFCSxkWmteNGUnZlf3ZURi1I/k6ft83vAoFbqLChI sG5yTtTM7LFo6TQvkkTCv/vdZBAublm6cHVAHFztGqzD4bMdzy179fa9e/DwtHmRZGIW shXaY8DN7UH8yimCYw+hkzsoUFYGcgyEw5ZWunN/K7hh5cpfObIFawzGf/YwAC5485jv Qkb0hV8xPlKa2NisOOohKF1rA4m+hVtZS8maa4aWnzvvtC0FxSJgZPbn6IDT29jv4V23 c1X0PLjBW7gSlTy9YJOmfi2kavYYs8NIesgNI7OkuJolaG5aT+mDVTYFesc3VZwA9sp1 3iLg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=iCVrtbrupO2p3CSbIlgpBTs9TIXh0ks/7pAWJkZoW3E=; b=b+LGy0IfRZVzQxdTqDiFGX/M70M65mVrmkqFQ3mudKcyfFBczTvrG90dyomXD2+txX lB6kbMxhawge1E0sPj/wbvvCz9vI7b+ScaofR43ki3gJoNQYxlHhNGPoEgmbuosuz5Kv U42h6721BXHtNWo6IH80pYIbecHAUsBusJ9afC0weHTZz2Au2gdvOhb11cvbUKHtHTGd 8CFyJ6p61x3w3e3W2NZ3mjieAvtb8+qqChF9EI06yo5/iEldkE3fjA3ysVvfWOPe8li7 umDyVmSqWjcxvMFjTIvLxdYgjthkE2C7VSFF8/ZH52IY8YZ7pJO95Kpf2CIl43TKUH/G oBQA== X-Gm-Message-State: AOAM531ab5TvbSZy5ztcf9HW60/7dXIOQbB2aGp+ocinzRXZOp3MF37E lsTHz5QNEqf4/p3uTCceXP8= X-Google-Smtp-Source: ABdhPJyL1/E5g89wtD/bqXfalmNLPQwtmOiA/Dhtg+QNxTs/fmu/t40HEuFBo3oQw/IjL4CI+/fD1w== X-Received: by 2002:aa7:9d1e:0:b0:494:6dec:6425 with SMTP id k30-20020aa79d1e000000b004946dec6425mr28813778pfp.83.1638678172840; Sat, 04 Dec 2021 20:22:52 -0800 (PST) Received: from edumazet1.svl.corp.google.com ([2620:15c:2c4:201:ffa7:1c62:2d55:eac2]) by smtp.gmail.com with ESMTPSA id 17sm6027095pgw.1.2021.12.04.20.22.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 04 Dec 2021 20:22:52 -0800 (PST) From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski Cc: netdev , Eric Dumazet , Eric Dumazet , Dmitry Vyukov Subject: [PATCH v3 net-next 07/23] net: add net device refcount tracker to dev_ifsioc() Date: Sat, 4 Dec 2021 20:22:01 -0800 Message-Id: <20211205042217.982127-8-eric.dumazet@gmail.com> X-Mailer: git-send-email 2.34.1.400.ga245620fadb-goog In-Reply-To: <20211205042217.982127-1-eric.dumazet@gmail.com> References: <20211205042217.982127-1-eric.dumazet@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Eric Dumazet Signed-off-by: Eric Dumazet --- net/core/dev_ioctl.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/net/core/dev_ioctl.c b/net/core/dev_ioctl.c index cbab5fec64b12df9355b154bdcaa0f48701966e8..1d309a6669325ad26c59892c4e78ca14dec017d9 100644 --- a/net/core/dev_ioctl.c +++ b/net/core/dev_ioctl.c @@ -313,6 +313,7 @@ static int dev_ifsioc(struct net *net, struct ifreq *ifr, void __user *data, int err; struct net_device *dev = __dev_get_by_name(net, ifr->ifr_name); const struct net_device_ops *ops; + netdevice_tracker dev_tracker; if (!dev) return -ENODEV; @@ -381,10 +382,10 @@ static int dev_ifsioc(struct net *net, struct ifreq *ifr, void __user *data, return -ENODEV; if (!netif_is_bridge_master(dev)) return -EOPNOTSUPP; - dev_hold(dev); + dev_hold_track(dev, &dev_tracker, GFP_KERNEL); rtnl_unlock(); err = br_ioctl_call(net, netdev_priv(dev), cmd, ifr, NULL); - dev_put(dev); + dev_put_track(dev, &dev_tracker); rtnl_lock(); return err; From patchwork Sun Dec 5 04:22:02 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 12656921 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 75644C433F5 for ; Sun, 5 Dec 2021 04:23:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231451AbhLEE0a (ORCPT ); Sat, 4 Dec 2021 23:26:30 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46002 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231426AbhLEE01 (ORCPT ); Sat, 4 Dec 2021 23:26:27 -0500 Received: from mail-pl1-x635.google.com (mail-pl1-x635.google.com [IPv6:2607:f8b0:4864:20::635]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 22995C061751 for ; Sat, 4 Dec 2021 20:23:01 -0800 (PST) Received: by mail-pl1-x635.google.com with SMTP id u17so4836305plg.9 for ; Sat, 04 Dec 2021 20:23:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=OWkHOXx8BHIA++SSrqZPcWFF38smQw8WE4tSbefbPTs=; b=LQdjkRT5Dt0mkis9aYIq2W1mfdhZC3OUzuGFrNHpd83rXKc1ILJ/Pj8gX7ddsumXS6 3G87z9x5/nSu8kaqoPGEhLOcC9D2h9/LWN0m2k2lpcKH11xrsxIn5+SsZWTiiRXLg7i4 tSkpVi/uLwKB8oIB6L4/4jtyXjo5jDr89rolVhaiKvciVzcPOadCQKnSyG8bAvh1q+xF +IoKivPd9qsJiiiiB2Px6eMiqBJbGOywaL1X3WpomhiWVgGNp0cv/r0Q/8fNftennLg1 XqwfZZwoiv/EXyRzeKqXaQNwaBd3Du3QxTBHoN3dSrCkwEabNNuBe3mvDcWwSwPYsaPG tWUg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=OWkHOXx8BHIA++SSrqZPcWFF38smQw8WE4tSbefbPTs=; b=oXKJMM9DJlPPQG2kFOw8Lr98WIlecf1LmoaWo+BLHLep/0gwk5pLze9AggOxWdnq9R XySFC/yXcXDf26SxkB+GO4KThEbjEYL9REk2kOUYofHZwzjixcSTImxlU/5KvJZYaPmv iuw1YO1cQES71shLo+AJa8vxvpNptcv7Xyj6RMosR+bUcTvNqiNCdpFoadffBdj0WNVO 2vfhJqa9M7AZnWcy6AujD+9WhP6R57Wm3xHwkAOZySb1Lb7qkh62Cnz6SOBKY9TCDjfZ J+4+JZc1qashem+GYNArNo8YvQhDbKRz3YEb3j+ehppmlW56XZnxGpyTvGiYD9b1jNwC 3PEA== X-Gm-Message-State: AOAM530w2S9Sl8hjjue9IiANTCBmlaFxlA6SfxdhJMFZPjYvqmI2JTyd la3T0OEhMsGi9OoPoGoHxBQ= X-Google-Smtp-Source: ABdhPJwHQCNWAEZ8ysjZQDdLQqELjf+jyERYWIqe3J+S9xftoSROib4zltEuOATEmO81UJgllaVoqw== X-Received: by 2002:a17:90b:4c8d:: with SMTP id my13mr27491166pjb.107.1638678180701; Sat, 04 Dec 2021 20:23:00 -0800 (PST) Received: from edumazet1.svl.corp.google.com ([2620:15c:2c4:201:ffa7:1c62:2d55:eac2]) by smtp.gmail.com with ESMTPSA id 17sm6027095pgw.1.2021.12.04.20.23.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 04 Dec 2021 20:23:00 -0800 (PST) From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski Cc: netdev , Eric Dumazet , Eric Dumazet , Dmitry Vyukov Subject: [PATCH v3 net-next 08/23] drop_monitor: add net device refcount tracker Date: Sat, 4 Dec 2021 20:22:02 -0800 Message-Id: <20211205042217.982127-9-eric.dumazet@gmail.com> X-Mailer: git-send-email 2.34.1.400.ga245620fadb-goog In-Reply-To: <20211205042217.982127-1-eric.dumazet@gmail.com> References: <20211205042217.982127-1-eric.dumazet@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Eric Dumazet We want to track all dev_hold()/dev_put() to ease leak hunting. Signed-off-by: Eric Dumazet --- include/net/devlink.h | 4 ++++ net/core/drop_monitor.c | 6 +++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/include/net/devlink.h b/include/net/devlink.h index 043fcec8b0aadf041aba35b8339c93ac9336b551..3276a29f2b814cda1fdce80f52c126c1cd444272 100644 --- a/include/net/devlink.h +++ b/include/net/devlink.h @@ -664,13 +664,17 @@ struct devlink_health_reporter_ops { * @trap_name: Trap name. * @trap_group_name: Trap group name. * @input_dev: Input netdevice. + * @dev_tracker: refcount tracker for @input_dev. * @fa_cookie: Flow action user cookie. * @trap_type: Trap type. */ struct devlink_trap_metadata { const char *trap_name; const char *trap_group_name; + struct net_device *input_dev; + netdevice_tracker dev_tracker; + const struct flow_action_cookie *fa_cookie; enum devlink_trap_type trap_type; }; diff --git a/net/core/drop_monitor.c b/net/core/drop_monitor.c index 49442cae6f69d5e9d93d00b53ab8f5a0563c1d37..3d0ab2eec91667bdfac93878a046fc727fc22b99 100644 --- a/net/core/drop_monitor.c +++ b/net/core/drop_monitor.c @@ -850,7 +850,7 @@ net_dm_hw_metadata_copy(const struct devlink_trap_metadata *metadata) } hw_metadata->input_dev = metadata->input_dev; - dev_hold(hw_metadata->input_dev); + dev_hold_track(hw_metadata->input_dev, &hw_metadata->dev_tracker, GFP_ATOMIC); return hw_metadata; @@ -864,9 +864,9 @@ net_dm_hw_metadata_copy(const struct devlink_trap_metadata *metadata) } static void -net_dm_hw_metadata_free(const struct devlink_trap_metadata *hw_metadata) +net_dm_hw_metadata_free(struct devlink_trap_metadata *hw_metadata) { - dev_put(hw_metadata->input_dev); + dev_put_track(hw_metadata->input_dev, &hw_metadata->dev_tracker); kfree(hw_metadata->fa_cookie); kfree(hw_metadata->trap_name); kfree(hw_metadata->trap_group_name); From patchwork Sun Dec 5 04:22:03 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 12656923 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2A0E5C433F5 for ; Sun, 5 Dec 2021 04:23:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231426AbhLEE0i (ORCPT ); Sat, 4 Dec 2021 23:26:38 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46024 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231443AbhLEE0e (ORCPT ); Sat, 4 Dec 2021 23:26:34 -0500 Received: from mail-pj1-x102a.google.com (mail-pj1-x102a.google.com [IPv6:2607:f8b0:4864:20::102a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B8BBAC061751 for ; Sat, 4 Dec 2021 20:23:07 -0800 (PST) Received: by mail-pj1-x102a.google.com with SMTP id x7so5299160pjn.0 for ; Sat, 04 Dec 2021 20:23:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=pU7livOUOYnFM3wFrj8hRk22T/NHOfWYupw4Rj/u0W4=; b=HaXVSfUIaH2wBftzMFIC/HY/N1YurhXiUBhdbrdLZI9yqiPiKbphfkMPT8tHrxLYql dbGSbWdBuFsSUqu7uCGl/U5yQIPrU25a+WfSMsoIxD3NfPRTUHHhtIfDJEnsoO/RzPFx m6E3nMRvhUZ5I26M4A/dXudxvlPFZQmzjpi1xHGQbKSuLBR/LY0bFlL2x+J/R63305m+ R4ClbvcdhaKmh9iGMxLZa5ClH1Ai40+6ecvsjKO//0SyHi3dI5R+cutWROpQVV8S0+zI 6MeOL+oQOaJdVv2XayTdjKau0ZK6qVH62YIwfekc+dpYQ8P6xDsIOyhCsR8dX0+AozcL F06A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=pU7livOUOYnFM3wFrj8hRk22T/NHOfWYupw4Rj/u0W4=; b=qsuR4WZL3NY7Q7tW1qojbwdVW4k3kUMNmJwu11bIvGJSKGFPqsVQGBDVkJJ4yJY7zv iaOlmaa5dD+kBW9zuCyZENwNXkG/Vgc2YguPQoZf073PF2owEIX8BL0vjCJRv35kp40G CBXsaKpltuLQgjUH2yZ07WrCsiUMcwWBCiqNBjgWlEZhWGmkVAD65L76UlhMYX/9qRGN 8GjFNNrcUMjOsu7/m2mXH1UlMNJHDAQ2TzB9jMHUL4blGY5tS7NZf7uivGzwRkHYOIa6 HOU7jYHkc739LDWHpZMIeC4tC9uykv3c8ytP2cFR8J+T92Y0HoRjnlP6RJnyC+2CFdeB QFNQ== X-Gm-Message-State: AOAM531ahGjLQa8BT/pFglSs3G5M4o+yuC1y+O4tjnmUbPDB6GlTGS6C 0zjRqE9Gxj1AQ50qGdpDvsk= X-Google-Smtp-Source: ABdhPJzHRkvrIUGnijuhCkAcZlufdzcreh50HwdnB8gNqBal18jGXnmHN6Y8EZKVFVZxkDqoz3dEJQ== X-Received: by 2002:a17:902:b712:b0:143:72b7:4096 with SMTP id d18-20020a170902b71200b0014372b74096mr34382100pls.25.1638678187275; Sat, 04 Dec 2021 20:23:07 -0800 (PST) Received: from edumazet1.svl.corp.google.com ([2620:15c:2c4:201:ffa7:1c62:2d55:eac2]) by smtp.gmail.com with ESMTPSA id 17sm6027095pgw.1.2021.12.04.20.23.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 04 Dec 2021 20:23:07 -0800 (PST) From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski Cc: netdev , Eric Dumazet , Eric Dumazet , Dmitry Vyukov Subject: [PATCH v3 net-next 09/23] net: dst: add net device refcount tracking to dst_entry Date: Sat, 4 Dec 2021 20:22:03 -0800 Message-Id: <20211205042217.982127-10-eric.dumazet@gmail.com> X-Mailer: git-send-email 2.34.1.400.ga245620fadb-goog In-Reply-To: <20211205042217.982127-1-eric.dumazet@gmail.com> References: <20211205042217.982127-1-eric.dumazet@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Eric Dumazet We want to track all dev_hold()/dev_put() to ease leak hunting. Signed-off-by: Eric Dumazet --- include/linux/netdevice.h | 17 +++++++++++++++++ include/net/dst.h | 1 + net/core/dst.c | 8 ++++---- net/ipv4/route.c | 7 ++++--- net/ipv6/route.c | 5 +++-- 5 files changed, 29 insertions(+), 9 deletions(-) diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index b4f704337f657ebc46e02c9e5e7f5d2c2c64685e..afed3b10491b92da880a8cd13181ff041cc54673 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -3883,6 +3883,23 @@ static inline void dev_put_track(struct net_device *dev, } } +static inline void dev_replace_track(struct net_device *odev, + struct net_device *ndev, + netdevice_tracker *tracker, + gfp_t gfp) +{ +#ifdef CONFIG_NET_DEV_REFCNT_TRACKER + if (odev) + ref_tracker_free(&odev->refcnt_tracker, tracker); +#endif + dev_hold(ndev); + dev_put(odev); +#ifdef CONFIG_NET_DEV_REFCNT_TRACKER + if (ndev) + ref_tracker_alloc(&ndev->refcnt_tracker, tracker, gfp); +#endif +} + /* Carrier loss detection, dial on demand. The functions netif_carrier_on * and _off may be called from IRQ context, but it is caller * who is responsible for serialization of these calls. diff --git a/include/net/dst.h b/include/net/dst.h index a057319aabefac52075edb038358439ceec23a60..6aa252c3fc55ccaee58faebf265510469e91d780 100644 --- a/include/net/dst.h +++ b/include/net/dst.h @@ -77,6 +77,7 @@ struct dst_entry { #ifndef CONFIG_64BIT atomic_t __refcnt; /* 32-bit offset 64 */ #endif + netdevice_tracker dev_tracker; }; struct dst_metrics { diff --git a/net/core/dst.c b/net/core/dst.c index 497ef9b3fc6abb5fd9c74e5730c3aedc3277f850..d16c2c9bfebd3dadd4c8dbc4f14836574bb52bbe 100644 --- a/net/core/dst.c +++ b/net/core/dst.c @@ -49,7 +49,7 @@ void dst_init(struct dst_entry *dst, struct dst_ops *ops, unsigned short flags) { dst->dev = dev; - dev_hold(dev); + dev_hold_track(dev, &dst->dev_tracker, GFP_ATOMIC); dst->ops = ops; dst_init_metrics(dst, dst_default_metrics.metrics, true); dst->expires = 0UL; @@ -117,7 +117,7 @@ struct dst_entry *dst_destroy(struct dst_entry * dst) if (dst->ops->destroy) dst->ops->destroy(dst); - dev_put(dst->dev); + dev_put_track(dst->dev, &dst->dev_tracker); lwtstate_put(dst->lwtstate); @@ -159,8 +159,8 @@ void dst_dev_put(struct dst_entry *dst) dst->input = dst_discard; dst->output = dst_discard_out; dst->dev = blackhole_netdev; - dev_hold(dst->dev); - dev_put(dev); + dev_replace_track(dev, blackhole_netdev, &dst->dev_tracker, + GFP_ATOMIC); } EXPORT_SYMBOL(dst_dev_put); diff --git a/net/ipv4/route.c b/net/ipv4/route.c index 243a0c52be42b60226a38dce980956b33e583d80..843a7a3699feeb24f3b9af5efaff87724214cbce 100644 --- a/net/ipv4/route.c +++ b/net/ipv4/route.c @@ -1531,8 +1531,9 @@ void rt_flush_dev(struct net_device *dev) if (rt->dst.dev != dev) continue; rt->dst.dev = blackhole_netdev; - dev_hold(rt->dst.dev); - dev_put(dev); + dev_replace_track(dev, blackhole_netdev, + &rt->dst.dev_tracker, + GFP_ATOMIC); } spin_unlock_bh(&ul->lock); } @@ -2819,7 +2820,7 @@ struct dst_entry *ipv4_blackhole_route(struct net *net, struct dst_entry *dst_or new->output = dst_discard_out; new->dev = net->loopback_dev; - dev_hold(new->dev); + dev_hold_track(new->dev, &new->dev_tracker, GFP_ATOMIC); rt->rt_is_input = ort->rt_is_input; rt->rt_iif = ort->rt_iif; diff --git a/net/ipv6/route.c b/net/ipv6/route.c index f0d29fcb20945b5a48097c89dc57daedeed9d177..ba4dc94d76d63c98ff49c41b712231f81eb8af40 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c @@ -182,8 +182,9 @@ static void rt6_uncached_list_flush_dev(struct net *net, struct net_device *dev) if (rt_dev == dev) { rt->dst.dev = blackhole_netdev; - dev_hold(rt->dst.dev); - dev_put(rt_dev); + dev_replace_track(rt_dev, blackhole_netdev, + &rt->dst.dev_tracker, + GFP_ATOMIC); } } spin_unlock_bh(&ul->lock); From patchwork Sun Dec 5 04:22:04 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 12656925 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 32AD3C433EF for ; Sun, 5 Dec 2021 04:23:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231234AbhLEE0l (ORCPT ); Sat, 4 Dec 2021 23:26:41 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46050 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231206AbhLEE0l (ORCPT ); Sat, 4 Dec 2021 23:26:41 -0500 Received: from mail-pj1-x1036.google.com (mail-pj1-x1036.google.com [IPv6:2607:f8b0:4864:20::1036]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E23B6C061751 for ; Sat, 4 Dec 2021 20:23:14 -0800 (PST) Received: by mail-pj1-x1036.google.com with SMTP id np6-20020a17090b4c4600b001a90b011e06so5694380pjb.5 for ; Sat, 04 Dec 2021 20:23:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=SqS8l1rp8xDuoheLvvuPOhg+iERtHrbdIDpDHRwHj/U=; b=f49k55VpBuP4tApjIDMq2zpCGadCwlFgYc/TCMBnPotg5TA9lHs+JSU6/Gx7DBmnwr JfupV7YxDGt4C9GrmkyLzkkYB0IKvXI6d3gH2TIZtutU//9YkcW39IUD0kGrCARfHEfo EApUsLihgpxFp2M9cJ8IxClOYW1+K5j6zTIXW6QlQgKGmXEItEJsXoMjbop/fg/AeF4x EY1DgVogOCWbZNEbrmfl6+EdWobsjo6VfPpQPYWOpgWdOGG2XlBzK4wxo/u2kvg4m/kp 9jqHgddO6DzBZT2cdtPbc91EBT37B+A9htmGVjFfio3qbEXqsfo0rMwGpWP95QcnZ+YG /wLg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=SqS8l1rp8xDuoheLvvuPOhg+iERtHrbdIDpDHRwHj/U=; b=Z7h+QEF9z7zJZuy9hwhUmGIr4tQ6qZSOclhAFx0Tc78iLLWcoLp+mAP0Ge/vkwYtJc YgzotcOv1GYQHy247TtJ3gpT+DWUOnYMz6q1OpRdJq/TKti8Tm3nULi6hybrJBS5olHO Cc+lPQpFj9q0ux7glWkXpAsvsCBLxmt7JKlXb4FugDA1qsqDqw09FGvAGFagylXOMX3X ckKYD+Aw90POybXC3eGCNJxMBdJVpPTOAvLraj86G2vJzo/79vaMEoRuStecuJHR70d6 NzTtxlBcoOeqGyOTzB6oZMUbphtJ/2ZkDB3MkIHoOHleEJwgE7gmxLsg1stuPV2Kd5Dv 1eAA== X-Gm-Message-State: AOAM532trT7Jtz/zAm1vUzTof98ff6+NlDMMmE/aIJ7KdH4yIzNxhak7 1LyLSSx1PptcScRMtwkUzPo= X-Google-Smtp-Source: ABdhPJxzb1a+maOKzOjMzMu5G+9TJpG8VKv7iVzokrn3nlOp3YB8A+MdrpT0Gf6NHbcdCvfGTuxFtw== X-Received: by 2002:a17:90b:1b4a:: with SMTP id nv10mr27004433pjb.118.1638678194536; Sat, 04 Dec 2021 20:23:14 -0800 (PST) Received: from edumazet1.svl.corp.google.com ([2620:15c:2c4:201:ffa7:1c62:2d55:eac2]) by smtp.gmail.com with ESMTPSA id 17sm6027095pgw.1.2021.12.04.20.23.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 04 Dec 2021 20:23:14 -0800 (PST) From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski Cc: netdev , Eric Dumazet , Eric Dumazet , Dmitry Vyukov Subject: [PATCH v3 net-next 10/23] ipv6: add net device refcount tracker to rt6_probe_deferred() Date: Sat, 4 Dec 2021 20:22:04 -0800 Message-Id: <20211205042217.982127-11-eric.dumazet@gmail.com> X-Mailer: git-send-email 2.34.1.400.ga245620fadb-goog In-Reply-To: <20211205042217.982127-1-eric.dumazet@gmail.com> References: <20211205042217.982127-1-eric.dumazet@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Eric Dumazet Signed-off-by: Eric Dumazet --- net/ipv6/route.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/net/ipv6/route.c b/net/ipv6/route.c index ba4dc94d76d63c98ff49c41b712231f81eb8af40..8d834f901b483edf75c493620d38f979a4bcbf69 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c @@ -593,6 +593,7 @@ struct __rt6_probe_work { struct work_struct work; struct in6_addr target; struct net_device *dev; + netdevice_tracker dev_tracker; }; static void rt6_probe_deferred(struct work_struct *w) @@ -603,7 +604,7 @@ static void rt6_probe_deferred(struct work_struct *w) addrconf_addr_solict_mult(&work->target, &mcaddr); ndisc_send_ns(work->dev, &work->target, &mcaddr, NULL, 0); - dev_put(work->dev); + dev_put_track(work->dev, &work->dev_tracker); kfree(work); } @@ -657,7 +658,7 @@ static void rt6_probe(struct fib6_nh *fib6_nh) } else { INIT_WORK(&work->work, rt6_probe_deferred); work->target = *nh_gw; - dev_hold(dev); + dev_hold_track(dev, &work->dev_tracker, GFP_KERNEL); work->dev = dev; schedule_work(&work->work); } From patchwork Sun Dec 5 04:22:05 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 12656927 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id A2A50C433F5 for ; Sun, 5 Dec 2021 04:23:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231312AbhLEE0v (ORCPT ); Sat, 4 Dec 2021 23:26:51 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46088 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231206AbhLEE0v (ORCPT ); Sat, 4 Dec 2021 23:26:51 -0500 Received: from mail-pj1-x1034.google.com (mail-pj1-x1034.google.com [IPv6:2607:f8b0:4864:20::1034]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AD01FC061751 for ; Sat, 4 Dec 2021 20:23:24 -0800 (PST) Received: by mail-pj1-x1034.google.com with SMTP id np3so5258741pjb.4 for ; Sat, 04 Dec 2021 20:23:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=CC+G1w21LFBn90K6gAip7Dqueu3xcesCxWFiIThECwY=; b=DlXXXJAY5LB9AbdISdFL9Xt6wdvc8boUjF7VuawRxj0fPG2cspkufLhYyJ4gvKIYk+ xmtozZ8AW3mvVMMP3ayiJY9SeLo7P5xiKI5mbfaZ/so9avJMkZghqMmtfxZf7xL0lJJe a6qCp63XadUNaDf+ueo9x5w5kyPkIJBUdwn4zjuUMbXbCfB4rsbi/u+gDfhcghoTc6T7 MyMRHi50xEtA8n63++O375j/O0MpC0IDw1Rot7bRmbuQpDAr3VCeJLTHwvv3ZAHc14Ya ml7P4GEnWsg4iHtg9Okbr2c5Ra5MAvCG81TEoFAEpyqzQJpG3uU51gxwj1g9OfSlvjVt uT8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=CC+G1w21LFBn90K6gAip7Dqueu3xcesCxWFiIThECwY=; b=Hd1piNY4kpLSp3KNRLB0fsuiEujMleYwVix+UFe398vJhQbLNAJVpsideBhG7GCXXs 7yEE1rMCMOBLgU1Dy7KWqM4mOIB+22LNS/vp/OE6b+aJp49+N9L+KiRhsgsRQTaYS3KL 8A8hmi1qWU2MiW81J+v64MVu7VQMqgoPznMCTm26zl9TymVzx1R4/ml0b+cLwU3z9UNr KUoJ2cQIhegkcRuAouJ8oOootfKteJ8LnaiALZdWhF3ehWgCIHWMgDYGFxlZEUk+2Sy5 IZaqr2hLX2q8HnJIB71+x/qYwHMCvYVQhtkcA17MArrB3xNOEKQ2ih6M4OtICi5Doyku Mvkw== X-Gm-Message-State: AOAM531vffj7f9N2Hn2NzUMzRgHtILjx0Ai0WOa4lQtPiUzLaHp9himh lGA3Uj44mNRgxb4MMt73oxI= X-Google-Smtp-Source: ABdhPJwxcHsujgbI6PWs4WfjtWQdjiRiMYFq75OVK2Q+15N6xWmfWA/PTpwnxj9gDx4+eslo9bLNow== X-Received: by 2002:a17:902:934a:b0:142:6ed6:5327 with SMTP id g10-20020a170902934a00b001426ed65327mr34507640plp.85.1638678204311; Sat, 04 Dec 2021 20:23:24 -0800 (PST) Received: from edumazet1.svl.corp.google.com ([2620:15c:2c4:201:ffa7:1c62:2d55:eac2]) by smtp.gmail.com with ESMTPSA id 17sm6027095pgw.1.2021.12.04.20.23.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 04 Dec 2021 20:23:23 -0800 (PST) From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski Cc: netdev , Eric Dumazet , Eric Dumazet , Dmitry Vyukov Subject: [PATCH v3 net-next 11/23] sit: add net device refcount tracking to ip_tunnel Date: Sat, 4 Dec 2021 20:22:05 -0800 Message-Id: <20211205042217.982127-12-eric.dumazet@gmail.com> X-Mailer: git-send-email 2.34.1.400.ga245620fadb-goog In-Reply-To: <20211205042217.982127-1-eric.dumazet@gmail.com> References: <20211205042217.982127-1-eric.dumazet@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Eric Dumazet Note that other ip_tunnel users do not seem to hold a reference on tunnel->dev. Probably needs some investigations. Signed-off-by: Eric Dumazet --- include/net/ip_tunnels.h | 3 +++ net/ipv6/sit.c | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/include/net/ip_tunnels.h b/include/net/ip_tunnels.h index bc3b13ec93c9dcd3f5d4c0ad8598200912172863..0219fe907b261952ec1f140d105cd74d7eda6b40 100644 --- a/include/net/ip_tunnels.h +++ b/include/net/ip_tunnels.h @@ -104,7 +104,10 @@ struct metadata_dst; struct ip_tunnel { struct ip_tunnel __rcu *next; struct hlist_node hash_node; + struct net_device *dev; + netdevice_tracker dev_tracker; + struct net *net; /* netns for packet i/o */ unsigned long err_time; /* Time when the last ICMP error diff --git a/net/ipv6/sit.c b/net/ipv6/sit.c index 1b57ee36d6682e04085aa271c6c5c09e6e3a7b7e..057c0f83c8007fb0756ca0d3a2231fab8eebaacb 100644 --- a/net/ipv6/sit.c +++ b/net/ipv6/sit.c @@ -521,7 +521,7 @@ static void ipip6_tunnel_uninit(struct net_device *dev) ipip6_tunnel_del_prl(tunnel, NULL); } dst_cache_reset(&tunnel->dst_cache); - dev_put(dev); + dev_put_track(dev, &tunnel->dev_tracker); } static int ipip6_err(struct sk_buff *skb, u32 info) @@ -1463,7 +1463,7 @@ static int ipip6_tunnel_init(struct net_device *dev) dev->tstats = NULL; return err; } - dev_hold(dev); + dev_hold_track(dev, &tunnel->dev_tracker, GFP_KERNEL); return 0; } From patchwork Sun Dec 5 04:22:06 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 12656929 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 04217C433F5 for ; Sun, 5 Dec 2021 04:23:31 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231381AbhLEE05 (ORCPT ); Sat, 4 Dec 2021 23:26:57 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46110 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231206AbhLEE0z (ORCPT ); Sat, 4 Dec 2021 23:26:55 -0500 Received: from mail-pj1-x102a.google.com (mail-pj1-x102a.google.com [IPv6:2607:f8b0:4864:20::102a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7C8ACC061751 for ; Sat, 4 Dec 2021 20:23:29 -0800 (PST) Received: by mail-pj1-x102a.google.com with SMTP id k6-20020a17090a7f0600b001ad9d73b20bso3381993pjl.3 for ; Sat, 04 Dec 2021 20:23:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=TvekCyDlnpJy8Yfx/5JgJmFSWSd+IHup3z0pyOKys8k=; b=lcKGzyTk63fxn9KAjWmgYHOj6bLXUIiJtZwc9ccEn+m/XNCqxtDf/cbqb8IiefGyox VRfYDRN5/28sYslgpT++ifrhFm6xfRWWwGFzhgybAUc6y2g9Ef+uqVBDcybW+i2O+fIT hJoJhJvG14ZXuB47Hcv8XcUD7EhAGwCNC8RkSDbqnEs/kbIT2ULusIGwK97wFhAo91bw 6d4/YSDZq2uG0q5J0fZtIsw+Yf65yCUnt8NuwPcse9AJgKXd1YGqw3PWYbrEQ+s5HhmK BHqalvvlqhbHB59eDJkhk7xED8cAMKNIbdThshZRMUsiYGoOczOqcyBf86QhhmL9fqrb rYSw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=TvekCyDlnpJy8Yfx/5JgJmFSWSd+IHup3z0pyOKys8k=; b=g8Cb3l8hmFyOo8NyxUN65M7S8BPCr0LbjiPDs2i2AHDFAFVRue4kWP0TUHoTvsamFE CVUfGGUpk9STfVOCHHW18EP+ig6zW5QganoEBVj7u2+sLMfLRkGouXyj5HNnZPMq2Fn5 6lZvNrx7ni7jL/5V5yu3No/oY834GP054Z2RC6AURoCprL1LqRNfzXCpTQsS8SETtt6b 8X+6ICDAo9+jsDrTSqSPoLzwzplmmDphKjrsKDofr0GS/wUPnT9M7al8ZKPADnK9xBsG T0Okhz20xUDhfhncfVOgBy+42luqPKAE9ZRzdb1EC6xs8T8HpWclLIV1defFnEo+m13w efvA== X-Gm-Message-State: AOAM530jVpYNtSKQAu75UwPgciaPUXbMxdonU8oFIKZ0R/Pctc8IlSrj IDCeEn8uv5W6f1G+rSEBT64= X-Google-Smtp-Source: ABdhPJwV9j0OX6Z2Ub5u4qkZx2Jbe5otfKw3dKrAc3XnWOl0uwK6LTOyvKXieRaiSlLlKMJcCgqmCQ== X-Received: by 2002:a17:903:31d1:b0:141:f14b:6ebd with SMTP id v17-20020a17090331d100b00141f14b6ebdmr34231279ple.75.1638678209038; Sat, 04 Dec 2021 20:23:29 -0800 (PST) Received: from edumazet1.svl.corp.google.com ([2620:15c:2c4:201:ffa7:1c62:2d55:eac2]) by smtp.gmail.com with ESMTPSA id 17sm6027095pgw.1.2021.12.04.20.23.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 04 Dec 2021 20:23:28 -0800 (PST) From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski Cc: netdev , Eric Dumazet , Eric Dumazet , Dmitry Vyukov Subject: [PATCH v3 net-next 12/23] ipv6: add net device refcount tracker to struct ip6_tnl Date: Sat, 4 Dec 2021 20:22:06 -0800 Message-Id: <20211205042217.982127-13-eric.dumazet@gmail.com> X-Mailer: git-send-email 2.34.1.400.ga245620fadb-goog In-Reply-To: <20211205042217.982127-1-eric.dumazet@gmail.com> References: <20211205042217.982127-1-eric.dumazet@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Eric Dumazet Signed-off-by: Eric Dumazet --- include/net/ip6_tunnel.h | 1 + net/ipv6/ip6_gre.c | 8 ++++---- net/ipv6/ip6_tunnel.c | 4 ++-- net/ipv6/ip6_vti.c | 4 ++-- 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/include/net/ip6_tunnel.h b/include/net/ip6_tunnel.h index 028eaea1c854493fdab40f655216230e991e2fc5..a38c4f1e4e5c641dcede4d7fedfcdbfadbac430e 100644 --- a/include/net/ip6_tunnel.h +++ b/include/net/ip6_tunnel.h @@ -46,6 +46,7 @@ struct __ip6_tnl_parm { struct ip6_tnl { struct ip6_tnl __rcu *next; /* next tunnel in list */ struct net_device *dev; /* virtual device associated with tunnel */ + netdevice_tracker dev_tracker; struct net *net; /* netns for packet i/o */ struct __ip6_tnl_parm parms; /* tunnel configuration parameters */ struct flowi fl; /* flowi template for xmit */ diff --git a/net/ipv6/ip6_gre.c b/net/ipv6/ip6_gre.c index d831d243969327b2cd4b539199e02a897a6c14f7..110839a88bc2ef098df38196f997335501305ad7 100644 --- a/net/ipv6/ip6_gre.c +++ b/net/ipv6/ip6_gre.c @@ -403,7 +403,7 @@ static void ip6erspan_tunnel_uninit(struct net_device *dev) ip6erspan_tunnel_unlink_md(ign, t); ip6gre_tunnel_unlink(ign, t); dst_cache_reset(&t->dst_cache); - dev_put(dev); + dev_put_track(dev, &t->dev_tracker); } static void ip6gre_tunnel_uninit(struct net_device *dev) @@ -416,7 +416,7 @@ static void ip6gre_tunnel_uninit(struct net_device *dev) if (ign->fb_tunnel_dev == dev) WRITE_ONCE(ign->fb_tunnel_dev, NULL); dst_cache_reset(&t->dst_cache); - dev_put(dev); + dev_put_track(dev, &t->dev_tracker); } @@ -1496,7 +1496,7 @@ static int ip6gre_tunnel_init_common(struct net_device *dev) } ip6gre_tnl_init_features(dev); - dev_hold(dev); + dev_hold_track(dev, &tunnel->dev_tracker, GFP_KERNEL); return 0; cleanup_dst_cache_init: @@ -1888,7 +1888,7 @@ static int ip6erspan_tap_init(struct net_device *dev) dev->priv_flags |= IFF_LIVE_ADDR_CHANGE; ip6erspan_tnl_link_config(tunnel, 1); - dev_hold(dev); + dev_hold_track(dev, &tunnel->dev_tracker, GFP_KERNEL); return 0; cleanup_dst_cache_init: diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c index 484aca492cc06858319e87ba9c989de9f378e896..fe786df4f8493396b803002d25701affd59ee96c 100644 --- a/net/ipv6/ip6_tunnel.c +++ b/net/ipv6/ip6_tunnel.c @@ -383,7 +383,7 @@ ip6_tnl_dev_uninit(struct net_device *dev) else ip6_tnl_unlink(ip6n, t); dst_cache_reset(&t->dst_cache); - dev_put(dev); + dev_put_track(dev, &t->dev_tracker); } /** @@ -1883,7 +1883,7 @@ ip6_tnl_dev_init_gen(struct net_device *dev) dev->min_mtu = ETH_MIN_MTU; dev->max_mtu = IP6_MAX_MTU - dev->hard_header_len; - dev_hold(dev); + dev_hold_track(dev, &t->dev_tracker, GFP_KERNEL); return 0; destroy_dst: diff --git a/net/ipv6/ip6_vti.c b/net/ipv6/ip6_vti.c index 527e9ead7449e5229db11b73622ff723847ffc96..ed9b6d6ca65e0173c9f03e580cca2747ad023a99 100644 --- a/net/ipv6/ip6_vti.c +++ b/net/ipv6/ip6_vti.c @@ -293,7 +293,7 @@ static void vti6_dev_uninit(struct net_device *dev) RCU_INIT_POINTER(ip6n->tnls_wc[0], NULL); else vti6_tnl_unlink(ip6n, t); - dev_put(dev); + dev_put_track(dev, &t->dev_tracker); } static int vti6_input_proto(struct sk_buff *skb, int nexthdr, __be32 spi, @@ -934,7 +934,7 @@ static inline int vti6_dev_init_gen(struct net_device *dev) dev->tstats = netdev_alloc_pcpu_stats(struct pcpu_sw_netstats); if (!dev->tstats) return -ENOMEM; - dev_hold(dev); + dev_hold_track(dev, &t->dev_tracker, GFP_KERNEL); return 0; } From patchwork Sun Dec 5 04:22:07 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 12656931 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1339CC433F5 for ; Sun, 5 Dec 2021 04:23:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231439AbhLEE1C (ORCPT ); Sat, 4 Dec 2021 23:27:02 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46136 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231206AbhLEE1C (ORCPT ); Sat, 4 Dec 2021 23:27:02 -0500 Received: from mail-pl1-x630.google.com (mail-pl1-x630.google.com [IPv6:2607:f8b0:4864:20::630]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9BB72C061751 for ; Sat, 4 Dec 2021 20:23:35 -0800 (PST) Received: by mail-pl1-x630.google.com with SMTP id y7so4888870plp.0 for ; Sat, 04 Dec 2021 20:23:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=7qwiO23AB0bDvllXH4j2dl319YdLwYZlD78jd251Gbg=; b=OumXFdYos1zjd/tCX8ml70R6DoZzEj7R6AqASv4on16AGLQyKaXASq+80jhinzR0Ti K1hrR8qFfmErUh3s2uMMGZLwPxD6pAIpH9ufJ1bUnVuEWhqxWa8RnfqC6SX4dbwo8//u Qv5NdQzWfYPN/K7KP0CLvNtbuHryGty7eyy/d4XOy2D5iMWK9UXqwpK0Iuc9dtGywp25 WKEiOdsTbzZBAbRuJq1DpKAKpOTTThTg68oG09Fyjw5uae36Asg78Q8+hMIkKKt9QON9 xmIyhTX2RrNPXBh/E1JqBYXaa/vf+fIrjaF92wzZ21R4x2ZmSDLfvOjEoZh8m9V6VtBH JWZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=7qwiO23AB0bDvllXH4j2dl319YdLwYZlD78jd251Gbg=; b=lelucYxt9K2nLZKUnk7bRri2j8kaE1hjSFQzH9TSh0cah3NrvSNxT4KZebtNcV7RBA o+pH6cR7D66zpNixw9dgrOU2tIv5EF7aLb0mEuLvotwzUpGnk+eVOqPLpfRg1m7fVa0r RB6Bmymn5cV9fbl24AWwIbXxqUJDdY3L3A0Or1cSsNWPupUeuxBvkhHZqTvcN7atSmmf yT0J5Cm4G7C4CM1nwwOybJQw2jnUVUrSK+/vmf7+9JDAThsMpqkCrgonI1TKyFMF1cQw 50SXpicDx/GHGkgc8ZvvZPgklDl/tAy+7MqTzQeQu91G4yyrtWKiuIXBfwSY9QdFh2lx 7n+A== X-Gm-Message-State: AOAM530IMzQJ+t6DyixF5UcIKcBb5LtTdawU97BSPEcATgbbzly8UMEI xIPPZA66jp3/6WYw2RS51e1y6ZDhEWs= X-Google-Smtp-Source: ABdhPJyhp8ppzyPWWV/M6nMfKar6QkQXSu15snAAfPlmz57SaW4ABhE9mRT44poZodlqlbT4Ptod5w== X-Received: by 2002:a17:902:bd88:b0:143:d318:76e6 with SMTP id q8-20020a170902bd8800b00143d31876e6mr34660101pls.66.1638678215219; Sat, 04 Dec 2021 20:23:35 -0800 (PST) Received: from edumazet1.svl.corp.google.com ([2620:15c:2c4:201:ffa7:1c62:2d55:eac2]) by smtp.gmail.com with ESMTPSA id 17sm6027095pgw.1.2021.12.04.20.23.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 04 Dec 2021 20:23:34 -0800 (PST) From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski Cc: netdev , Eric Dumazet , Eric Dumazet , Dmitry Vyukov Subject: [PATCH v3 net-next 13/23] net: add net device refcount tracker to struct neighbour Date: Sat, 4 Dec 2021 20:22:07 -0800 Message-Id: <20211205042217.982127-14-eric.dumazet@gmail.com> X-Mailer: git-send-email 2.34.1.400.ga245620fadb-goog In-Reply-To: <20211205042217.982127-1-eric.dumazet@gmail.com> References: <20211205042217.982127-1-eric.dumazet@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Eric Dumazet Signed-off-by: Eric Dumazet --- include/net/neighbour.h | 1 + net/core/neighbour.c | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/include/net/neighbour.h b/include/net/neighbour.h index 55af812c3ed5704813bd64aa760246255aa5f93f..190b07fe089ef5c900a0d97df0bc4d667d8bdcd6 100644 --- a/include/net/neighbour.h +++ b/include/net/neighbour.h @@ -158,6 +158,7 @@ struct neighbour { struct list_head managed_list; struct rcu_head rcu; struct net_device *dev; + netdevice_tracker dev_tracker; u8 primary_key[0]; } __randomize_layout; diff --git a/net/core/neighbour.c b/net/core/neighbour.c index 72ba027c34cfea6f38a9e78927c35048ebfe7a7f..fb340347e4d88f0058383697071cfb5bfbd9f925 100644 --- a/net/core/neighbour.c +++ b/net/core/neighbour.c @@ -624,7 +624,7 @@ ___neigh_create(struct neigh_table *tbl, const void *pkey, memcpy(n->primary_key, pkey, key_len); n->dev = dev; - dev_hold(dev); + dev_hold_track(dev, &n->dev_tracker, GFP_ATOMIC); /* Protocol specific setup. */ if (tbl->constructor && (error = tbl->constructor(n)) < 0) { @@ -880,7 +880,7 @@ void neigh_destroy(struct neighbour *neigh) if (dev->netdev_ops->ndo_neigh_destroy) dev->netdev_ops->ndo_neigh_destroy(dev, neigh); - dev_put(dev); + dev_put_track(dev, &neigh->dev_tracker); neigh_parms_put(neigh->parms); neigh_dbg(2, "neigh %p is destroyed\n", neigh); From patchwork Sun Dec 5 04:22:08 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 12656933 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8403EC433F5 for ; Sun, 5 Dec 2021 04:23:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231450AbhLEE1L (ORCPT ); Sat, 4 Dec 2021 23:27:11 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46172 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231206AbhLEE1K (ORCPT ); Sat, 4 Dec 2021 23:27:10 -0500 Received: from mail-pg1-x535.google.com (mail-pg1-x535.google.com [IPv6:2607:f8b0:4864:20::535]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6D14FC061751 for ; Sat, 4 Dec 2021 20:23:44 -0800 (PST) Received: by mail-pg1-x535.google.com with SMTP id s137so7118417pgs.5 for ; Sat, 04 Dec 2021 20:23:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=GDtiZ9MlMKx0wR1tSzrOI9t3DpPfRAAmdOIzJGgoHJE=; b=Fvc/ELsXW9d72jdm3AIVYPS1nAv4RE5bsuH5QxeUsSNz4bUn6bUS9DRU9uF76SWk4r TYixdmB5fJzkRmdAf2xC4o8j3FPsxEnbjm1tvOcM2VjOzQ9Okn+ZjUWYD45ofB/aXkT2 g+P3g76U+G12sbFSO7SudWnB4mZuWsbmZGw8Ky9pJbjcF8Pl2vuEjFpBDdU8q8+R4vPU rQZjRZCSi0oY8nxfKxR6GVaPq2PE9SqVaNZ/G9KIteDa31Wie8AbzzfR/jAfgaE8P+Sa gvj8eBKjG7Fqlg63qA47o1v31ug7E2+ar6ixOamS4OCgocvFMOPirpP1NwVI/FYEXUub 4nmA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=GDtiZ9MlMKx0wR1tSzrOI9t3DpPfRAAmdOIzJGgoHJE=; b=RrsTkmPMsfc9+wIhS8HM0wCkA0DQQswIESLpFyw2gN8F3+U80fQ4CcBVBcQXk0pglK DhbKGeYFeAszbUEs3WzDBDgeCKyNuDd9k5sh6OlAq8pIxUGCwoz1n7diEu+mxe+JsnQM aacoZXRywcxGd79fx+pfRiZbAhst8iNDDnGOXbSudYbF4vXxAYsLVVtoU+L+qHF5lm/0 Cd/25Hj8fuTYJLpW1/QIKwkTcp4tMqBibLsqNZkpKc1kGBdqkuOP6qLk1vpMWGkSSRxA 6/44yZhzbVEV1KMZg5PI8QW+4rLUqHkZhNt8moYgGc4MPWIUbbwM9kh5LpuPU19ox2B/ tohw== X-Gm-Message-State: AOAM531+9QUbj7HDB4n8yf+lhko15QrqeoFg1rqNybJTGrZ/giseDJOt 9IO3E10umbwPamPvzFa847g= X-Google-Smtp-Source: ABdhPJxKeul879q6L+gGWdCmEmc3FASAdlBwo6ORexu3WmlrYZfEdCxiJKpwHk82iycHW6wx/ESQGg== X-Received: by 2002:a62:5215:0:b0:49f:a996:b724 with SMTP id g21-20020a625215000000b0049fa996b724mr28856598pfb.3.1638678224062; Sat, 04 Dec 2021 20:23:44 -0800 (PST) Received: from edumazet1.svl.corp.google.com ([2620:15c:2c4:201:ffa7:1c62:2d55:eac2]) by smtp.gmail.com with ESMTPSA id 17sm6027095pgw.1.2021.12.04.20.23.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 04 Dec 2021 20:23:43 -0800 (PST) From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski Cc: netdev , Eric Dumazet , Eric Dumazet , Dmitry Vyukov Subject: [PATCH v3 net-next 14/23] net: add net device refcount tracker to struct pneigh_entry Date: Sat, 4 Dec 2021 20:22:08 -0800 Message-Id: <20211205042217.982127-15-eric.dumazet@gmail.com> X-Mailer: git-send-email 2.34.1.400.ga245620fadb-goog In-Reply-To: <20211205042217.982127-1-eric.dumazet@gmail.com> References: <20211205042217.982127-1-eric.dumazet@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Eric Dumazet Signed-off-by: Eric Dumazet --- include/net/neighbour.h | 1 + net/core/neighbour.c | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/include/net/neighbour.h b/include/net/neighbour.h index 190b07fe089ef5c900a0d97df0bc4d667d8bdcd6..5fffb783670a6d2432896a06d3044f6ac83feaf4 100644 --- a/include/net/neighbour.h +++ b/include/net/neighbour.h @@ -174,6 +174,7 @@ struct pneigh_entry { struct pneigh_entry *next; possible_net_t net; struct net_device *dev; + netdevice_tracker dev_tracker; u32 flags; u8 protocol; u8 key[]; diff --git a/net/core/neighbour.c b/net/core/neighbour.c index fb340347e4d88f0058383697071cfb5bfbd9f925..56de74f8d2b1c896c478ded2c659b0207d7b5c75 100644 --- a/net/core/neighbour.c +++ b/net/core/neighbour.c @@ -771,10 +771,10 @@ struct pneigh_entry * pneigh_lookup(struct neigh_table *tbl, write_pnet(&n->net, net); memcpy(n->key, pkey, key_len); n->dev = dev; - dev_hold(dev); + dev_hold_track(dev, &n->dev_tracker, GFP_KERNEL); if (tbl->pconstructor && tbl->pconstructor(n)) { - dev_put(dev); + dev_put_track(dev, &n->dev_tracker); kfree(n); n = NULL; goto out; @@ -806,7 +806,7 @@ int pneigh_delete(struct neigh_table *tbl, struct net *net, const void *pkey, write_unlock_bh(&tbl->lock); if (tbl->pdestructor) tbl->pdestructor(n); - dev_put(n->dev); + dev_put_track(n->dev, &n->dev_tracker); kfree(n); return 0; } @@ -839,7 +839,7 @@ static int pneigh_ifdown_and_unlock(struct neigh_table *tbl, n->next = NULL; if (tbl->pdestructor) tbl->pdestructor(n); - dev_put(n->dev); + dev_put_track(n->dev, &n->dev_tracker); kfree(n); } return -ENOENT; From patchwork Sun Dec 5 04:22:09 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 12656935 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id E4342C433EF for ; Sun, 5 Dec 2021 04:24:04 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231501AbhLEE13 (ORCPT ); Sat, 4 Dec 2021 23:27:29 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46208 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231453AbhLEE1T (ORCPT ); Sat, 4 Dec 2021 23:27:19 -0500 Received: from mail-pg1-x534.google.com (mail-pg1-x534.google.com [IPv6:2607:f8b0:4864:20::534]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5EA5AC061751 for ; Sat, 4 Dec 2021 20:23:53 -0800 (PST) Received: by mail-pg1-x534.google.com with SMTP id k4so7090177pgb.8 for ; Sat, 04 Dec 2021 20:23:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=qDwXdMqlBKlcabo1l62Px149VuPWYKtTf0Af1AK9Ihw=; b=PXaJn08FlOMGaQpeWd9eC+ZpbLHUAiGyKfsSYBcKmReeeCkQ8eLc9hvcA67SgjFcNR ePlFjl13/E22II5JRBmSmeT3aJ6n36SP08jEfkgqJJKTmuqp350kJlQJGJCpfGqQZ0QN EXRcYZOg7cpLSpcOKwH1MYsOVlmrxcyD6xwwwlVlR260rrKCQvfyNeFQU4P1tsyIRrpX 86Pjkg+ye5U6Gx6SPXY5pXilPz0qVIESEPTn99uvb+KpStH6xrvVd9nHkAVQk2vcy2oM EGKqx/GOBaKm2ekS6kXIPZHmHRjskC5C5A2UAN3gKOtciwFf06ms2yoWGo+kFz0lxyi/ 4yPg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=qDwXdMqlBKlcabo1l62Px149VuPWYKtTf0Af1AK9Ihw=; b=rboeAnOl7023nmEDHAsDDsflHAladH7fpdoqA3rgw9ysh7eLmCnH9Psr1roi7SiEQK huJCr151qJPPjhd8Hdf/NL6YSlszUMBTU5SGMI1WLsUf1Yb2mFaVieV4OZEJB8QAv9IG 1r3tlIX4yFYiJTA+mc4YgktiCW6rSyXB5Fn21BMWCY7KC0VlnSyYocmJWaKI0HWAba3m T0Bqsh/tFUr1J5+3K0wUkWhLqzHz3FNU3zJl3IEDpb0ZTk4x3JOUpBkjkYA+QoVMNsPN ki1u8zpYx4/iYPAHYY0rH5fhpu+KhG++C+zYK1aW5fIBCEWQuf/Aw4mL//80KusyeYgp lS6g== X-Gm-Message-State: AOAM530uFno4uTa9SymWFHAtah7dnuMc45mq26epyppWZTjlDlNw4otX Czd1Q/9vFkz+y9GU11pocTk= X-Google-Smtp-Source: ABdhPJzux6Dy2KHAXOpVK2cYI2xCOW6mAQe6B2YMcNk6I4DF0Bu4Fy/3ZpQ6RDPRrv1Dis/dzzGqGg== X-Received: by 2002:a05:6a00:1a8e:b0:49f:a4a9:8f1e with SMTP id e14-20020a056a001a8e00b0049fa4a98f1emr28803611pfv.67.1638678232963; Sat, 04 Dec 2021 20:23:52 -0800 (PST) Received: from edumazet1.svl.corp.google.com ([2620:15c:2c4:201:ffa7:1c62:2d55:eac2]) by smtp.gmail.com with ESMTPSA id 17sm6027095pgw.1.2021.12.04.20.23.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 04 Dec 2021 20:23:52 -0800 (PST) From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski Cc: netdev , Eric Dumazet , Eric Dumazet , Dmitry Vyukov Subject: [PATCH v3 net-next 15/23] net: add net device refcount tracker to struct neigh_parms Date: Sat, 4 Dec 2021 20:22:09 -0800 Message-Id: <20211205042217.982127-16-eric.dumazet@gmail.com> X-Mailer: git-send-email 2.34.1.400.ga245620fadb-goog In-Reply-To: <20211205042217.982127-1-eric.dumazet@gmail.com> References: <20211205042217.982127-1-eric.dumazet@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Eric Dumazet Signed-off-by: Eric Dumazet --- include/net/neighbour.h | 1 + net/core/neighbour.c | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/include/net/neighbour.h b/include/net/neighbour.h index 5fffb783670a6d2432896a06d3044f6ac83feaf4..937389e04c8e26b6f5a4c1362a90930145671889 100644 --- a/include/net/neighbour.h +++ b/include/net/neighbour.h @@ -70,6 +70,7 @@ enum { struct neigh_parms { possible_net_t net; struct net_device *dev; + netdevice_tracker dev_tracker; struct list_head list; int (*neigh_setup)(struct neighbour *); struct neigh_table *tbl; diff --git a/net/core/neighbour.c b/net/core/neighbour.c index 56de74f8d2b1c896c478ded2c659b0207d7b5c75..dd271ffedf11cdd3a1b6bf5fad7b0ddcc5d41e80 100644 --- a/net/core/neighbour.c +++ b/net/core/neighbour.c @@ -1666,13 +1666,13 @@ struct neigh_parms *neigh_parms_alloc(struct net_device *dev, refcount_set(&p->refcnt, 1); p->reachable_time = neigh_rand_reach_time(NEIGH_VAR(p, BASE_REACHABLE_TIME)); - dev_hold(dev); + dev_hold_track(dev, &p->dev_tracker, GFP_KERNEL); p->dev = dev; write_pnet(&p->net, net); p->sysctl_table = NULL; if (ops->ndo_neigh_setup && ops->ndo_neigh_setup(dev, p)) { - dev_put(dev); + dev_put_track(dev, &p->dev_tracker); kfree(p); return NULL; } @@ -1703,7 +1703,7 @@ void neigh_parms_release(struct neigh_table *tbl, struct neigh_parms *parms) list_del(&parms->list); parms->dead = 1; write_unlock_bh(&tbl->lock); - dev_put(parms->dev); + dev_put_track(parms->dev, &parms->dev_tracker); call_rcu(&parms->rcu_head, neigh_rcu_free_parms); } EXPORT_SYMBOL(neigh_parms_release); From patchwork Sun Dec 5 04:22:10 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 12656937 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6BA77C433F5 for ; Sun, 5 Dec 2021 04:24:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231502AbhLEE1h (ORCPT ); Sat, 4 Dec 2021 23:27:37 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46224 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231489AbhLEE1Y (ORCPT ); Sat, 4 Dec 2021 23:27:24 -0500 Received: from mail-pg1-x533.google.com (mail-pg1-x533.google.com [IPv6:2607:f8b0:4864:20::533]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EE23DC0613F8 for ; Sat, 4 Dec 2021 20:23:57 -0800 (PST) Received: by mail-pg1-x533.google.com with SMTP id 200so7139469pga.1 for ; Sat, 04 Dec 2021 20:23:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=20Cb5L4Nfh6M+TGH/ohYepS0hgWA3PLHDkuxzPE2zO0=; b=cLBi2JBfBrtGtPzoR0ozeShjcmil67Gg+TwUsSPxDK88pqw3ppwESt/SZ6M75krWbg gqxwyI0+KYInMfyntgagKplQsw2R8iwyVrQM3v/0Ru5o56Osy+JeSBMqGVaAOh16tJvy DODEA30BXRvhldc+EiAk6THmOHT2Z5sLGkDgKEaj8N4uTtg6DvEvmjQf/IZo/JVJUCdD OtawmiuNR0i87z6AJpkg+E1r4onqzgB37uPERPbSioBqigOaPDt7d00oPB+FH0akQvK9 dBd7gGAESL7CY/KVka/hONYKPp3qPIeEstdgQOIv/0bXliXzRIPcCI4ACr7hKzWlU6kX PCeA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=20Cb5L4Nfh6M+TGH/ohYepS0hgWA3PLHDkuxzPE2zO0=; b=fvGV3HZXZvA6xIAtZEOGV0yVIFg65ci+aLqdS0UzhwZ0Yx6Ezoi52TpJB1DgjxWo3r drChBZXv1v9LEXwPJcGJMlRrQ/rvru1b9w3HUde9pVClI2k8ynPNmJWYSc5cnh1kHdX4 G+vp8mD1WvuEeyM8/MeXq4IJSz8Fb3uqU2ahHv/OOCwz9BsHm0cxmaFotKpZtLujXvT9 WdzON+0+9S6GawQouvBdklfyxo6XP6biizf/TE7E5q88UGkgvNuKIR5HZCWLU67IuSnV au718oR3GtSvHWpGaVI7bfip3EE+zfhlNvcofnj1/7yeyOERCh+dPUENBlYTbwNIrgXs AD2A== X-Gm-Message-State: AOAM531jvzbjd8dMUG9VOybX9yVOZVmagZWZpOXxCb1m8zmgDpnTEFC8 WxPg7RW0DmfcUVUnp2JZ9nM85ALng+I= X-Google-Smtp-Source: ABdhPJxw3OoMEj4f+yOyHgZVNuOjOMpaFZ5o+CGG1WC8he6btRmJ3R97W5HGssMUyZeExkqd4kke3g== X-Received: by 2002:a05:6a00:2af:b0:4a2:a6f0:8eec with SMTP id q15-20020a056a0002af00b004a2a6f08eecmr28389750pfs.23.1638678237554; Sat, 04 Dec 2021 20:23:57 -0800 (PST) Received: from edumazet1.svl.corp.google.com ([2620:15c:2c4:201:ffa7:1c62:2d55:eac2]) by smtp.gmail.com with ESMTPSA id 17sm6027095pgw.1.2021.12.04.20.23.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 04 Dec 2021 20:23:57 -0800 (PST) From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski Cc: netdev , Eric Dumazet , Eric Dumazet , Dmitry Vyukov Subject: [PATCH v3 net-next 16/23] net: add net device refcount tracker to struct netdev_adjacent Date: Sat, 4 Dec 2021 20:22:10 -0800 Message-Id: <20211205042217.982127-17-eric.dumazet@gmail.com> X-Mailer: git-send-email 2.34.1.400.ga245620fadb-goog In-Reply-To: <20211205042217.982127-1-eric.dumazet@gmail.com> References: <20211205042217.982127-1-eric.dumazet@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Eric Dumazet Signed-off-by: Eric Dumazet --- net/core/dev.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/net/core/dev.c b/net/core/dev.c index 1740d6cfe86b58359cceaec7ee9cc015a3843723..4420086f3aeb34614fc8222206dff2b2caa31d02 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -6537,6 +6537,7 @@ static __latent_entropy void net_rx_action(struct softirq_action *h) struct netdev_adjacent { struct net_device *dev; + netdevice_tracker dev_tracker; /* upper master flag, there can only be one master device per list */ bool master; @@ -7301,7 +7302,7 @@ static int __netdev_adjacent_dev_insert(struct net_device *dev, adj->ref_nr = 1; adj->private = private; adj->ignore = false; - dev_hold(adj_dev); + dev_hold_track(adj_dev, &adj->dev_tracker, GFP_KERNEL); pr_debug("Insert adjacency: dev %s adj_dev %s adj->ref_nr %d; dev_hold on %s\n", dev->name, adj_dev->name, adj->ref_nr, adj_dev->name); @@ -7330,8 +7331,8 @@ static int __netdev_adjacent_dev_insert(struct net_device *dev, if (netdev_adjacent_is_neigh_list(dev, adj_dev, dev_list)) netdev_adjacent_sysfs_del(dev, adj_dev->name, dev_list); free_adj: + dev_put_track(adj_dev, &adj->dev_tracker); kfree(adj); - dev_put(adj_dev); return ret; } @@ -7372,7 +7373,7 @@ static void __netdev_adjacent_dev_remove(struct net_device *dev, list_del_rcu(&adj->list); pr_debug("adjacency: dev_put for %s, because link removed from %s to %s\n", adj_dev->name, dev->name, adj_dev->name); - dev_put(adj_dev); + dev_put_track(adj_dev, &adj->dev_tracker); kfree_rcu(adj, rcu); } From patchwork Sun Dec 5 04:22:11 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 12656939 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 075A9C433FE for ; Sun, 5 Dec 2021 04:24:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231489AbhLEE1i (ORCPT ); Sat, 4 Dec 2021 23:27:38 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46246 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231453AbhLEE1a (ORCPT ); Sat, 4 Dec 2021 23:27:30 -0500 Received: from mail-pf1-x42a.google.com (mail-pf1-x42a.google.com [IPv6:2607:f8b0:4864:20::42a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DB4A5C061751 for ; Sat, 4 Dec 2021 20:24:03 -0800 (PST) Received: by mail-pf1-x42a.google.com with SMTP id z6so6902961pfe.7 for ; Sat, 04 Dec 2021 20:24:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=K+AadUv33QFmjFDOBOvnFpBm7Lw7zZYJtLUilhe63TU=; b=Md260HyCK4F3uCrAYsgidrhyQuqFCVeyJ6DKue7HaWMt0WFnbKi6vSDyj1qPti+lZT oMqDYMgbOXORkNmXwZrDGgFuLHaCujEkWO3Gqo8MO5ZUpw2gfAve34aB2IwMtRrUwo0V tDySmg2K76cx/94E9dTfAhz+W8Ivw8NEAVmAplBIQqxfady1pIuXYgPND0m/c3PAAd3K KpLhzecobRMuA/ivrCYmD2YcBm0k29Lz5d/MPk/o8pLGmZPxio2vH1t+gkv3G1RTxUJD SOOOUAjU5kIvFLfybtYMsw2ZbnumHjyPBz5J1vfjuvCa9yy2sgPn8/kIJsgMb2FIWE7A 5wtg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=K+AadUv33QFmjFDOBOvnFpBm7Lw7zZYJtLUilhe63TU=; b=BziCJ6Bh3IVtuZywPU4DyBWuSkAdNlUUfRqWiVBmEyOHGLjBlUvfaECTPv1KNv9e2P LZtUsucwPBD9Rb0NpOsEb8RZirrPs7S6k4UI9PwzpOiw697hDxqHqc9BEfcsJ5slWZJX UEmZ4XXt+X/36DQ7mPQrKDxKvEP+N0q6+zO8I719Wa3eeKh9a9zggLvMneblekv6Xt8d zElpmqBqjAF0trurndRTr/wyZ1MKHT/cd2w2nxj2W5ndVgIEeBW8emxk6Ysp2J1YG7kx D0H9ktFwgGDiFIMnH325Vdo//x9EaOPfqZICRptmUL69ujUo5hPQQS1McVSv2aj82GrG INdg== X-Gm-Message-State: AOAM530CcmPszJ/Kbw2hua/IHaL/UqKbPbM00hZ9J9nQ2g/fyJXg+YXQ FLiXpivyEQ41s3czSaWyt6HoMgQkRH4= X-Google-Smtp-Source: ABdhPJx8jQoHZSYBeJBIBl7O7Pd/NFWo9GyBJIBy/tvHWWgjZYLK+6JSlCXbGc3dmmNvRUsuqnjNvA== X-Received: by 2002:a65:5ac7:: with SMTP id d7mr12400242pgt.590.1638678243443; Sat, 04 Dec 2021 20:24:03 -0800 (PST) Received: from edumazet1.svl.corp.google.com ([2620:15c:2c4:201:ffa7:1c62:2d55:eac2]) by smtp.gmail.com with ESMTPSA id 17sm6027095pgw.1.2021.12.04.20.24.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 04 Dec 2021 20:24:03 -0800 (PST) From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski Cc: netdev , Eric Dumazet , Eric Dumazet , Dmitry Vyukov Subject: [PATCH v3 net-next 17/23] ipv6: add net device refcount tracker to struct inet6_dev Date: Sat, 4 Dec 2021 20:22:11 -0800 Message-Id: <20211205042217.982127-18-eric.dumazet@gmail.com> X-Mailer: git-send-email 2.34.1.400.ga245620fadb-goog In-Reply-To: <20211205042217.982127-1-eric.dumazet@gmail.com> References: <20211205042217.982127-1-eric.dumazet@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Eric Dumazet Signed-off-by: Eric Dumazet --- include/net/if_inet6.h | 1 + net/ipv6/addrconf.c | 4 ++-- net/ipv6/addrconf_core.c | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/include/net/if_inet6.h b/include/net/if_inet6.h index 653e7d0f65cb7a5e7458daf860215d1873c532e7..f026cf08a8e86c54ea5d9f1abddd5f0e3caf402b 100644 --- a/include/net/if_inet6.h +++ b/include/net/if_inet6.h @@ -160,6 +160,7 @@ struct ipv6_devstat { struct inet6_dev { struct net_device *dev; + netdevice_tracker dev_tracker; struct list_head addr_list; diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c index 3445f8017430f145496bad78afd6378bf5cb1c02..3eee17790a82fe6c528db4e821b11444cfa26866 100644 --- a/net/ipv6/addrconf.c +++ b/net/ipv6/addrconf.c @@ -405,13 +405,13 @@ static struct inet6_dev *ipv6_add_dev(struct net_device *dev) if (ndev->cnf.forwarding) dev_disable_lro(dev); /* We refer to the device */ - dev_hold(dev); + dev_hold_track(dev, &ndev->dev_tracker, GFP_KERNEL); if (snmp6_alloc_dev(ndev) < 0) { netdev_dbg(dev, "%s: cannot allocate memory for statistics\n", __func__); neigh_parms_release(&nd_tbl, ndev->nd_parms); - dev_put(dev); + dev_put_track(dev, &ndev->dev_tracker); kfree(ndev); return ERR_PTR(err); } diff --git a/net/ipv6/addrconf_core.c b/net/ipv6/addrconf_core.c index 1d4054bb345b72204179c17b4ebc69e11e3faf53..881d1477d24ad5af79fd744bee1e0792fcfa483d 100644 --- a/net/ipv6/addrconf_core.c +++ b/net/ipv6/addrconf_core.c @@ -263,7 +263,7 @@ void in6_dev_finish_destroy(struct inet6_dev *idev) #ifdef NET_REFCNT_DEBUG pr_debug("%s: %s\n", __func__, dev ? dev->name : "NIL"); #endif - dev_put(dev); + dev_put_track(dev, &idev->dev_tracker); if (!idev->dead) { pr_warn("Freeing alive inet6 device %p\n", idev); return; From patchwork Sun Dec 5 04:22:12 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 12656941 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1F119C4332F for ; Sun, 5 Dec 2021 04:24:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231463AbhLEE1j (ORCPT ); Sat, 4 Dec 2021 23:27:39 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46264 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231467AbhLEE1f (ORCPT ); Sat, 4 Dec 2021 23:27:35 -0500 Received: from mail-pl1-x62e.google.com (mail-pl1-x62e.google.com [IPv6:2607:f8b0:4864:20::62e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E3BB5C061354 for ; Sat, 4 Dec 2021 20:24:08 -0800 (PST) Received: by mail-pl1-x62e.google.com with SMTP id y7so4889259plp.0 for ; Sat, 04 Dec 2021 20:24:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=n5f/tXjsxBdlKXOqSXxOpThsLdatHM6TCJlr2uwfB3o=; b=eXBrW1SWconqZjJKZp/DLM4tw6OIGrbawhYs67YOCUkN6YSCgVPiMifru69aKZZzQ9 fLcxpp1BYi8tBWQoNwPbrmPFtH6U7cMFSP6YfU7aT16yp8p0b9G0o0/mQJAETLvtjLUJ 6ei5Q5MrW+YCxXRW57043P0iMMlSjRiTV00CvwFz71OJpPGJM0mU91Axshg/urryPctG JxmJokwpkQpjZx+5axt/K2X/BoKDaTapdDR+kK+FMiQaGAueo99k/SFjAlBm6qA/02eR Ug0ngI8r+It343Adxds28XNs7NMoBN8qS3hLiG0XC1ST8nr6CQwG0dbithca2d1Qf7EP MGVg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=n5f/tXjsxBdlKXOqSXxOpThsLdatHM6TCJlr2uwfB3o=; b=n7QZp31c47feTuJyHX3PuU6LeXuay4zgEE1fZULdMVgU8UsRwRut0RabFPyd25N2Kl zak4SS7H9eEaKwOY+n/Sk8Pw1AHU96bPKkpsqxYAXANFmxN9dgsPfIQmeTi8DGi7N8bs XUIa+qhoWZ7TXrYqqh4n0cpvt90DKTdGyRO3KW8+7I+rDsg6OeA2aXtkBSSDN+8IGyUn XiF9exQ5tIpC9izfV2Ek6VQH3dJQj3+WoudS/yZFItyTuc7intuH5uZYmcTBHC7vMXrg 2kYGJzugWK9vztmL0o7+rknKUL2M0UZAX9/4zWcTNpGrsWuHoXs+pITO/zppIIguAs45 86KA== X-Gm-Message-State: AOAM532qmxOVfsDVYXojbCQlKyGdRHYGHaRJhtSOmjxfIMnnhwDwghEI LGReZaJt7EuIt0/J4MjZG5S23VmtmBk= X-Google-Smtp-Source: ABdhPJz+xj5kOWMG4hwjInoYz2sUi9AyoPV04gtVbFwwec3BnPWpGD6MeRAbbI2vnXaq31g6RVt11w== X-Received: by 2002:a17:90b:1b07:: with SMTP id nu7mr27404655pjb.140.1638678248496; Sat, 04 Dec 2021 20:24:08 -0800 (PST) Received: from edumazet1.svl.corp.google.com ([2620:15c:2c4:201:ffa7:1c62:2d55:eac2]) by smtp.gmail.com with ESMTPSA id 17sm6027095pgw.1.2021.12.04.20.24.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 04 Dec 2021 20:24:08 -0800 (PST) From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski Cc: netdev , Eric Dumazet , Eric Dumazet , Dmitry Vyukov Subject: [PATCH v3 net-next 18/23] ipv4: add net device refcount tracker to struct in_device Date: Sat, 4 Dec 2021 20:22:12 -0800 Message-Id: <20211205042217.982127-19-eric.dumazet@gmail.com> X-Mailer: git-send-email 2.34.1.400.ga245620fadb-goog In-Reply-To: <20211205042217.982127-1-eric.dumazet@gmail.com> References: <20211205042217.982127-1-eric.dumazet@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Eric Dumazet Signed-off-by: Eric Dumazet --- include/linux/inetdevice.h | 2 ++ net/ipv4/devinet.c | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/include/linux/inetdevice.h b/include/linux/inetdevice.h index 518b484a7f07ebfa75cb8e4b41d78c15157f9aac..674aeead626089c2740ef844a7c8c8b799ee79dd 100644 --- a/include/linux/inetdevice.h +++ b/include/linux/inetdevice.h @@ -24,6 +24,8 @@ struct ipv4_devconf { struct in_device { struct net_device *dev; + netdevice_tracker dev_tracker; + refcount_t refcnt; int dead; struct in_ifaddr __rcu *ifa_list;/* IP ifaddr chain */ diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c index 323e622ff9b745350a0ce63a238774281ab326e4..fba2bffd65f7967f390dcaf5183994af1ae5493b 100644 --- a/net/ipv4/devinet.c +++ b/net/ipv4/devinet.c @@ -243,7 +243,7 @@ void in_dev_finish_destroy(struct in_device *idev) #ifdef NET_REFCNT_DEBUG pr_debug("%s: %p=%s\n", __func__, idev, dev ? dev->name : "NIL"); #endif - dev_put(dev); + dev_put_track(dev, &idev->dev_tracker); if (!idev->dead) pr_err("Freeing alive in_device %p\n", idev); else @@ -271,7 +271,7 @@ static struct in_device *inetdev_init(struct net_device *dev) if (IPV4_DEVCONF(in_dev->cnf, FORWARDING)) dev_disable_lro(dev); /* Reference in_dev->dev */ - dev_hold(dev); + dev_hold_track(dev, &in_dev->dev_tracker, GFP_KERNEL); /* Account for reference dev->ip_ptr (below) */ refcount_set(&in_dev->refcnt, 1); From patchwork Sun Dec 5 04:22:13 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 12656943 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id DB059C433EF for ; Sun, 5 Dec 2021 04:24:15 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231513AbhLEE1l (ORCPT ); Sat, 4 Dec 2021 23:27:41 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46288 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231503AbhLEE1k (ORCPT ); Sat, 4 Dec 2021 23:27:40 -0500 Received: from mail-pf1-x430.google.com (mail-pf1-x430.google.com [IPv6:2607:f8b0:4864:20::430]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 22BB9C061751 for ; Sat, 4 Dec 2021 20:24:14 -0800 (PST) Received: by mail-pf1-x430.google.com with SMTP id r130so6934302pfc.1 for ; Sat, 04 Dec 2021 20:24:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=fT2Qu6/ffgiG1NGeWHN8tdR6mwWo+LW/WTBHIOFKRSI=; b=QyB4sUkP4VkscYlk9jII3j+uHCE/NLb+0yWygCZzRZV/KpE97NjK4YOGaI94+aa5aB 6mvvNQif7/TV8pBjobrMAm85Khp6c4w/0OwTT9z8GI4QLv2GN4WiJ6/nJC4qcUNHW2kV XEPlRJgiBxMWOyxNOEjtVJQe9vRH18qxtKyByl0ah6YSrmi5K1Q/qUritzj+Z5sLH6ux eG3p8fWNcfDSmholXz7T2/96RSpRmkSkybxBPW9Anhb6e4zXLdpBXHw0GT/LpBNvKgnB gEpoCV9A55qW+EDnlB0ULQ6RpMsSOhmQYmxam3IRPOvL62NEC7CS6DLKXuF9EIS2JRzw okFA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=fT2Qu6/ffgiG1NGeWHN8tdR6mwWo+LW/WTBHIOFKRSI=; b=lil9cu7ixoCd6hX6dJcXqc2aIr7Lb9tnVTBPw0cxguBcJ64RDoXpLWBRjZ1zw9me69 NMt/EyLVIERhUNDz3Y/ULjSb7s7VBNKv4TZaWUj4WxCvrnsQnY7WTLi8AkQ57GRaN7ve gmrSsXcDthPxFUbwVddwaynJYQPJkCowfUCoOU3FguNixmTnNUaRVnsFVMPu+MAEitOD TENIhiIQXaNOVyRStdoz060CBPswZgfcs2rYSVAXHSE/1RXxEnE0sR5x4CD//3+iUmuc qJvatRyWatxIQALD/FrnWpFqMjS1CYPmmZbexwl4We2RfSaFTyYvxIwmdM0J6lOqDGnO 6Xlw== X-Gm-Message-State: AOAM530GZnccEDyUuIGkqaIwag2Y4GImJ9iKrTLMHgrGTNIIp0Ysg547 ocCPHjn22qTbJCrpL+WeVlfTg3BdA5I= X-Google-Smtp-Source: ABdhPJw4LbaQU+SXlqgr5ALr+0BOz4pclCBQoUjWRphPdYEqvLZ21xSz0ysJz06o/f+axegnbX65uQ== X-Received: by 2002:a62:b418:0:b0:4a0:3696:dec0 with SMTP id h24-20020a62b418000000b004a03696dec0mr28382591pfn.73.1638678253719; Sat, 04 Dec 2021 20:24:13 -0800 (PST) Received: from edumazet1.svl.corp.google.com ([2620:15c:2c4:201:ffa7:1c62:2d55:eac2]) by smtp.gmail.com with ESMTPSA id 17sm6027095pgw.1.2021.12.04.20.24.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 04 Dec 2021 20:24:13 -0800 (PST) From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski Cc: netdev , Eric Dumazet , Eric Dumazet , Dmitry Vyukov Subject: [PATCH v3 net-next 19/23] net/sched: add net device refcount tracker to struct Qdisc Date: Sat, 4 Dec 2021 20:22:13 -0800 Message-Id: <20211205042217.982127-20-eric.dumazet@gmail.com> X-Mailer: git-send-email 2.34.1.400.ga245620fadb-goog In-Reply-To: <20211205042217.982127-1-eric.dumazet@gmail.com> References: <20211205042217.982127-1-eric.dumazet@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Eric Dumazet Signed-off-by: Eric Dumazet --- include/net/sch_generic.h | 2 +- net/sched/sch_generic.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/include/net/sch_generic.h b/include/net/sch_generic.h index 22179b2fda72a0a1c2fddc07eeda40716a443a46..dbf202bb1a0edad582dbaefe72aac1632e219fbd 100644 --- a/include/net/sch_generic.h +++ b/include/net/sch_generic.h @@ -125,7 +125,7 @@ struct Qdisc { spinlock_t seqlock; struct rcu_head rcu; - + netdevice_tracker dev_tracker; /* private data */ long privdata[] ____cacheline_aligned; }; diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c index d33804d41c5c5a9047c808fd37ba65ae8875fc79..8c8fbf2e385679e46a1b7af47eeac059fb8468cc 100644 --- a/net/sched/sch_generic.c +++ b/net/sched/sch_generic.c @@ -973,7 +973,7 @@ struct Qdisc *qdisc_alloc(struct netdev_queue *dev_queue, sch->enqueue = ops->enqueue; sch->dequeue = ops->dequeue; sch->dev_queue = dev_queue; - dev_hold(dev); + dev_hold_track(dev, &sch->dev_tracker, GFP_KERNEL); refcount_set(&sch->refcnt, 1); return sch; @@ -1073,7 +1073,7 @@ static void qdisc_destroy(struct Qdisc *qdisc) ops->destroy(qdisc); module_put(ops->owner); - dev_put(qdisc_dev(qdisc)); + dev_put_track(qdisc_dev(qdisc), &qdisc->dev_tracker); trace_qdisc_destroy(qdisc); From patchwork Sun Dec 5 04:22:14 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 12656945 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1EB57C433F5 for ; Sun, 5 Dec 2021 04:24:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231453AbhLEE1w (ORCPT ); Sat, 4 Dec 2021 23:27:52 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46306 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231521AbhLEE1p (ORCPT ); Sat, 4 Dec 2021 23:27:45 -0500 Received: from mail-pj1-x102a.google.com (mail-pj1-x102a.google.com [IPv6:2607:f8b0:4864:20::102a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A8715C061751 for ; Sat, 4 Dec 2021 20:24:18 -0800 (PST) Received: by mail-pj1-x102a.google.com with SMTP id gf14-20020a17090ac7ce00b001a7a2a0b5c3so8215622pjb.5 for ; Sat, 04 Dec 2021 20:24:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=HdOA4T8Ph2icqtJHYWJuOL0AJpM8uaXoVDv/UEz0z6Q=; b=RtEo37Uxi2NIrkWW8UaPetSxLsqLX2+BPEciKvJHXz2NxPblImlVHWMGfu6HbNoqqF W0CegyHLZFo/sQ/PstA1DC9B2Ih80X5g0wZVBb47AC7oKwucCcqOUDfl6m0Vy4HPZ1EH aMCoRTBLY1MyyDMk3hcy98jR0QkqBAKyjCjIv3943ofp0olfvHJC0AKgGYpgPFONlD5K VE3KlcyywVn3ZJWY7mUdXgJMk4gzDuVbWQWtp4SY5GbZwb+Z+Mip7eS7mhYCwpzlgw8H kosfwAjHgw+m5++Tln6X8h2MU117c+oLAK5TjdZcMItw7oaA5wuK3HxJX5TSdXuZOA+a I3sQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=HdOA4T8Ph2icqtJHYWJuOL0AJpM8uaXoVDv/UEz0z6Q=; b=RB4xYlBU5fx5a9pmQMUO3MyFntIDRGwPpK+lgxT8B9ntaoCp+cD1wHKQHLrVU186u8 MOlCfCscY12WmSE3VJYa8WXdoc+LMXp3S5y9nPPn390L2JP+l4Rv0t3q3N+lZtBw7dsS in49svF92p0pJfLcyjAuD8ShycZxw09VtKsA9NmpFkk6zVJKLoXiltZ/0jqZxtAmHur7 1ZXs2AwA+SyIqxIvCwhQbqpP9hADxQj7BQwOuHtuP6uTN3w1v1uVjGolq87zQaqW7/tt yp0dCedv+mZcYRusjD1u+Umd/aRNSFumYQNyDmJYfUVxgFKjsiDL9l97NYLxHA+t+//V yxaw== X-Gm-Message-State: AOAM532nIwWclcB3WvKqGWqMudNqfUq6+tSmsd/3haZFFG9X9k4jp0bU fDxuQ4YlmYw0Nzoic5z14l4= X-Google-Smtp-Source: ABdhPJxBpwGMViLcUqdaLaLtO7OOwUpImzvCOulAV04kRfqDVtUAZkJCyPjJl0Wo9+XJxeSdKRLjUw== X-Received: by 2002:a17:90a:7e86:: with SMTP id j6mr27297618pjl.25.1638678258216; Sat, 04 Dec 2021 20:24:18 -0800 (PST) Received: from edumazet1.svl.corp.google.com ([2620:15c:2c4:201:ffa7:1c62:2d55:eac2]) by smtp.gmail.com with ESMTPSA id 17sm6027095pgw.1.2021.12.04.20.24.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 04 Dec 2021 20:24:17 -0800 (PST) From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski Cc: netdev , Eric Dumazet , Eric Dumazet , Dmitry Vyukov Subject: [PATCH v3 net-next 20/23] net: linkwatch: add net device refcount tracker Date: Sat, 4 Dec 2021 20:22:14 -0800 Message-Id: <20211205042217.982127-21-eric.dumazet@gmail.com> X-Mailer: git-send-email 2.34.1.400.ga245620fadb-goog In-Reply-To: <20211205042217.982127-1-eric.dumazet@gmail.com> References: <20211205042217.982127-1-eric.dumazet@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Eric Dumazet Add a netdevice_tracker inside struct net_device, to track the self reference when a device is in lweventlist. Signed-off-by: Eric Dumazet --- include/linux/netdevice.h | 2 ++ net/core/link_watch.c | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index afed3b10491b92da880a8cd13181ff041cc54673..cc17f26cd4ad59a4d1868951fee13f56ab73cd1a 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -1950,6 +1950,7 @@ enum netdev_ml_priv_type { * keep a list of interfaces to be deleted. * * @dev_addr_shadow: Copy of @dev_addr to catch direct writes. + * linkwatch_dev_tracker: refcount tracker used by linkwatch. * * FIXME: cleanup struct net_device such that network protocol info * moves out. @@ -2280,6 +2281,7 @@ struct net_device { struct bpf_xdp_entity xdp_state[__MAX_XDP_MODE]; u8 dev_addr_shadow[MAX_ADDR_LEN]; + netdevice_tracker linkwatch_dev_tracker; }; #define to_net_dev(d) container_of(d, struct net_device, dev) diff --git a/net/core/link_watch.c b/net/core/link_watch.c index 9599afd0862dabfca4560de6ec36606bf3742fd6..d7d089963b1da4142a0863715382aa81241625eb 100644 --- a/net/core/link_watch.c +++ b/net/core/link_watch.c @@ -109,7 +109,7 @@ static void linkwatch_add_event(struct net_device *dev) spin_lock_irqsave(&lweventlist_lock, flags); if (list_empty(&dev->link_watch_list)) { list_add_tail(&dev->link_watch_list, &lweventlist); - dev_hold(dev); + dev_hold_track(dev, &dev->linkwatch_dev_tracker, GFP_ATOMIC); } spin_unlock_irqrestore(&lweventlist_lock, flags); } @@ -166,7 +166,7 @@ static void linkwatch_do_dev(struct net_device *dev) netdev_state_change(dev); } - dev_put(dev); + dev_put_track(dev, &dev->linkwatch_dev_tracker); } static void __linkwatch_run_queue(int urgent_only) From patchwork Sun Dec 5 04:22:15 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 12656947 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 78B91C433EF for ; Sun, 5 Dec 2021 04:24:31 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231534AbhLEE14 (ORCPT ); Sat, 4 Dec 2021 23:27:56 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46324 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231480AbhLEE1t (ORCPT ); Sat, 4 Dec 2021 23:27:49 -0500 Received: from mail-pl1-x630.google.com (mail-pl1-x630.google.com [IPv6:2607:f8b0:4864:20::630]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C932CC061354 for ; Sat, 4 Dec 2021 20:24:22 -0800 (PST) Received: by mail-pl1-x630.google.com with SMTP id n8so4853605plf.4 for ; Sat, 04 Dec 2021 20:24:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=uOGDxUJKSk/sPCLCmeDkNNHP+gUxPNLx3WgXYaYfGGQ=; b=Jrd5TmRC8BzWFLvEbhZdU3W/ts6kfuT6pjcUOTxLSyFhmVpQICr/ytwBzZKqYQjBQZ qxlP17YEg6TyWeAS5KERG2O7QFD93CQg/TkVFtuPMbAn3Ktn2AnVcOAX5EPhS9a4JbTu 6dnd0ZJQZ0/jssXZf/DyqboV8O2PDKvIwHlanFOzsuwxZRE8fqdXoVO5te7REfuvTR86 1SYbHlkWFH3S8xLMCKmjHeabou/B7Llf8yw1M+SifKLfWHQ5iHlYEirx68UgSV6lRLz/ JmzjwU/KvTM/d9PyPHRQTkG7r513RzE2LAPVoqA+qVjyM4QfImmug7epM5mUS4/ju8U0 pYzw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=uOGDxUJKSk/sPCLCmeDkNNHP+gUxPNLx3WgXYaYfGGQ=; b=aR5F8ayCdpXAIoa9Mm926nfkhCJrAMPyMETsPdW0mc1pvpnL7De+2yYrFmYf+hLCw1 mAdsp+RaLkungCf3M1KhHveLjF6MIUhcTR88agItJxmp0yskfj89K8Vwg5T+XpcPyWwo PP+NCesfoGy9PNT3fMhnPnDjt6pYYC3obgMpELfrtyDUGE8ovXnlKbnOjLhmgo/eX07I N57TWjF4QCcShwTlK2Nr4G41pwZ5wA1R8a/qHnT3Bx0UZUUxdblNCe14jExYedCA562G YoM/mLY3AeVhctXNKdBk8SE1Iofi+GTOusFRYX8TnnQ+uH6YYkB/6lM5IDDqH6Mg8y8X NI0w== X-Gm-Message-State: AOAM532i1wW6babI6FrZUJPfPcljsCf5Hg7rIY3flYGBLPA8GuxQbvAi mD3ZB9o8r8GW9isJfF6XuXQ= X-Google-Smtp-Source: ABdhPJwTAdi7k6iB+ExZUGmuemv46xyc8tK9mmggW0Iuq9GaI2QPaK9LXQxsaERww9p09jB35QaVXw== X-Received: by 2002:a17:90a:ba13:: with SMTP id s19mr26796361pjr.62.1638678262405; Sat, 04 Dec 2021 20:24:22 -0800 (PST) Received: from edumazet1.svl.corp.google.com ([2620:15c:2c4:201:ffa7:1c62:2d55:eac2]) by smtp.gmail.com with ESMTPSA id 17sm6027095pgw.1.2021.12.04.20.24.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 04 Dec 2021 20:24:22 -0800 (PST) From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski Cc: netdev , Eric Dumazet , Eric Dumazet , Dmitry Vyukov Subject: [PATCH v3 net-next 21/23] net: failover: add net device refcount tracker Date: Sat, 4 Dec 2021 20:22:15 -0800 Message-Id: <20211205042217.982127-22-eric.dumazet@gmail.com> X-Mailer: git-send-email 2.34.1.400.ga245620fadb-goog In-Reply-To: <20211205042217.982127-1-eric.dumazet@gmail.com> References: <20211205042217.982127-1-eric.dumazet@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Eric Dumazet Signed-off-by: Eric Dumazet --- include/net/failover.h | 1 + net/core/failover.c | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/include/net/failover.h b/include/net/failover.h index bb15438f39c7d98fe7c5637f08c3cfb23e7e79d2..f2b42b4b9cd6c1fb6561e7deca3c549dcf04f20f 100644 --- a/include/net/failover.h +++ b/include/net/failover.h @@ -25,6 +25,7 @@ struct failover_ops { struct failover { struct list_head list; struct net_device __rcu *failover_dev; + netdevice_tracker dev_tracker; struct failover_ops __rcu *ops; }; diff --git a/net/core/failover.c b/net/core/failover.c index b5cd3c727285d7a1738118c246abce8d31dac08f..dcaa92a85ea23c54bc5ea68eb8a0f38fb31ff436 100644 --- a/net/core/failover.c +++ b/net/core/failover.c @@ -252,7 +252,7 @@ struct failover *failover_register(struct net_device *dev, return ERR_PTR(-ENOMEM); rcu_assign_pointer(failover->ops, ops); - dev_hold(dev); + dev_hold_track(dev, &failover->dev_tracker, GFP_KERNEL); dev->priv_flags |= IFF_FAILOVER; rcu_assign_pointer(failover->failover_dev, dev); @@ -285,7 +285,7 @@ void failover_unregister(struct failover *failover) failover_dev->name); failover_dev->priv_flags &= ~IFF_FAILOVER; - dev_put(failover_dev); + dev_put_track(failover_dev, &failover->dev_tracker); spin_lock(&failover_lock); list_del(&failover->list); From patchwork Sun Dec 5 04:22:16 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 12656949 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3BB92C433FE for ; Sun, 5 Dec 2021 04:24:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231539AbhLEE15 (ORCPT ); Sat, 4 Dec 2021 23:27:57 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46344 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231524AbhLEE1x (ORCPT ); Sat, 4 Dec 2021 23:27:53 -0500 Received: from mail-pj1-x1029.google.com (mail-pj1-x1029.google.com [IPv6:2607:f8b0:4864:20::1029]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 62681C061751 for ; Sat, 4 Dec 2021 20:24:27 -0800 (PST) Received: by mail-pj1-x1029.google.com with SMTP id n15-20020a17090a160f00b001a75089daa3so8253688pja.1 for ; Sat, 04 Dec 2021 20:24:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=04CJvPWRnuLLyYSLB8cktrrYL+pcIfcOxTaspl2YSxY=; b=ij1w6TgUV477VMwqSXFfX7kT52WDbRXBc/5RUux/M0n7SAQh98UK47gXcqEbtiAplB rvm+biqYuLFC3Q6N9BjYxt26+9Ls96PBpAmCX2gFzN0M3oDw5SFaaMy61qalfmhBz0N2 2QNHnU7DvdvxKA04QhSZ3PQue36YoCvsj/Of6X4ocwSqXfHq9GoHvFlxcLreoQtbEsQf nldAjwYoyWYxaDaABx7Jw/IQm2Sn3101/mGpWzCJcJT6kECkeeH7GAS+/qq/RiRSNaU4 tNGbJrtAlsaXmX7f7pnmlvJmv27V2rCZm6QSndlNpt2I8kVx/L6v2GZ578sL7ZlAQ2Px a1Dw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=04CJvPWRnuLLyYSLB8cktrrYL+pcIfcOxTaspl2YSxY=; b=G20Yb00qQHso5Zgn4jlRKGJFbPsCwTeqrd7fKhHf9UWOhawmQKEBNdKVxxqTzWH9i8 YC3aOz2Gr/NQkTGVWDWN9id+hJEmm06ZGAplR3xttBv+G35+iSWCanXZrBb4JU6GoGZh 0lr9OCOprD+tZe1bSbY59tpjBURHrBjRbvWJf1apDZTX7x9FZLpFfy151LvgIOAT2ASn IAxdTcWl8Lm9L0D5WWalPn59CMrImB+0eZb+Xmntn+oezgNzuOURke3Z9q09OWGKuMpb P3lQg/GzqdxUtvfdMbLUNcwc5wKksoIW9n41bBYM5PiyfFF3UkRYvu2k85/zy/EzfThA a06g== X-Gm-Message-State: AOAM531ISZ1L+HrMnNE5SmQ3zpHO5Cn4bmt+WVubsEqY0tZBN4uk1vOy ulGegXkfKfN/LzwjtRJP0Zo= X-Google-Smtp-Source: ABdhPJwZvgcMtjDb7SMJzIlzwuubTqd7smFWVi1aLrBOmUx/B8mrV3z9fJm1Cf3Q6Hek2BWhKOZnNA== X-Received: by 2002:a17:90b:3890:: with SMTP id mu16mr26842779pjb.186.1638678267003; Sat, 04 Dec 2021 20:24:27 -0800 (PST) Received: from edumazet1.svl.corp.google.com ([2620:15c:2c4:201:ffa7:1c62:2d55:eac2]) by smtp.gmail.com with ESMTPSA id 17sm6027095pgw.1.2021.12.04.20.24.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 04 Dec 2021 20:24:26 -0800 (PST) From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski Cc: netdev , Eric Dumazet , Eric Dumazet , Dmitry Vyukov Subject: [PATCH v3 net-next 22/23] ipmr, ip6mr: add net device refcount tracker to struct vif_device Date: Sat, 4 Dec 2021 20:22:16 -0800 Message-Id: <20211205042217.982127-23-eric.dumazet@gmail.com> X-Mailer: git-send-email 2.34.1.400.ga245620fadb-goog In-Reply-To: <20211205042217.982127-1-eric.dumazet@gmail.com> References: <20211205042217.982127-1-eric.dumazet@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Eric Dumazet Signed-off-by: Eric Dumazet --- include/linux/mroute_base.h | 2 ++ net/ipv4/ipmr.c | 3 ++- net/ipv6/ip6mr.c | 3 ++- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/include/linux/mroute_base.h b/include/linux/mroute_base.h index 8071148f29a6ec6a95df7e74bbfdeab5b5f6a644..e05ee9f001ffbf30f7b26ab5555e2db5cc058560 100644 --- a/include/linux/mroute_base.h +++ b/include/linux/mroute_base.h @@ -12,6 +12,7 @@ /** * struct vif_device - interface representor for multicast routing * @dev: network device being used + * @dev_tracker: refcount tracker for @dev reference * @bytes_in: statistic; bytes ingressing * @bytes_out: statistic; bytes egresing * @pkt_in: statistic; packets ingressing @@ -26,6 +27,7 @@ */ struct vif_device { struct net_device *dev; + netdevice_tracker dev_tracker; unsigned long bytes_in, bytes_out; unsigned long pkt_in, pkt_out; unsigned long rate_limit; diff --git a/net/ipv4/ipmr.c b/net/ipv4/ipmr.c index 2dda856ca260259e5626577e2b2993a6d9967aa6..4c7aca884fa9a35816008a5f3a1a58dd1baf6c06 100644 --- a/net/ipv4/ipmr.c +++ b/net/ipv4/ipmr.c @@ -696,7 +696,7 @@ static int vif_delete(struct mr_table *mrt, int vifi, int notify, if (v->flags & (VIFF_TUNNEL | VIFF_REGISTER) && !notify) unregister_netdevice_queue(dev, head); - dev_put(dev); + dev_put_track(dev, &v->dev_tracker); return 0; } @@ -896,6 +896,7 @@ static int vif_add(struct net *net, struct mr_table *mrt, /* And finish update writing critical data */ write_lock_bh(&mrt_lock); v->dev = dev; + netdev_tracker_alloc(dev, &v->dev_tracker, GFP_ATOMIC); if (v->flags & VIFF_REGISTER) mrt->mroute_reg_vif_num = vifi; if (vifi+1 > mrt->maxvif) diff --git a/net/ipv6/ip6mr.c b/net/ipv6/ip6mr.c index 36ed9efb88254003720549da52f39b11e9bf911f..a77a15a7f3dcb61c53a86e055b8a1507d9d591f8 100644 --- a/net/ipv6/ip6mr.c +++ b/net/ipv6/ip6mr.c @@ -746,7 +746,7 @@ static int mif6_delete(struct mr_table *mrt, int vifi, int notify, if ((v->flags & MIFF_REGISTER) && !notify) unregister_netdevice_queue(dev, head); - dev_put(dev); + dev_put_track(dev, &v->dev_tracker); return 0; } @@ -919,6 +919,7 @@ static int mif6_add(struct net *net, struct mr_table *mrt, /* And finish update writing critical data */ write_lock_bh(&mrt_lock); v->dev = dev; + netdev_tracker_alloc(dev, &v->dev_tracker, GFP_ATOMIC); #ifdef CONFIG_IPV6_PIMSM_V2 if (v->flags & MIFF_REGISTER) mrt->mroute_reg_vif_num = vifi; From patchwork Sun Dec 5 04:22:17 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 12656951 X-Patchwork-Delegate: kuba@kernel.org Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 72C60C433F5 for ; Sun, 5 Dec 2021 04:24:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231503AbhLEE2F (ORCPT ); Sat, 4 Dec 2021 23:28:05 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46370 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231547AbhLEE2B (ORCPT ); Sat, 4 Dec 2021 23:28:01 -0500 Received: from mail-pg1-x52f.google.com (mail-pg1-x52f.google.com [IPv6:2607:f8b0:4864:20::52f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B44C3C061751 for ; Sat, 4 Dec 2021 20:24:34 -0800 (PST) Received: by mail-pg1-x52f.google.com with SMTP id m15so7092066pgu.11 for ; Sat, 04 Dec 2021 20:24:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=0ueK711Sqj023gTBd/tQUmqv75JSIuZMHZ4ezZabzok=; b=SBT6l/3tFHmolDc3o0BxpXtBEsiB9t42vAt4dFEqVZsef3peqQ8KtKRPhjyP0oKvvK 2mFCQ2fvggCEpPUaglHRWS5X8t7FvtgMkF0XDeKsh93/V8ann2jeFL8AaWDZ+nc2Ciu0 wQzSBMbYfUE62q6aggFLsOt7j9uKSMwFobIasWHIFcZNOdz+eVd6QwF5je340RaNQfz1 T/he6f3EifOxVQHtRMxoWLvI3oPod5YOp0NLbe84hWWndCL8LOmdOm+WnPNUE0JqNY7M Ir8p+MaoCDUCaVgn/mRBjB27UuJFUQJnNcxLAIRMbOaZiQTfbeAsqwREJaG+lVNuzLFk DWzA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=0ueK711Sqj023gTBd/tQUmqv75JSIuZMHZ4ezZabzok=; b=17hisdRiCkbB1PUyaGoXQ0GIt1QQrB9ZjDrzzpgtQjKv6RQ3LlgAjU5ihzL8f1+En6 eS/6u+Nq/okcZTtlcmCW5wIFYPDPUNnVVGHu7zX9Io9buWiMLLJcslLtQBMHZ6eyG555 aVTbUPp6KHjt68UUZ75ZiSb5DbmGbNTfThaON62fW/y17WZ6ZvLO01Whs9McGnb6QkjO ZiTs267FW645Oz7ZUTTHowxhqAZZIQrgnZQEZSxiTy32SqlSLeHqcRNenLY736q619rQ DxjRtud1hfN3CE5/BiwwJP8w1j40tsinOVEJ0dxKcA9R6QXCJz+gW5QcIYBfucue3x0B 27TA== X-Gm-Message-State: AOAM5308nJJ+u9x4J4MNp+godEm0xVB7cPkyBe4mX6DktyOlDHBp0LBP eKvU72DiMZgd0M7A+/Gnv0xrycn4Z5Q= X-Google-Smtp-Source: ABdhPJzXadZKP4/0NAuzx7oYvY0Wcx7k0oDFxR9NoHS6zI0cEg84KoSkRYeMI7IFOttZk1c0M57jhA== X-Received: by 2002:a62:d44f:0:b0:4ad:999d:2306 with SMTP id u15-20020a62d44f000000b004ad999d2306mr176869pfl.19.1638678274288; Sat, 04 Dec 2021 20:24:34 -0800 (PST) Received: from edumazet1.svl.corp.google.com ([2620:15c:2c4:201:ffa7:1c62:2d55:eac2]) by smtp.gmail.com with ESMTPSA id 17sm6027095pgw.1.2021.12.04.20.24.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 04 Dec 2021 20:24:33 -0800 (PST) From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski Cc: netdev , Eric Dumazet , Eric Dumazet , Dmitry Vyukov Subject: [PATCH v3 net-next 23/23] netpoll: add net device refcount tracker to struct netpoll Date: Sat, 4 Dec 2021 20:22:17 -0800 Message-Id: <20211205042217.982127-24-eric.dumazet@gmail.com> X-Mailer: git-send-email 2.34.1.400.ga245620fadb-goog In-Reply-To: <20211205042217.982127-1-eric.dumazet@gmail.com> References: <20211205042217.982127-1-eric.dumazet@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org From: Eric Dumazet Signed-off-by: Eric Dumazet --- drivers/net/netconsole.c | 2 +- include/linux/netpoll.h | 1 + net/core/netpoll.c | 4 ++-- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c index ccecba908ded61370f8fc408ea53aa1ff305aca3..ab8cd555102083c2f0179898681489b987afe5b0 100644 --- a/drivers/net/netconsole.c +++ b/drivers/net/netconsole.c @@ -721,7 +721,7 @@ static int netconsole_netdev_event(struct notifier_block *this, __netpoll_cleanup(&nt->np); spin_lock_irqsave(&target_list_lock, flags); - dev_put(nt->np.dev); + dev_put_track(nt->np.dev, &nt->np.dev_tracker); nt->np.dev = NULL; nt->enabled = false; stopped = true; diff --git a/include/linux/netpoll.h b/include/linux/netpoll.h index e6a2d72e0dc7a6929d32a2e994f24719e073121e..bd19c4b91e31204e85d30884720b761116d5c036 100644 --- a/include/linux/netpoll.h +++ b/include/linux/netpoll.h @@ -24,6 +24,7 @@ union inet_addr { struct netpoll { struct net_device *dev; + netdevice_tracker dev_tracker; char dev_name[IFNAMSIZ]; const char *name; diff --git a/net/core/netpoll.c b/net/core/netpoll.c index edfc0f8011f88a7d46d69e94c6343489369fa78c..db724463e7cd5089d85d8f75a77ad83bbece82dc 100644 --- a/net/core/netpoll.c +++ b/net/core/netpoll.c @@ -776,7 +776,7 @@ int netpoll_setup(struct netpoll *np) err = __netpoll_setup(np, ndev); if (err) goto put; - + netdev_tracker_alloc(ndev, &np->dev_tracker, GFP_KERNEL); rtnl_unlock(); return 0; @@ -853,7 +853,7 @@ void netpoll_cleanup(struct netpoll *np) if (!np->dev) goto out; __netpoll_cleanup(np); - dev_put(np->dev); + dev_put_track(np->dev, &np->dev_tracker); np->dev = NULL; out: rtnl_unlock();