summaryrefslogtreecommitdiffstats
path: root/sys/dev/et
diff options
context:
space:
mode:
authoryongari <yongari@FreeBSD.org>2011-12-07 21:54:44 +0000
committeryongari <yongari@FreeBSD.org>2011-12-07 21:54:44 +0000
commitbe6c75b27877d84363fbd24bd805ecb00d1253fe (patch)
tree9beb638e302ed21ee5a1ba193488748ea02975dd /sys/dev/et
parentc557fccc885517cacf953a1d5df3392a97b66285 (diff)
downloadFreeBSD-src-be6c75b27877d84363fbd24bd805ecb00d1253fe.zip
FreeBSD-src-be6c75b27877d84363fbd24bd805ecb00d1253fe.tar.gz
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.
Diffstat (limited to 'sys/dev/et')
-rw-r--r--sys/dev/et/if_et.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/sys/dev/et/if_et.c b/sys/dev/et/if_et.c
index 176d858..9d2848c 100644
--- a/sys/dev/et/if_et.c
+++ b/sys/dev/et/if_et.c
@@ -1287,11 +1287,11 @@ et_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
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, caddr_t data)
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:
OpenPOWER on IntegriCloud