From 8bc95efcb3e9e3b402e33f9843d0480624089013 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Mon, 21 Jun 2010 13:38:25 -0700 Subject: [PATCH] --- yaml --- r: 208837 b: refs/heads/master c: ed0552a1a21d2f2692b84c366ce04ad17377780c h: refs/heads/master i: 208835: 0e7e1d4106b1d4c38e6dcc35ed842a3451e875cb v: v3 --- [refs] | 2 +- trunk/fs/ceph/mds_client.c | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index c9b340222459..c6c0473146d6 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 796d6955a51ce6768d0e033f27a2f8f5be6cb39a +refs/heads/master: ed0552a1a21d2f2692b84c366ce04ad17377780c diff --git a/trunk/fs/ceph/mds_client.c b/trunk/fs/ceph/mds_client.c index 641a8a37e7b3..462602ec7fb1 100644 --- a/trunk/fs/ceph/mds_client.c +++ b/trunk/fs/ceph/mds_client.c @@ -704,6 +704,43 @@ static int __open_session(struct ceph_mds_client *mdsc, return 0; } +/* + * open sessions for any export targets for the given mds + * + * called under mdsc->mutex + */ +static void __open_export_target_sessions(struct ceph_mds_client *mdsc, + struct ceph_mds_session *session) +{ + struct ceph_mds_info *mi; + struct ceph_mds_session *ts; + int i, mds = session->s_mds; + int target; + + if (mds >= mdsc->mdsmap->m_max_mds) + return; + mi = &mdsc->mdsmap->m_info[mds]; + dout("open_export_target_sessions for mds%d (%d targets)\n", + session->s_mds, mi->num_export_targets); + + for (i = 0; i < mi->num_export_targets; i++) { + target = mi->export_targets[i]; + ts = __ceph_lookup_mds_session(mdsc, target); + if (!ts) { + ts = register_session(mdsc, target); + if (IS_ERR(ts)) + return; + } + if (session->s_state == CEPH_MDS_SESSION_NEW || + session->s_state == CEPH_MDS_SESSION_CLOSING) + __open_session(mdsc, session); + else + dout(" mds%d target mds%d %p is %s\n", session->s_mds, + i, ts, session_state_name(ts->s_state)); + ceph_put_mds_session(ts); + } +} + /* * session caps */