sysctl_mq() messes with 'struct mbuf_queue' internals, so keep it in
kern/uipc_mbuf.c with the rest of the mq* functions.

ok?

Index: net/if.c
===================================================================
RCS file: /cvs/src/sys/net/if.c,v
retrieving revision 1.514
diff -u -p -r1.514 if.c
--- net/if.c    11 Oct 2017 07:57:27 -0000      1.514
+++ net/if.c    11 Oct 2017 12:56:18 -0000
@@ -82,7 +82,6 @@
 #include <sys/kernel.h>
 #include <sys/ioctl.h>
 #include <sys/domain.h>
-#include <sys/sysctl.h>
 #include <sys/task.h>
 #include <sys/atomic.h>
 #include <sys/proc.h>
@@ -2654,38 +2653,6 @@ ifpromisc(struct ifnet *ifp, int pswitch
        }
        ifr.ifr_flags = ifp->if_flags;
        return ((*ifp->if_ioctl)(ifp, SIOCSIFFLAGS, (caddr_t)&ifr));
-}
-
-/* XXX move to kern/uipc_mbuf.c */
-int
-sysctl_mq(int *name, u_int namelen, void *oldp, size_t *oldlenp,
-    void *newp, size_t newlen, struct mbuf_queue *mq)
-{
-       unsigned int maxlen;
-       int error;
-
-       /* All sysctl names at this level are terminal. */
-       if (namelen != 1)
-               return (ENOTDIR);
-
-       switch (name[0]) {
-       case IFQCTL_LEN:
-               return (sysctl_rdint(oldp, oldlenp, newp, mq_len(mq)));
-       case IFQCTL_MAXLEN:
-               maxlen = mq->mq_maxlen;
-               error = sysctl_int(oldp, oldlenp, newp, newlen, &maxlen);
-               if (!error && maxlen != mq->mq_maxlen) {
-                       mtx_enter(&mq->mq_mtx);
-                       mq->mq_maxlen = maxlen;
-                       mtx_leave(&mq->mq_mtx);
-               }
-               return (error);
-       case IFQCTL_DROPS:
-               return (sysctl_rdint(oldp, oldlenp, newp, mq_drops(mq)));
-       default:
-               return (EOPNOTSUPP);
-       }
-       /* NOTREACHED */
 }
 
 void
Index: net/if_var.h
===================================================================
RCS file: /cvs/src/sys/net/if_var.h,v
retrieving revision 1.81
diff -u -p -r1.81 if_var.h
--- net/if_var.h        8 May 2017 08:46:39 -0000       1.81
+++ net/if_var.h        11 Oct 2017 12:56:18 -0000
@@ -324,9 +324,6 @@ int if_clone_destroy(const char *);
 struct if_clone *
        if_clone_lookup(const char *, int *);
 
-int     sysctl_mq(int *, u_int, void *, size_t *, void *, size_t,
-           struct mbuf_queue *);
-
 void   ifa_add(struct ifnet *, struct ifaddr *);
 void   ifa_del(struct ifnet *, struct ifaddr *);
 void   ifa_update_broadaddr(struct ifnet *, struct ifaddr *,
Index: kern/uipc_mbuf.c
===================================================================
RCS file: /cvs/src/sys/kern/uipc_mbuf.c,v
retrieving revision 1.249
diff -u -p -r1.249 uipc_mbuf.c
--- kern/uipc_mbuf.c    15 Sep 2017 18:13:05 -0000      1.249
+++ kern/uipc_mbuf.c    11 Oct 2017 12:56:19 -0000
@@ -84,6 +84,7 @@
 #include <sys/protosw.h>
 #include <sys/pool.h>
 #include <sys/percpu.h>
+#include <sys/sysctl.h>
 
 #include <sys/socket.h>
 #include <sys/socketvar.h>
@@ -1648,4 +1649,35 @@ mq_purge(struct mbuf_queue *mq)
        mq_delist(mq, &ml);
 
        return (ml_purge(&ml));
+}
+
+int
+sysctl_mq(int *name, u_int namelen, void *oldp, size_t *oldlenp,
+    void *newp, size_t newlen, struct mbuf_queue *mq)
+{
+       unsigned int maxlen;
+       int error;
+
+       /* All sysctl names at this level are terminal. */
+       if (namelen != 1)
+               return (ENOTDIR);
+
+       switch (name[0]) {
+       case IFQCTL_LEN:
+               return (sysctl_rdint(oldp, oldlenp, newp, mq_len(mq)));
+       case IFQCTL_MAXLEN:
+               maxlen = mq->mq_maxlen;
+               error = sysctl_int(oldp, oldlenp, newp, newlen, &maxlen);
+               if (!error && maxlen != mq->mq_maxlen) {
+                       mtx_enter(&mq->mq_mtx);
+                       mq->mq_maxlen = maxlen;
+                       mtx_leave(&mq->mq_mtx);
+               }
+               return (error);
+       case IFQCTL_DROPS:
+               return (sysctl_rdint(oldp, oldlenp, newp, mq_drops(mq)));
+       default:
+               return (EOPNOTSUPP);
+       }
+       /* NOTREACHED */
 }
Index: sys/sysctl.h
===================================================================
RCS file: /cvs/src/sys/sys/sysctl.h,v
retrieving revision 1.174
diff -u -p -r1.174 sysctl.h
--- sys/sysctl.h        14 Jun 2017 03:00:40 -0000      1.174
+++ sys/sysctl.h        11 Oct 2017 12:56:21 -0000
@@ -936,6 +936,9 @@ int sysctl_rdstruct(void *, size_t *, vo
 int sysctl_struct(void *, size_t *, void *, size_t, void *, size_t);
 int sysctl_file(int *, u_int, char *, size_t *, struct proc *);
 int sysctl_doproc(int *, u_int, char *, size_t *);
+struct mbuf_queue;
+int sysctl_mq(int *, u_int, void *, size_t *, void *, size_t,
+    struct mbuf_queue *);
 struct rtentry;
 struct walkarg;
 int sysctl_dumpentry(struct rtentry *, void *, unsigned int);

Reply via email to