Re: Recursive splsoftnet() in in6_ifattach_linklocal()

2016-12-29 Thread Alexander Bluhm
On Thu, Dec 29, 2016 at 09:15:54AM +0100, Martin Pieuchot wrote:
> Get rid of them, ok?

OK bluhm@

> 
> Index: netinet6/in6_ifattach.c
> ===
> RCS file: /cvs/src/sys/netinet6/in6_ifattach.c,v
> retrieving revision 1.100
> diff -u -p -r1.100 in6_ifattach.c
> --- netinet6/in6_ifattach.c   30 Jun 2016 08:19:03 -  1.100
> +++ netinet6/in6_ifattach.c   20 Dec 2016 10:58:33 -
> @@ -294,7 +294,9 @@ in6_ifattach_linklocal(struct ifnet *ifp
>  {
>   struct in6_aliasreq ifra;
>   struct in6_ifaddr *ia6;
> - int s, error, flags;
> + int error, flags;
> +
> + splsoftassert(IPL_SOFTNET);
>  
>   /*
>* configure link-local address.
> @@ -338,9 +340,7 @@ in6_ifattach_linklocal(struct ifnet *ifp
>   if (in6if_do_dad(ifp) && ((ifp->if_flags & IFF_POINTOPOINT) == 0))
>   ifra.ifra_flags |= IN6_IFF_TENTATIVE;
>  
> - s = splsoftnet();
>   error = in6_update_ifa(ifp, , in6ifa_ifpforlinklocal(ifp, 0));
> - splx(s);
>   if (error != 0)
>   return (error);
>  
> @@ -359,15 +359,12 @@ in6_ifattach_linklocal(struct ifnet *ifp
>   if ((ifp->if_flags & IFF_POINTOPOINT) == 0)
>   flags |= RTF_CLONING;
>  
> - s = splsoftnet();
>   error = rt_ifa_add(>ia_ifa, flags, ia6->ia_ifa.ifa_addr);
>   if (error) {
>   in6_purgeaddr(>ia_ifa);
> - splx(s);
>   return (error);
>   }
>   dohooks(ifp->if_addrhooks, 0);
> - splx(s);
>  
>   return (0);
>  }



Recursive splsoftnet() in in6_ifattach_linklocal()

2016-12-29 Thread Martin Pieuchot
Get rid of them, ok?

Index: netinet6/in6_ifattach.c
===
RCS file: /cvs/src/sys/netinet6/in6_ifattach.c,v
retrieving revision 1.100
diff -u -p -r1.100 in6_ifattach.c
--- netinet6/in6_ifattach.c 30 Jun 2016 08:19:03 -  1.100
+++ netinet6/in6_ifattach.c 20 Dec 2016 10:58:33 -
@@ -294,7 +294,9 @@ in6_ifattach_linklocal(struct ifnet *ifp
 {
struct in6_aliasreq ifra;
struct in6_ifaddr *ia6;
-   int s, error, flags;
+   int error, flags;
+
+   splsoftassert(IPL_SOFTNET);
 
/*
 * configure link-local address.
@@ -338,9 +340,7 @@ in6_ifattach_linklocal(struct ifnet *ifp
if (in6if_do_dad(ifp) && ((ifp->if_flags & IFF_POINTOPOINT) == 0))
ifra.ifra_flags |= IN6_IFF_TENTATIVE;
 
-   s = splsoftnet();
error = in6_update_ifa(ifp, , in6ifa_ifpforlinklocal(ifp, 0));
-   splx(s);
if (error != 0)
return (error);
 
@@ -359,15 +359,12 @@ in6_ifattach_linklocal(struct ifnet *ifp
if ((ifp->if_flags & IFF_POINTOPOINT) == 0)
flags |= RTF_CLONING;
 
-   s = splsoftnet();
error = rt_ifa_add(>ia_ifa, flags, ia6->ia_ifa.ifa_addr);
if (error) {
in6_purgeaddr(>ia_ifa);
-   splx(s);
return (error);
}
dohooks(ifp->if_addrhooks, 0);
-   splx(s);
 
return (0);
 }