Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 21 Feb 2017 02:10:02 +0000 (UTC)
From:      Sepherosa Ziehau <sephe@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org
Subject:   svn commit: r314002 - stable/11/sys/net
Message-ID:  <201702210210.v1L2A2RI007588@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: sephe
Date: Tue Feb 21 02:10:02 2017
New Revision: 314002
URL: https://svnweb.freebsd.org/changeset/base/314002

Log:
  MFC 311475
  
      if: Defer the if_up until the ifnet.if_ioctl is called.
  
      This ensures the interface is initialized by the interface driver
      before it can be used by the rest of the system.
  
      Reviewed by:    jhb, karels, gnn
      Sponsored by:   Microsoft
      Differential Revision:  https://reviews.freebsd.org/D8905

Modified:
  stable/11/sys/net/if.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/net/if.c
==============================================================================
--- stable/11/sys/net/if.c	Tue Feb 21 01:11:18 2017	(r314001)
+++ stable/11/sys/net/if.c	Tue Feb 21 02:10:02 2017	(r314002)
@@ -2300,7 +2300,7 @@ static int
 ifhwioctl(u_long cmd, struct ifnet *ifp, caddr_t data, struct thread *td)
 {
 	struct ifreq *ifr;
-	int error = 0;
+	int error = 0, do_ifup = 0;
 	int new_flags, temp_flags;
 	size_t namelen, onamelen;
 	size_t descrlen;
@@ -2427,7 +2427,7 @@ ifhwioctl(u_long cmd, struct ifnet *ifp,
 			if_down(ifp);
 		} else if (new_flags & IFF_UP &&
 		    (ifp->if_flags & IFF_UP) == 0) {
-			if_up(ifp);
+			do_ifup = 1;
 		}
 		/* See if permanently promiscuous mode bit is about to flip */
 		if ((ifp->if_flags ^ new_flags) & IFF_PPROMISC) {
@@ -2446,6 +2446,8 @@ ifhwioctl(u_long cmd, struct ifnet *ifp,
 		if (ifp->if_ioctl) {
 			(void) (*ifp->if_ioctl)(ifp, cmd, data);
 		}
+		if (do_ifup)
+			if_up(ifp);
 		getmicrotime(&ifp->if_lastchange);
 		break;
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201702210210.v1L2A2RI007588>