Module Name: src Committed By: yamt Date: Sat Nov 19 08:00:51 UTC 2022
Modified Files: src/sys/net: if_llatbl.c if_llatbl.h nd.c src/sys/netinet: in.c in_var.h Log Message: Make arp have its own mowner This helped me to debug mbuf leaks in arp. (if_arp.c rev. 1.298) To generate a diff of this commit: cvs rdiff -u -r1.34 -r1.35 src/sys/net/if_llatbl.c cvs rdiff -u -r1.18 -r1.19 src/sys/net/if_llatbl.h cvs rdiff -u -r1.4 -r1.5 src/sys/net/nd.c cvs rdiff -u -r1.245 -r1.246 src/sys/netinet/in.c cvs rdiff -u -r1.102 -r1.103 src/sys/netinet/in_var.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/net/if_llatbl.c diff -u src/sys/net/if_llatbl.c:1.34 src/sys/net/if_llatbl.c:1.35 --- src/sys/net/if_llatbl.c:1.34 Tue May 24 20:50:20 2022 +++ src/sys/net/if_llatbl.c Sat Nov 19 08:00:51 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: if_llatbl.c,v 1.34 2022/05/24 20:50:20 andvar Exp $ */ +/* $NetBSD: if_llatbl.c,v 1.35 2022/11/19 08:00:51 yamt Exp $ */ /* * Copyright (c) 2004 Luigi Rizzo, Alessandro Cerri. All rights reserved. * Copyright (c) 2004-2008 Qing Li. All rights reserved. @@ -540,6 +540,9 @@ lltable_allocate_htbl(uint32_t hsize) llt->llt_foreach_entry = htable_foreach_lle; llt->llt_free_tbl = htable_free_tbl; +#ifdef MBUFTRACE + llt->llt_mowner = NULL; +#endif return (llt); } Index: src/sys/net/if_llatbl.h diff -u src/sys/net/if_llatbl.h:1.18 src/sys/net/if_llatbl.h:1.19 --- src/sys/net/if_llatbl.h:1.18 Mon Sep 14 15:09:57 2020 +++ src/sys/net/if_llatbl.h Sat Nov 19 08:00:51 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: if_llatbl.h,v 1.18 2020/09/14 15:09:57 roy Exp $ */ +/* $NetBSD: if_llatbl.h,v 1.19 2022/11/19 08:00:51 yamt Exp $ */ /* * Copyright (c) 2004 Luigi Rizzo, Alessandro Cerri. All rights reserved. * Copyright (c) 2004-2008 Qing Li. All rights reserved. @@ -34,6 +34,7 @@ #if defined(_KERNEL_OPT) #include "opt_gateway.h" +#include "opt_mbuftrace.h" #endif #include <sys/rwlock.h> @@ -232,6 +233,9 @@ struct lltable { llt_unlink_entry_t *llt_unlink_entry; llt_fill_sa_entry_t *llt_fill_sa_entry; llt_free_tbl_t *llt_free_tbl; +#ifdef MBUFTRACE + struct mowner *llt_mowner; +#endif }; MALLOC_DECLARE(M_LLTABLE); Index: src/sys/net/nd.c diff -u src/sys/net/nd.c:1.4 src/sys/net/nd.c:1.5 --- src/sys/net/nd.c:1.4 Tue Sep 15 23:40:03 2020 +++ src/sys/net/nd.c Sat Nov 19 08:00:51 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: nd.c,v 1.4 2020/09/15 23:40:03 roy Exp $ */ +/* $NetBSD: nd.c,v 1.5 2022/11/19 08:00:51 yamt Exp $ */ /* * Copyright (c) 2020 The NetBSD Foundation, Inc. @@ -28,7 +28,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: nd.c,v 1.4 2020/09/15 23:40:03 roy Exp $"); +__KERNEL_RCSID(0, "$NetBSD: nd.c,v 1.5 2022/11/19 08:00:51 yamt Exp $"); #include <sys/callout.h> #include <sys/mbuf.h> @@ -359,6 +359,9 @@ nd_resolve(struct llentry *ln, const str ln->ln_state == ND_LLINFO_WAITDELETE) ln->ln_state = ND_LLINFO_INCOMPLETE; +#ifdef MBUFTRACE + m_claimm(m, ln->lle_tbl->llt_mowner); +#endif if (ln->ln_hold != NULL) { struct mbuf *m_hold; int i; Index: src/sys/netinet/in.c diff -u src/sys/netinet/in.c:1.245 src/sys/netinet/in.c:1.246 --- src/sys/netinet/in.c:1.245 Thu Nov 17 05:02:11 2022 +++ src/sys/netinet/in.c Sat Nov 19 08:00:51 2022 @@ -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 * #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)); } Index: src/sys/netinet/in_var.h diff -u src/sys/netinet/in_var.h:1.102 src/sys/netinet/in_var.h:1.103 --- src/sys/netinet/in_var.h:1.102 Mon Mar 8 22:01:18 2021 +++ src/sys/netinet/in_var.h Sat Nov 19 08:00:51 2022 @@ -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 *i struct in_ifinfo { struct lltable *ii_llt; /* ARP state */ struct in_ifsysctl *ii_selsrc; +#ifdef MBUFTRACE + struct mowner ii_mowner; +#endif }; #endif /* _KERNEL */