]> git-server-git.apps.pok.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)
committerIlya Dryomov <idryomov@gmail.com>
Mon, 4 Nov 2019 11:43:20 +0000 (12:43 +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)

Conflicts:
src/krbd.cc [ ceph_abort_msgf() not in luminous ]

src/krbd.cc

index 39188ada5a1f5209a54152ddb754871e3697ecf8..b2a58c8d64aa563049e43aa06a85cf1c3951c244 100644 (file)
@@ -42,8 +42,6 @@
 
 using namespace std;
 
-const static int POLL_TIMEOUT=120000;
-
 struct krbd_ctx {
   CephContext *cct;
   struct udev *udev;
@@ -182,7 +180,6 @@ static int wait_for_udev_add(struct udev_monitor *mon, const char *pool,
 {
   struct udev_device *bus_dev = NULL;
   std::vector<struct udev_device*> block_dev_vec;
-  int r;
 
   /*
    * Catch /sys/devices/rbd/<id>/ and wait for the corresponding
@@ -195,12 +192,8 @@ static int wait_for_udev_add(struct udev_monitor *mon, const char *pool,
 
     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();
     }
 
     dev = udev_monitor_receive_device(mon);
@@ -264,7 +257,7 @@ done:
     udev_device_unref(p);
   }
 
-  return r;
+  return 0;
 }
 
 static int do_map(struct udev *udev, const char *pool, const char *image,
@@ -494,16 +487,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();
+    }
 
     dev = udev_monitor_receive_device(mon);
     if (!dev)