aboutsummaryrefslogtreecommitdiffstats
path: root/tools/hv
diff options
context:
space:
mode:
authorDexuan Cui <decui@microsoft.com>2014-11-20 00:51:22 -0500
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2014-11-26 22:01:12 -0500
commit4300f26492b2438c4c1930552dfe83cb09c0ab31 (patch)
tree1c0d44f311754775ccbaaf8fad58bccbdcf64fcc /tools/hv
parent9e5db05aae4657c7ade34ccc4b93f27ab647498e (diff)
tools: hv: ignore ENOBUFS and ENOMEM in the KVP daemon
Under high memory pressure and very high KVP R/W test pressure, the netlink recvfrom() may transiently return ENOBUFS to the daemon -- we found this during a 2-week stress test. We'd better not terminate the daemon on the failure, because a typical KVP user will re-try the R/W and hopefully it will succeed next time. We can also ignore the errors on sending. Cc: K. Y. Srinivasan <kys@microsoft.com> Signed-off-by: Dexuan Cui <decui@microsoft.com> Reviewed-by: Vitaly Kuznetsov <vkuznets@redhat.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'tools/hv')
-rw-r--r--tools/hv/hv_kvp_daemon.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/tools/hv/hv_kvp_daemon.c b/tools/hv/hv_kvp_daemon.c
index 22b076419c80..6a6432a20a1d 100644
--- a/tools/hv/hv_kvp_daemon.c
+++ b/tools/hv/hv_kvp_daemon.c
@@ -1559,8 +1559,15 @@ int main(int argc, char *argv[])
1559 addr_p, &addr_l); 1559 addr_p, &addr_l);
1560 1560
1561 if (len < 0) { 1561 if (len < 0) {
1562 int saved_errno = errno;
1562 syslog(LOG_ERR, "recvfrom failed; pid:%u error:%d %s", 1563 syslog(LOG_ERR, "recvfrom failed; pid:%u error:%d %s",
1563 addr.nl_pid, errno, strerror(errno)); 1564 addr.nl_pid, errno, strerror(errno));
1565
1566 if (saved_errno == ENOBUFS) {
1567 syslog(LOG_ERR, "receive error: ignored");
1568 continue;
1569 }
1570
1564 close(fd); 1571 close(fd);
1565 return -1; 1572 return -1;
1566 } 1573 }
@@ -1763,8 +1770,15 @@ kvp_done:
1763 1770
1764 len = netlink_send(fd, incoming_cn_msg); 1771 len = netlink_send(fd, incoming_cn_msg);
1765 if (len < 0) { 1772 if (len < 0) {
1773 int saved_errno = errno;
1766 syslog(LOG_ERR, "net_link send failed; error: %d %s", errno, 1774 syslog(LOG_ERR, "net_link send failed; error: %d %s", errno,
1767 strerror(errno)); 1775 strerror(errno));
1776
1777 if (saved_errno == ENOMEM || saved_errno == ENOBUFS) {
1778 syslog(LOG_ERR, "send error: ignored");
1779 continue;
1780 }
1781
1768 exit(EXIT_FAILURE); 1782 exit(EXIT_FAILURE);
1769 } 1783 }
1770 } 1784 }