sd-netlink: don't give up on netlink on ENOBUFS
authorLennart Poettering <lennart@poettering.net>
Tue, 21 Feb 2017 15:25:02 +0000 (16:25 +0100)
committerLennart Poettering <lennart@poettering.net>
Tue, 21 Feb 2017 20:41:32 +0000 (21:41 +0100)
commit71994cff31f2507429dc91550f73fd8e35646147
tree8685aae866e3511f0ff7446007aee750365a5dee
parent94c4c6227957ef34b7f46daaab75bb5911062462
sd-netlink: don't give up on netlink on ENOBUFS

If our netlink input buffer overruns the kernel will send us ENOBUFS on
the next recvmsg(). Don't consider this a complete failure resulting in
closing of the netlink socket. Instead, simply continue (after debug
logging).

Of course, ideally we'd have a better strategy for this, and would have
a way to resync if this happens (as well as a scheme for cancelling all
ongoing asynchronous transactions), but for now let's at least not choke
fatally, and simply accept that we lost some messages and continue.

Note that if we lose messages when synchronously waiting for an
operation to complete, we'll still propagate the ENOBUFS up, to make the
individual transaction fail.

See: #5398

(This bug does not properly fix the issue, hence we should leave the bug
open.)
src/libsystemd/sd-netlink/netlink-socket.c
src/libsystemd/sd-netlink/sd-netlink.c