Commit 216639dd authored by Ilya Dryomov's avatar Ilya Dryomov

libceph: a couple tweaks for wait loops

- return -ETIMEDOUT instead of -EIO in case of timeout
- wait_event_interruptible_timeout() returns time left until timeout
  and since it can be almost LONG_MAX we had better assign it to long
Signed-off-by: default avatarIlya Dryomov <idryomov@gmail.com>
Reviewed-by: default avatarAlex Elder <elder@linaro.org>
parent a319bf56
...@@ -647,8 +647,8 @@ static int have_mon_and_osd_map(struct ceph_client *client) ...@@ -647,8 +647,8 @@ static int have_mon_and_osd_map(struct ceph_client *client)
*/ */
int __ceph_open_session(struct ceph_client *client, unsigned long started) int __ceph_open_session(struct ceph_client *client, unsigned long started)
{ {
int err;
unsigned long timeout = client->options->mount_timeout; unsigned long timeout = client->options->mount_timeout;
long err;
/* open session, and wait for mon and osd maps */ /* open session, and wait for mon and osd maps */
err = ceph_monc_open_session(&client->monc); err = ceph_monc_open_session(&client->monc);
...@@ -656,16 +656,15 @@ int __ceph_open_session(struct ceph_client *client, unsigned long started) ...@@ -656,16 +656,15 @@ int __ceph_open_session(struct ceph_client *client, unsigned long started)
return err; return err;
while (!have_mon_and_osd_map(client)) { while (!have_mon_and_osd_map(client)) {
err = -EIO;
if (timeout && time_after_eq(jiffies, started + timeout)) if (timeout && time_after_eq(jiffies, started + timeout))
return err; return -ETIMEDOUT;
/* wait */ /* wait */
dout("mount waiting for mon_map\n"); dout("mount waiting for mon_map\n");
err = wait_event_interruptible_timeout(client->auth_wq, err = wait_event_interruptible_timeout(client->auth_wq,
have_mon_and_osd_map(client) || (client->auth_err < 0), have_mon_and_osd_map(client) || (client->auth_err < 0),
ceph_timeout_jiffies(timeout)); ceph_timeout_jiffies(timeout));
if (err == -EINTR || err == -ERESTARTSYS) if (err < 0)
return err; return err;
if (client->auth_err < 0) if (client->auth_err < 0)
return client->auth_err; return client->auth_err;
......
...@@ -308,7 +308,7 @@ int ceph_monc_wait_osdmap(struct ceph_mon_client *monc, u32 epoch, ...@@ -308,7 +308,7 @@ int ceph_monc_wait_osdmap(struct ceph_mon_client *monc, u32 epoch,
unsigned long timeout) unsigned long timeout)
{ {
unsigned long started = jiffies; unsigned long started = jiffies;
int ret; long ret;
mutex_lock(&monc->mutex); mutex_lock(&monc->mutex);
while (monc->have_osdmap < epoch) { while (monc->have_osdmap < epoch) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment