in6_mcast: Acquire ref to ifp and exit epoch earlier in sysctl

This patch reduces the number of witness warnings during ifmcstat(8) calls.

Reviewed by: glebius, zlei
Differential Revision: https://reviews.freebsd.org/D56052
This commit is contained in:
Pouria Mousavizadeh Tehrani
2026-03-23 22:08:46 +03:30
parent e6a77f81d1
commit cbac897a7b
+4 -4
View File
@@ -2806,9 +2806,9 @@ sysctl_ip6_mcast_filters(SYSCTL_HANDLER_ARGS)
ifindex = name[0];
NET_EPOCH_ENTER(et);
ifp = ifnet_byindex(ifindex);
ifp = ifnet_byindex_ref(ifindex);
NET_EPOCH_EXIT(et);
if (ifp == NULL) {
NET_EPOCH_EXIT(et);
CTR2(KTR_MLD, "%s: no ifp for ifindex %u",
__func__, ifindex);
return (ENOENT);
@@ -2821,7 +2821,7 @@ sysctl_ip6_mcast_filters(SYSCTL_HANDLER_ARGS)
retval = sysctl_wire_old_buffer(req,
sizeof(uint32_t) + (in6_mcast_maxgrpsrc * sizeof(struct in6_addr)));
if (retval) {
NET_EPOCH_EXIT(et);
if_rele(ifp);
return (retval);
}
@@ -2856,7 +2856,7 @@ sysctl_ip6_mcast_filters(SYSCTL_HANDLER_ARGS)
}
IN6_MULTI_LIST_UNLOCK();
IN6_MULTI_UNLOCK();
NET_EPOCH_EXIT(et);
if_rele(ifp);
return (retval);
}