Kill unused global list of softc and protect the global array of
interface by the NET_LOCK().

ok?

Index: net/if_pflog.c
===================================================================
RCS file: /cvs/src/sys/net/if_pflog.c,v
retrieving revision 1.78
diff -u -p -r1.78 if_pflog.c
--- net/if_pflog.c      24 Jan 2017 10:08:30 -0000      1.78
+++ net/if_pflog.c      15 May 2017 13:19:39 -0000
@@ -83,7 +83,6 @@ int   pflog_clone_create(struct if_clone *
 int    pflog_clone_destroy(struct ifnet *);
 void   pflog_bpfcopy(const void *, void *, size_t);
 
-LIST_HEAD(, pflog_softc)       pflogif_list;
 struct if_clone        pflog_cloner =
     IF_CLONE_INITIALIZER("pflog", pflog_clone_create, pflog_clone_destroy);
 
@@ -94,7 +93,6 @@ struct mbuf    *pflog_mhdr = NULL, *pflog_
 void
 pflogattach(int npflog)
 {
-       LIST_INIT(&pflogif_list);
        if (pflog_mhdr == NULL)
                if ((pflog_mhdr = m_get(M_DONTWAIT, MT_HEADER)) == NULL)
                        panic("pflogattach: no mbuf");
@@ -110,6 +108,8 @@ pflogifs_resize(size_t n)
        struct ifnet    **p;
        int               i;
 
+       NET_ASSERT_LOCKED();
+
        if (n > SIZE_MAX / sizeof(*p))
                return (EINVAL);
        if (n == 0)
@@ -161,14 +161,13 @@ pflog_clone_create(struct if_clone *ifc,
        bpfattach(&pflogif->sc_if.if_bpf, ifp, DLT_PFLOG, PFLOG_HDRLEN);
 #endif
 
-       s = splnet();
-       LIST_INSERT_HEAD(&pflogif_list, pflogif, sc_list);
+       NET_LOCK(s);
        if (unit + 1 > npflogifs && pflogifs_resize(unit + 1) != 0) {
-               splx(s);
+               NET_UNLOCK(s);
                return (ENOMEM);
        }
        pflogifs[unit] = ifp;
-       splx(s);
+       NET_UNLOCK(s);
 
        return (0);
 }
@@ -179,15 +178,13 @@ pflog_clone_destroy(struct ifnet *ifp)
        struct pflog_softc      *pflogif = ifp->if_softc;
        int                      s, i;
 
-       s = splnet();
+       NET_LOCK(s);
        pflogifs[pflogif->sc_unit] = NULL;
-       LIST_REMOVE(pflogif, sc_list);
-
        for (i = npflogifs; i > 0 && pflogifs[i - 1] == NULL; i--)
                ; /* nothing */
        if (i < npflogifs)
                pflogifs_resize(i);     /* error harmless here */
-       splx(s);
+       NET_UNLOCK(s);
 
        if_detach(ifp);
        free(pflogif, M_DEVBUF, 0);
Index: net/if_pflog.h
===================================================================
RCS file: /cvs/src/sys/net/if_pflog.h,v
retrieving revision 1.26
diff -u -p -r1.26 if_pflog.h
--- net/if_pflog.h      12 Feb 2015 01:24:10 -0000      1.26
+++ net/if_pflog.h      15 May 2017 13:21:13 -0000
@@ -64,7 +64,6 @@ struct pfloghdr {
 struct pflog_softc {
        struct ifnet            sc_if;          /* the interface */
        int                     sc_unit;
-       LIST_ENTRY(pflog_softc) sc_list;
 };
 
 #if NPFLOG > 0

Reply via email to