From 3012b353648d341c0935285921b881e4823c792f Mon Sep 17 00:00:00 2001 From: Ilya Dryomov Date: Fri, 27 Sep 2019 17:14:08 +0200 Subject: [PATCH] krbd: get rid of poll() timeout 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 (cherry picked from commit ffb66ff7106b9d200a7da355199ab362fb611c31) --- src/krbd.cc | 24 ++++++------------------ 1 file changed, 6 insertions(+), 18 deletions(-) diff --git a/src/krbd.cc b/src/krbd.cc index f766a4e8c90fb..e17a029334efe 100644 --- a/src/krbd.cc +++ b/src/krbd.cc @@ -41,9 +41,6 @@ #include #include - -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 block_dev_vec; - int r; /* * Catch /sys/devices/rbd// 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) -- 2.39.5