]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
krbd: get rid of poll() timeout
authorIlya Dryomov <idryomov@gmail.com>
Fri, 27 Sep 2019 15:14:08 +0000 (17:14 +0200)
committerNathan Cutler <ncutler@suse.com>
Tue, 29 Oct 2019 11:10:36 +0000 (12:10 +0100)
This timeout was added as a (very poor) workaround for an issue
addressed in commit 42dd1eae630f ("krbd: fix rbd map hang due to udev
return subsystem unordered").

Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
(cherry picked from commit ffb66ff7106b9d200a7da355199ab362fb611c31)

src/krbd.cc

index f766a4e8c90fb96e903886d010f8d289084f1259..e17a029334efe33e955bcbd86c3abb45048cf416 100644 (file)
@@ -41,9 +41,6 @@
 #include <blkid/blkid.h>
 #include <libudev.h>
 
-
-const static int POLL_TIMEOUT=120000;
-
 struct krbd_ctx {
   CephContext *cct;
   struct udev *udev;
@@ -233,7 +230,6 @@ static int wait_for_udev_add(struct udev_monitor *mon, const krbd_spec& spec,
 {
   struct udev_device *bus_dev = nullptr;
   std::vector<struct udev_device*> block_dev_vec;
-  int r;
 
   /*
    * Catch /sys/devices/rbd/<id>/ and wait for the corresponding
@@ -246,12 +242,8 @@ static int wait_for_udev_add(struct udev_monitor *mon, const krbd_spec& spec,
 
     fds[0].fd = udev_monitor_get_fd(mon);
     fds[0].events = POLLIN;
-    r = poll(fds, 1, POLL_TIMEOUT);
-    if (r > 0) {
-      r = 0;
-    } else {
-      r = (r == 0) ? -ETIMEDOUT : -errno;
-      break;
+    if (poll(fds, 1, -1) < 0) {
+      ceph_abort_msgf("poll failed: %d", -errno);
     }
 
     dev = udev_monitor_receive_device(mon);
@@ -309,7 +301,7 @@ done:
     udev_device_unref(p);
   }
 
-  return r;
+  return 0;
 }
 
 static int do_map(struct udev *udev, const krbd_spec& spec, const string& buf,
@@ -592,16 +584,12 @@ 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;
-    r = poll(fds, 1, POLL_TIMEOUT);
-    if (r < 0)
-      return -errno;
-
-    if (r == 0)
-      return -ETIMEDOUT;
+    if (poll(fds, 1, -1) < 0) {
+      ceph_abort_msgf("poll failed: %d", -errno);
+    }
 
     dev = udev_monitor_receive_device(mon);
     if (!dev)