]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rbd: krbd: return -ETIMEDOUT in polling 27588/head
authorDongsheng Yang <dongsheng.yang@easystack.cn>
Mon, 18 Mar 2019 03:04:52 +0000 (23:04 -0400)
committerPrashant D <pdhange@redhat.com>
Mon, 15 Apr 2019 05:08:58 +0000 (01:08 -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>
(cherry picked from commit ab833b823bf7dc5750f281a81f31ed8f708df73d)

src/krbd.cc

index 97ba92ac3a75d771beba052b63339c99df67cc69..9192174f7aa44895e866f75f315a791c12379554 100644 (file)
@@ -193,12 +193,17 @@ static int wait_for_udev_add(struct udev_monitor *mon, const char *pool,
   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;
@@ -489,12 +494,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;