diff options
| author | yamt <yamt@NetBSD.org> | 2022-11-19 08:00:51 +0000 |
|---|---|---|
| committer | yamt <yamt@NetBSD.org> | 2022-11-19 08:00:51 +0000 |
| commit | f8cb308b9e9338977143ba0158d7b10d180809a4 (patch) | |
| tree | 00c2dd6bfb60295e528aa82864b5958f0472127b /sys/netinet | |
| parent | 53f1c44ab30704504780903415346b4f74ac531a (diff) | |
Make arp have its own mowner
This helped me to debug mbuf leaks in arp.
(if_arp.c rev. 1.298)
Diffstat (limited to 'sys/netinet')
| -rw-r--r-- | sys/netinet/in.c | 17 | ||||
| -rw-r--r-- | sys/netinet/in_var.h | 5 |
2 files changed, 17 insertions, 5 deletions
diff --git a/sys/netinet/in.c b/sys/netinet/in.c index a7e4e5c2ec7..533cd1f4fd3 100644 --- a/sys/netinet/in.c +++ b/sys/netinet/in.c @@ -1,4 +1,4 @@ -/* $NetBSD: in.c,v 1.245 2022/11/17 05:02:11 knakahara Exp $ */ +/* $NetBSD: in.c,v 1.246 2022/11/19 08:00:51 yamt Exp $ */ /* * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. @@ -91,7 +91,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: in.c,v 1.245 2022/11/17 05:02:11 knakahara Exp $"); +__KERNEL_RCSID(0, "$NetBSD: in.c,v 1.246 2022/11/19 08:00:51 yamt Exp $"); #include "arp.h" @@ -2415,7 +2415,7 @@ in_sysctl_init(struct sysctllog **clog) #if NARP > 0 static struct lltable * -in_lltattach(struct ifnet *ifp) +in_lltattach(struct ifnet *ifp, struct in_ifinfo *ii) { struct lltable *llt; @@ -2431,6 +2431,12 @@ in_lltattach(struct ifnet *ifp) llt->llt_fill_sa_entry = in_lltable_fill_sa_entry; llt->llt_free_entry = in_lltable_free_entry; llt->llt_match_prefix = in_lltable_match_prefix; +#ifdef MBUFTRACE + struct mowner *mowner = &ii->ii_mowner; + mowner_init_owner(mowner, ifp->if_xname, "arp"); + MOWNER_ATTACH(mowner); + llt->llt_mowner = mowner; +#endif lltable_link(llt); return (llt); @@ -2446,7 +2452,7 @@ in_domifattach(struct ifnet *ifp) ii = kmem_zalloc(sizeof(struct in_ifinfo), KM_SLEEP); #if NARP > 0 - ii->ii_llt = in_lltattach(ifp); + ii->ii_llt = in_lltattach(ifp, ii); #endif #ifdef IPSELSRC @@ -2467,6 +2473,9 @@ in_domifdetach(struct ifnet *ifp, void *aux) #endif #if NARP > 0 lltable_free(ii->ii_llt); +#ifdef MBUFTRACE + MOWNER_DETACH(&ii->ii_mowner); +#endif #endif kmem_free(ii, sizeof(struct in_ifinfo)); } diff --git a/sys/netinet/in_var.h b/sys/netinet/in_var.h index 1e4a149a5e6..924ba898f21 100644 --- a/sys/netinet/in_var.h +++ b/sys/netinet/in_var.h @@ -1,4 +1,4 @@ -/* $NetBSD: in_var.h,v 1.102 2021/03/08 22:01:18 christos Exp $ */ +/* $NetBSD: in_var.h,v 1.103 2022/11/19 08:00:51 yamt Exp $ */ /*- * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -357,6 +357,9 @@ in_get_ia_from_ifp_psref(struct ifnet *ifp, struct psref *psref) struct in_ifinfo { struct lltable *ii_llt; /* ARP state */ struct in_ifsysctl *ii_selsrc; +#ifdef MBUFTRACE + struct mowner ii_mowner; +#endif }; #endif /* _KERNEL */ |
