aboutsummaryrefslogtreecommitdiff
path: root/sys/netinet
diff options
context:
space:
mode:
authorMark Johnston <markj@FreeBSD.org>2021-11-24 18:20:09 +0000
committerMark Johnston <markj@FreeBSD.org>2021-11-24 18:31:16 +0000
commit44775b163bfa902ea96658343e852062e2e67a8e (patch)
tree5d72f873ce281a370d0fc618eccea7f139ffdbf1 /sys/netinet
parent0d9c3423f59bb305301f5a5bc7c8f5daf7b7aa52 (diff)
downloadsrc-44775b163bfa902ea96658343e852062e2e67a8e.tar.gz
src-44775b163bfa902ea96658343e852062e2e67a8e.zip
netinet: Remove unneeded mb_unmapped_to_ext() calls
in_cksum_skip() now handles unmapped mbufs on platforms where they're permitted. Reviewed by: glebius, jhb MFC after: 1 week Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D33097
Diffstat (limited to 'sys/netinet')
-rw-r--r--sys/netinet/ip_divert.c6
-rw-r--r--sys/netinet/ip_output.c21
2 files changed, 6 insertions, 21 deletions
diff --git a/sys/netinet/ip_divert.c b/sys/netinet/ip_divert.c
index fb4eba220703..265fc1918d82 100644
--- a/sys/netinet/ip_divert.c
+++ b/sys/netinet/ip_divert.c
@@ -212,9 +212,6 @@ divert_packet(struct mbuf *m, bool incoming)
/* Delayed checksums are currently not compatible with divert. */
if (m->m_pkthdr.csum_flags & CSUM_DELAY_DATA) {
- m = mb_unmapped_to_ext(m);
- if (m == NULL)
- return;
in_delayed_cksum(m);
m->m_pkthdr.csum_flags &= ~CSUM_DELAY_DATA;
}
@@ -226,9 +223,6 @@ divert_packet(struct mbuf *m, bool incoming)
#endif
#ifdef INET6
if (m->m_pkthdr.csum_flags & CSUM_DELAY_DATA_IPV6) {
- m = mb_unmapped_to_ext(m);
- if (m == NULL)
- return;
in6_delayed_cksum(m, m->m_pkthdr.len -
sizeof(struct ip6_hdr), sizeof(struct ip6_hdr));
m->m_pkthdr.csum_flags &= ~CSUM_DELAY_DATA_IPV6;
diff --git a/sys/netinet/ip_output.c b/sys/netinet/ip_output.c
index cfa6b1919a06..e30339f8c4aa 100644
--- a/sys/netinet/ip_output.c
+++ b/sys/netinet/ip_output.c
@@ -733,23 +733,20 @@ sendit:
}
}
- m->m_pkthdr.csum_flags |= CSUM_IP;
- if (m->m_pkthdr.csum_flags & CSUM_DELAY_DATA & ~ifp->if_hwassist) {
+ /* Ensure the packet data is mapped if the interface requires it. */
+ if ((ifp->if_capenable & IFCAP_MEXTPG) == 0) {
m = mb_unmapped_to_ext(m);
if (m == NULL) {
IPSTAT_INC(ips_odropped);
error = ENOBUFS;
goto bad;
}
+ }
+
+ m->m_pkthdr.csum_flags |= CSUM_IP;
+ if (m->m_pkthdr.csum_flags & CSUM_DELAY_DATA & ~ifp->if_hwassist) {
in_delayed_cksum(m);
m->m_pkthdr.csum_flags &= ~CSUM_DELAY_DATA;
- } else if ((ifp->if_capenable & IFCAP_MEXTPG) == 0) {
- m = mb_unmapped_to_ext(m);
- if (m == NULL) {
- IPSTAT_INC(ips_odropped);
- error = ENOBUFS;
- goto bad;
- }
}
#if defined(SCTP) || defined(SCTP_SUPPORT)
if (m->m_pkthdr.csum_flags & CSUM_SCTP & ~ifp->if_hwassist) {
@@ -894,12 +891,6 @@ ip_fragment(struct ip *ip, struct mbuf **m_frag, int mtu,
* fragmented packets, then do it here.
*/
if (m0->m_pkthdr.csum_flags & CSUM_DELAY_DATA) {
- m0 = mb_unmapped_to_ext(m0);
- if (m0 == NULL) {
- error = ENOBUFS;
- IPSTAT_INC(ips_odropped);
- goto done;
- }
in_delayed_cksum(m0);
m0->m_pkthdr.csum_flags &= ~CSUM_DELAY_DATA;
}