Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/netinet inet: pull m_get_rcvif_psref out of ip_input for...



details:   https://anonhg.NetBSD.org/src/rev/203ab9044884
branches:  trunk
changeset: 943167:203ab9044884
user:      ozaki-r <ozaki-r%NetBSD.org@localhost>
date:      Fri Aug 28 06:30:08 2020 +0000

description:
inet: pull m_get_rcvif_psref out of ip_input for simplicity

Same as ip6_input.

diffstat:

 sys/netinet/ip_input.c |  34 ++++++++++++++++------------------
 1 files changed, 16 insertions(+), 18 deletions(-)

diffs (114 lines):

diff -r 7a5087580f39 -r 203ab9044884 sys/netinet/ip_input.c
--- a/sys/netinet/ip_input.c    Fri Aug 28 06:28:58 2020 +0000
+++ b/sys/netinet/ip_input.c    Fri Aug 28 06:30:08 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: ip_input.c,v 1.395 2020/08/28 06:20:44 ozaki-r Exp $   */
+/*     $NetBSD: ip_input.c,v 1.396 2020/08/28 06:30:08 ozaki-r Exp $   */
 
 /*
  * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -91,7 +91,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ip_input.c,v 1.395 2020/08/28 06:20:44 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ip_input.c,v 1.396 2020/08/28 06:30:08 ozaki-r Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -243,7 +243,7 @@
 #endif
 
 static void            ipintr(void *);
-static void            ip_input(struct mbuf *);
+static void            ip_input(struct mbuf *, struct ifnet *);
 static void            ip_forward(struct mbuf *, int, struct ifnet *);
 static bool            ip_dooptions(struct mbuf *);
 static struct in_ifaddr *ip_rtaddr(struct in_addr, struct psref *);
@@ -399,7 +399,18 @@
 
        SOFTNET_KERNEL_LOCK_UNLESS_NET_MPSAFE();
        while ((m = pktq_dequeue(ip_pktq)) != NULL) {
-               ip_input(m);
+               struct ifnet *ifp;
+               struct psref psref;
+
+               ifp = m_get_rcvif_psref(m, &psref);
+               if (__predict_false(ifp == NULL)) {
+                       m_freem(m);
+                       continue;
+               }
+
+               ip_input(m, ifp);
+
+               m_put_rcvif_psref(ifp, &psref);
        }
        SOFTNET_KERNEL_UNLOCK_UNLESS_NET_MPSAFE();
 }
@@ -409,15 +420,13 @@
  * try to reassemble.  Process options.  Pass to next level.
  */
 static void
-ip_input(struct mbuf *m)
+ip_input(struct mbuf *m, struct ifnet *ifp)
 {
        struct ip *ip = NULL;
        struct in_ifaddr *ia = NULL;
        int hlen = 0, len;
        int downmatch;
        int srcrt = 0;
-       ifnet_t *ifp;
-       struct psref psref;
        int s;
 
        KASSERTMSG(cpu_softintr_p(), "ip_input: not in the software "
@@ -426,10 +435,6 @@
        MCLAIM(m, &ip_rx_mowner);
        KASSERT((m->m_flags & M_PKTHDR) != 0);
 
-       ifp = m_get_rcvif_psref(m, &psref);
-       if (__predict_false(ifp == NULL))
-               goto out;
-
        /*
         * If no IP addresses have been set yet but the interfaces
         * are receiving, can't do anything with incoming packets yet.
@@ -721,7 +726,6 @@
         * Not for us; forward if possible and desirable.
         */
        if (ipforwarding == 0) {
-               m_put_rcvif_psref(ifp, &psref);
                IP_STATINC(IP_STAT_CANTFORWARD);
                m_freem(m);
        } else {
@@ -732,7 +736,6 @@
                 * forwarding loop till TTL goes to 0.
                 */
                if (downmatch) {
-                       m_put_rcvif_psref(ifp, &psref);
                        icmp_error(m, ICMP_UNREACH, ICMP_UNREACH_HOST, 0, 0);
                        IP_STATINC(IP_STAT_CANTFORWARD);
                        return;
@@ -747,14 +750,10 @@
                }
 #endif
                ip_forward(m, srcrt, ifp);
-               m_put_rcvif_psref(ifp, &psref);
        }
        return;
 
 ours:
-       m_put_rcvif_psref(ifp, &psref);
-       ifp = NULL;
-
        /*
         * If offset or IP_MF are set, must reassemble.
         */
@@ -819,7 +818,6 @@
        return;
 
 out:
-       m_put_rcvif_psref(ifp, &psref);
        if (m != NULL)
                m_freem(m);
 }



Home | Main Index | Thread Index | Old Index