From: Daniele Di Proietto Date: Thu, 7 Jul 2016 01:09:12 +0000 (-0700) Subject: netdev-linux: Do not log a warning if the device is down. X-Git-Url: http://git.cascardo.eti.br/?a=commitdiff_plain;h=29736cc0764b317f1130966c1b269ea4b5d3b44d;p=cascardo%2Fovs.git netdev-linux: Do not log a warning if the device is down. In the userspace datapath we use tap devices as internal netdev. The datapath doesn't consider whether a device is up or down before sending to it, and so far this hasn't been a problem. Since Linux upstream commit 1bd4978a88ac("tun: honor IFF_UP in tun_get_user()"), included in 4.4, writing to a tap device that is not up sets errno to EIO. This commit avoids printing a warning in this case. This fixes a failures in the system-userspace-testsuites. Reported-by: Joe Stringer Signed-off-by: Daniele Di Proietto Acked-by: Ben Pfaff --- diff --git a/lib/netdev-linux.c b/lib/netdev-linux.c index ef11d12ba..486910ab4 100644 --- a/lib/netdev-linux.c +++ b/lib/netdev-linux.c @@ -1223,15 +1223,20 @@ netdev_linux_send(struct netdev *netdev_, int qid OVS_UNUSED, } if (retval < 0) { - /* The Linux AF_PACKET implementation never blocks waiting for room - * for packets, instead returning ENOBUFS. Translate this into - * EAGAIN for the caller. */ - error = errno == ENOBUFS ? EAGAIN : errno; - if (error == EINTR) { - /* continue without incrementing 'i', i.e. retry this packet */ + if (errno == EINTR) { + /* The send was interrupted by a signal. Retry the packet by + * continuing without incrementing 'i'.*/ continue; + } else if (errno == EIO && is_tap_netdev(netdev_)) { + /* The Linux tap driver returns EIO if the device is not up. + * From the OVS side this is not an error, so ignore it. */ + } else { + /* The Linux AF_PACKET implementation never blocks waiting for + * room for packets, instead returning ENOBUFS. Translate this + * into EAGAIN for the caller. */ + error = errno == ENOBUFS ? EAGAIN : errno; + break; } - break; } else if (retval != size) { VLOG_WARN_RL(&rl, "sent partial Ethernet packet (%"PRIuSIZE" bytes" " of %"PRIuSIZE") on %s", retval, size,