Same logic and argument as for the parent *S ioctl, might as well have
committed them together:
    ---
    Remove net lock from DIOCGETQUEUES

    Both ticket and number of queues stem from the pf_queues_active list which
    is effectively static to pf_ioctl.c and fully protected by the pf lock.
    ---

OK?


Index: pf_ioctl.c
===================================================================
RCS file: /cvs/src/sys/net/pf_ioctl.c,v
retrieving revision 1.401
diff -u -p -U5 -r1.401 pf_ioctl.c
--- pf_ioctl.c  28 Apr 2023 14:08:38 -0000      1.401
+++ pf_ioctl.c  28 Apr 2023 20:52:54 -0000
@@ -1229,32 +1229,28 @@ pfioctl(dev_t dev, u_long cmd, caddr_t a
        case DIOCGETQUEUE: {
                struct pfioc_queue      *pq = (struct pfioc_queue *)addr;
                struct pf_queuespec     *qs;
                u_int32_t                nr = 0;
 
-               NET_LOCK();
                PF_LOCK();
                if (pq->ticket != pf_main_ruleset.rules.active.version) {
                        error = EBUSY;
                        PF_UNLOCK();
-                       NET_UNLOCK();
                        goto fail;
                }
 
                /* save state to not run over them all each time? */
                qs = TAILQ_FIRST(pf_queues_active);
                while ((qs != NULL) && (nr++ < pq->nr))
                        qs = TAILQ_NEXT(qs, entries);
                if (qs == NULL) {
                        error = EBUSY;
                        PF_UNLOCK();
-                       NET_UNLOCK();
                        goto fail;
                }
                memcpy(&pq->queue, qs, sizeof(pq->queue));
                PF_UNLOCK();
-               NET_UNLOCK();
                break;
        }
 
        case DIOCGETQSTATS: {
                struct pfioc_qstats     *pq = (struct pfioc_qstats *)addr;

Reply via email to