]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
rbd: krbd: return -ETIMEDOUT in polling
authorDongsheng Yang <dongsheng.yang@easystack.cn>
Mon, 18 Mar 2019 03:04:52 +0000 (23:04 -0400)
committerDongsheng Yang <dongsheng.yang@easystack.cn>
Wed, 20 Mar 2019 11:19:01 +0000 (07:19 -0400)
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 <dongsheng.yang@easystack.cn>
src/krbd.cc

index 88da074664db18280d46f956cf8a6f68fa59241c..a7ae25bafedbad6b576675a290a5993a359b7a0a 100644 (file)
@@ -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;