The NET_LOCK() is not always required, let solock() decided.

ok?

Index: miscfs/fifofs/fifo_vnops.c
===================================================================
RCS file: /cvs/src/sys/miscfs/fifofs/fifo_vnops.c,v
retrieving revision 1.54
diff -u -p -r1.54 fifo_vnops.c
--- miscfs/fifofs/fifo_vnops.c  26 Jun 2017 09:32:31 -0000      1.54
+++ miscfs/fifofs/fifo_vnops.c  26 Jun 2017 14:03:58 -0000
@@ -356,18 +356,22 @@ fifo_close(void *v)
 
        if (ap->a_fflag & FREAD) {
                if (--fip->fi_readers == 0) {
-                       NET_LOCK(s);
-                       socantsendmore(fip->fi_writesock);
-                       NET_UNLOCK(s);
+                       struct socket *wso = fip->fi_writesock;
+
+                       s = solock(wso);
+                       socantsendmore(wso);
+                       sounlock(s);
                }
        }
        if (ap->a_fflag & FWRITE) {
                if (--fip->fi_writers == 0) {
-                       NET_LOCK(s);
+                       struct socket *rso = fip->fi_readsock;
+
+                       s = solock(rso);
                        /* SS_ISDISCONNECTED will result in POLLHUP */
-                       fip->fi_readsock->so_state |= SS_ISDISCONNECTED;
-                       socantrcvmore(fip->fi_readsock);
-                       NET_UNLOCK(s);
+                       rso->so_state |= SS_ISDISCONNECTED;
+                       socantrcvmore(rso);
+                       sounlock(s);
                }
        }
        if (fip->fi_readers == 0 && fip->fi_writers == 0) {

Reply via email to