From: Ilya Dryomov Date: Thu, 10 Oct 2019 11:49:26 +0000 (+0200) Subject: krbd: reap all available events before polling again X-Git-Tag: v13.2.7~7^2~6 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=6bd85a0a70d3bb1490cafbc143589bb322032dea;p=ceph.git krbd: reap all available events before polling again This also exposes errors from udev_monitor_receive_device() which were previously ignored. Signed-off-by: Ilya Dryomov (cherry picked from commit 53aab34dafcca2ec022102a03905e59cfa34fc84) --- diff --git a/src/krbd.cc b/src/krbd.cc index da89f787891dd..bbf9f84446118 100644 --- a/src/krbd.cc +++ b/src/krbd.cc @@ -185,18 +185,23 @@ static int wait_for_mapping(udev_monitor *mon, F udev_device_handler) fds[0].events = POLLIN; for (;;) { - struct udev_device *dev; - if (poll(fds, 1, -1) < 0) { ceph_abort(); } - dev = udev_monitor_receive_device(mon); - if (!dev) { - continue; - } - if (udev_device_handler(dev)) { - return 0; + for (;;) { + struct udev_device *dev; + + dev = udev_monitor_receive_device(mon); + if (!dev) { + if (errno != EINTR && errno != EAGAIN) { + return -errno; + } + break; + } + if (udev_device_handler(dev)) { + return 0; + } } } }