From cebbfded57ac64a12b2bc18564be526a6f7c1e5b Mon Sep 17 00:00:00 2001 From: Dongsheng Yang Date: Sun, 17 Mar 2019 23:04:52 -0400 Subject: [PATCH] rbd: krbd: return -ETIMEDOUT in polling We don't want to wait on uevent forever, but the return value of polling in timeout is 0 rather than a negative value. Fixes: http://tracker.ceph.com/issues/38792 Signed-off-by: Dongsheng Yang (cherry picked from commit ab833b823bf7dc5750f281a81f31ed8f708df73d) --- src/krbd.cc | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/krbd.cc b/src/krbd.cc index 88da074664db1..a7ae25bafedba 100644 --- a/src/krbd.cc +++ b/src/krbd.cc @@ -241,12 +241,17 @@ static int wait_for_udev_add(struct udev_monitor *mon, const krbd_spec& spec, for (;;) { struct pollfd fds[1]; struct udev_device *dev; + int r; fds[0].fd = udev_monitor_get_fd(mon); fds[0].events = POLLIN; - if (poll(fds, 1, POLL_TIMEOUT) < 0) + r = poll(fds, 1, POLL_TIMEOUT); + if (r < 0) return -errno; + if (r == 0) + return -ETIMEDOUT; + dev = udev_monitor_receive_device(mon); if (!dev) continue; @@ -572,12 +577,17 @@ static int wait_for_udev_remove(struct udev_monitor *mon, dev_t devno) for (;;) { struct pollfd fds[1]; struct udev_device *dev; + int r; fds[0].fd = udev_monitor_get_fd(mon); fds[0].events = POLLIN; - if (poll(fds, 1, POLL_TIMEOUT) < 0) + r = poll(fds, 1, POLL_TIMEOUT); + if (r < 0) return -errno; + if (r == 0) + return -ETIMEDOUT; + dev = udev_monitor_receive_device(mon); if (!dev) continue; -- 2.39.5