From 69a3c3530219b7fbc697d4e19ec34b794f28db28 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) Conflicts: src/krbd.cc [ ceph_abort_msgf() not in luminous ] --- src/krbd.cc | 23 ++++++----------------- 1 file changed, 6 insertions(+), 17 deletions(-) diff --git a/src/krbd.cc b/src/krbd.cc index 39188ada5a1..b2a58c8d64a 100644 --- a/src/krbd.cc +++ b/src/krbd.cc @@ -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 block_dev_vec; - int r; /* * Catch /sys/devices/rbd// 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) -- 2.47.3