This also exposes errors from udev_monitor_receive_device() which were
previously ignored.
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
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;
+ }
}
}
}