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