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