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: Ilya Dryomov <idryomov@gmail.com> Reviewed-by: Alex Elder <elder@linaro.org>
This commit is contained in:
parent
a319bf56a6
commit
216639dd50
@ -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)
|
|||||||
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,
|
|||||||
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) {
|
||||||
|
Loading…
Reference in New Issue
Block a user