diff options
author | Sage Weil <sage@newdream.net> | 2010-04-07 11:23:20 -0700 |
---|---|---|
committer | Sage Weil <sage@newdream.net> | 2010-05-17 15:25:20 -0700 |
commit | 6822d00b5462e7a9dfa11dcc60cc25823a2107c5 (patch) | |
tree | 1517ffd1d3798f89ee58ecd75a7d5183d0138d6d | |
parent | 6f2bc3ff4cdb03903c79e155e9e1889ce176de09 (diff) | |
download | kernel_samsung_tuna-6822d00b5462e7a9dfa11dcc60cc25823a2107c5.zip kernel_samsung_tuna-6822d00b5462e7a9dfa11dcc60cc25823a2107c5.tar.gz kernel_samsung_tuna-6822d00b5462e7a9dfa11dcc60cc25823a2107c5.tar.bz2 |
ceph: wait for both monmap and osdmap when opening session
Signed-off-by: Yehuda Sadeh <yehuda@hq.newdream.net>
-rw-r--r-- | fs/ceph/super.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/fs/ceph/super.c b/fs/ceph/super.c index 93ad169..a8124e8 100644 --- a/fs/ceph/super.c +++ b/fs/ceph/super.c @@ -682,9 +682,10 @@ int ceph_check_fsid(struct ceph_client *client, struct ceph_fsid *fsid) /* * true if we have the mon map (and have thus joined the cluster) */ -static int have_mon_map(struct ceph_client *client) +static int have_mon_and_osd_map(struct ceph_client *client) { - return client->monc.monmap && client->monc.monmap->epoch; + return client->monc.monmap && client->monc.monmap->epoch && + client->osdc.osdmap && client->osdc.osdmap->epoch; } /* @@ -762,7 +763,7 @@ static int ceph_mount(struct ceph_client *client, struct vfsmount *mnt, if (err < 0) goto out; - while (!have_mon_map(client)) { + while (!have_mon_and_osd_map(client)) { err = -EIO; if (timeout && time_after_eq(jiffies, started + timeout)) goto out; @@ -770,8 +771,8 @@ static int ceph_mount(struct ceph_client *client, struct vfsmount *mnt, /* wait */ dout("mount waiting for mon_map\n"); err = wait_event_interruptible_timeout(client->auth_wq, - have_mon_map(client) || (client->auth_err < 0), - timeout); + have_mon_and_osd_map(client) || (client->auth_err < 0), + timeout); if (err == -EINTR || err == -ERESTARTSYS) goto out; if (client->auth_err < 0) { |