On Thu, Aug 31, 2023 at 04:25:37PM +0300, Vitaliy Makkoveev wrote: > > NET_UNLOCK() and NET_LOCK_SHARED() just after each other does not > > make much sense. Just keep exclusive netlock for the few lines. > > Agreed. Both the cases perform route sockets walkthrough and message > transmission. No sense for lockless error path only.
OK bluhm@ > Index: sys/dev/usb/if_umb.c > =================================================================== > RCS file: /cvs/src/sys/dev/usb/if_umb.c,v > retrieving revision 1.54 > diff -u -p -r1.54 if_umb.c > --- sys/dev/usb/if_umb.c 29 Aug 2023 23:28:38 -0000 1.54 > +++ sys/dev/usb/if_umb.c 31 Aug 2023 13:20:21 -0000 > @@ -1851,7 +1851,6 @@ umb_add_inet_config(struct umb_softc *sc > info.rti_info[RTAX_GATEWAY] = sintosa(&ifra.ifra_dstaddr); > > rv = rtrequest(RTM_ADD, &info, 0, &rt, ifp->if_rdomain); > - NET_UNLOCK(); > if (rv) { > printf("%s: unable to set IPv4 default route, " > "error %d\n", DEVNAM(ifp->if_softc), rv); > @@ -1862,6 +1861,7 @@ umb_add_inet_config(struct umb_softc *sc > rtm_send(rt, RTM_ADD, rv, ifp->if_rdomain); > rtfree(rt); > } > + NET_UNLOCK(); > > if (ifp->if_flags & IFF_DEBUG) { > char str[3][INET_ADDRSTRLEN]; > @@ -1932,7 +1932,6 @@ umb_add_inet6_config(struct umb_softc *s > info.rti_info[RTAX_GATEWAY] = sin6tosa(&ifra.ifra_dstaddr); > > rv = rtrequest(RTM_ADD, &info, 0, &rt, ifp->if_rdomain); > - NET_UNLOCK(); > if (rv) { > printf("%s: unable to set IPv6 default route, " > "error %d\n", DEVNAM(ifp->if_softc), rv); > @@ -1943,6 +1942,7 @@ umb_add_inet6_config(struct umb_softc *s > rtm_send(rt, RTM_ADD, rv, ifp->if_rdomain); > rtfree(rt); > } > + NET_UNLOCK(); > > if (ifp->if_flags & IFF_DEBUG) { > char str[3][INET6_ADDRSTRLEN];