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: v15.1.0~1212^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=53aab34dafcca2ec022102a03905e59cfa34fc84;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 --- 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; + } } } }