From 53aab34dafcca2ec022102a03905e59cfa34fc84 Mon Sep 17 00:00:00 2001 From: Ilya Dryomov Date: Thu, 10 Oct 2019 13:49:26 +0200 Subject: [PATCH] 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 --- src/krbd.cc | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/krbd.cc b/src/krbd.cc index 4963fc8a3f7ba..baae7e724962d 100644 --- a/src/krbd.cc +++ b/src/krbd.cc @@ -234,18 +234,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_msgf("poll failed: %d", -errno); } - 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; + } } } } -- 2.39.5