svn commit: r228333 - head/sys/dev/et

Pyun YongHyeon yongari at FreeBSD.org
Wed Dec 7 21:54:44 UTC 2011


Author: yongari
Date: Wed Dec  7 21:54:44 2011
New Revision: 228333
URL: http://svn.freebsd.org/changeset/base/228333

Log:
  Protect SIOCSIFMTU ioctl handler with driver lock.
  Don't blindly re-initialize controller whenever MTU is changed.
  Now, reinitializing is done only when driver is running.
  
  While here, remove unnecessary assignment of error value since it
  was already initialized to 0.

Modified:
  head/sys/dev/et/if_et.c

Modified: head/sys/dev/et/if_et.c
==============================================================================
--- head/sys/dev/et/if_et.c	Wed Dec  7 21:46:09 2011	(r228332)
+++ head/sys/dev/et/if_et.c	Wed Dec  7 21:54:44 2011	(r228333)
@@ -1287,11 +1287,11 @@ et_ioctl(struct ifnet *ifp, u_long cmd, 
 			ET_LOCK(sc);
 			et_setmulti(sc);
 			ET_UNLOCK(sc);
-			error = 0;
 		}
 		break;
 
 	case SIOCSIFMTU:
+		ET_LOCK(sc);
 #if 0
 		if (sc->sc_flags & ET_FLAG_JUMBO)
 			max_framelen = ET_JUMBO_FRAMELEN;
@@ -1301,14 +1301,18 @@ et_ioctl(struct ifnet *ifp, u_long cmd, 
 
 		if (ET_FRAMELEN(ifr->ifr_mtu) > max_framelen) {
 			error = EOPNOTSUPP;
+			ET_UNLOCK(sc);
 			break;
 		}
 
 		if (ifp->if_mtu != ifr->ifr_mtu) {
 			ifp->if_mtu = ifr->ifr_mtu;
-			ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
-			et_init(sc);
+			if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
+				ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
+				et_init_locked(sc);
+			}
 		}
+		ET_UNLOCK(sc);
 		break;
 
 	case SIOCSIFCAP:


More information about the svn-src-head mailing list