X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=lib%2Fnetdev-linux.c;h=49475360db0344bf834bd6847c9006a3280b7855;hb=a79c50f3df6197381c0ad8e91216ba2c5253473d;hp=9ff286ee4fe75b0031c2f24dae02a66622dbb0f9;hpb=a57a8488da2e6e02f515230d42a958126971ba8e;p=openvswitch diff --git a/lib/netdev-linux.c b/lib/netdev-linux.c index 9ff286ee..49475360 100644 --- a/lib/netdev-linux.c +++ b/lib/netdev-linux.c @@ -802,9 +802,9 @@ netdev_linux_recv(struct netdev *netdev_, void *data, size_t size) } for (;;) { - ssize_t retval = read(netdev->fd, data, size); + ssize_t retval = recv(netdev->fd, data, size, MSG_TRUNC); if (retval >= 0) { - return retval; + return retval <= size ? retval : -EMSGSIZE; } else if (errno != EINTR) { if (errno != EAGAIN) { VLOG_WARN_RL(&rl, "error receiving Ethernet packet on %s: %s", @@ -1030,6 +1030,10 @@ netdev_linux_set_mtu(const struct netdev *netdev_, int mtu) struct ifreq ifr; int error; + if (netdev_dev->cache_valid & VALID_MTU && + netdev_dev->mtu == mtu) { + return 0; + } ifr.ifr_mtu = mtu; error = netdev_linux_do_ioctl(netdev_get_name(netdev_), &ifr, SIOCSIFMTU, "SIOCSIFMTU");