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];