aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYan, Zheng <zheng.z.yan@intel.com>2013-11-24 01:33:01 -0500
committerYan, Zheng <zheng.z.yan@intel.com>2014-01-21 03:30:30 -0500
commit5d72d13c425bb41f7752962f168fb402b86b7ac0 (patch)
treeede1c4142966f8c31abf1ae96590855906527875
parent4ee6a914edbbd2543884f0ad7d58ea471136be32 (diff)
ceph: add open export target session helper
Signed-off-by: Yan, Zheng <zheng.z.yan@intel.com>
-rw-r--r--fs/ceph/mds_client.c51
-rw-r--r--fs/ceph/mds_client.h2
2 files changed, 38 insertions, 15 deletions
diff --git a/fs/ceph/mds_client.c b/fs/ceph/mds_client.c
index 7c00dd530bd1..f4f050a69a48 100644
--- a/fs/ceph/mds_client.c
+++ b/fs/ceph/mds_client.c
@@ -847,35 +847,56 @@ static int __open_session(struct ceph_mds_client *mdsc,
847 * 847 *
848 * called under mdsc->mutex 848 * called under mdsc->mutex
849 */ 849 */
850static struct ceph_mds_session *
851__open_export_target_session(struct ceph_mds_client *mdsc, int target)
852{
853 struct ceph_mds_session *session;
854
855 session = __ceph_lookup_mds_session(mdsc, target);
856 if (!session) {
857 session = register_session(mdsc, target);
858 if (IS_ERR(session))
859 return session;
860 }
861 if (session->s_state == CEPH_MDS_SESSION_NEW ||
862 session->s_state == CEPH_MDS_SESSION_CLOSING)
863 __open_session(mdsc, session);
864
865 return session;
866}
867
868struct ceph_mds_session *
869ceph_mdsc_open_export_target_session(struct ceph_mds_client *mdsc, int target)
870{
871 struct ceph_mds_session *session;
872
873 dout("open_export_target_session to mds%d\n", target);
874
875 mutex_lock(&mdsc->mutex);
876 session = __open_export_target_session(mdsc, target);
877 mutex_unlock(&mdsc->mutex);
878
879 return session;
880}
881
850static void __open_export_target_sessions(struct ceph_mds_client *mdsc, 882static void __open_export_target_sessions(struct ceph_mds_client *mdsc,
851 struct ceph_mds_session *session) 883 struct ceph_mds_session *session)
852{ 884{
853 struct ceph_mds_info *mi; 885 struct ceph_mds_info *mi;
854 struct ceph_mds_session *ts; 886 struct ceph_mds_session *ts;
855 int i, mds = session->s_mds; 887 int i, mds = session->s_mds;
856 int target;
857 888
858 if (mds >= mdsc->mdsmap->m_max_mds) 889 if (mds >= mdsc->mdsmap->m_max_mds)
859 return; 890 return;
891
860 mi = &mdsc->mdsmap->m_info[mds]; 892 mi = &mdsc->mdsmap->m_info[mds];
861 dout("open_export_target_sessions for mds%d (%d targets)\n", 893 dout("open_export_target_sessions for mds%d (%d targets)\n",
862 session->s_mds, mi->num_export_targets); 894 session->s_mds, mi->num_export_targets);
863 895
864 for (i = 0; i < mi->num_export_targets; i++) { 896 for (i = 0; i < mi->num_export_targets; i++) {
865 target = mi->export_targets[i]; 897 ts = __open_export_target_session(mdsc, mi->export_targets[i]);
866 ts = __ceph_lookup_mds_session(mdsc, target); 898 if (!IS_ERR(ts))
867 if (!ts) { 899 ceph_put_mds_session(ts);
868 ts = register_session(mdsc, target);
869 if (IS_ERR(ts))
870 return;
871 }
872 if (session->s_state == CEPH_MDS_SESSION_NEW ||
873 session->s_state == CEPH_MDS_SESSION_CLOSING)
874 __open_session(mdsc, session);
875 else
876 dout(" mds%d target mds%d %p is %s\n", session->s_mds,
877 i, ts, session_state_name(ts->s_state));
878 ceph_put_mds_session(ts);
879 } 900 }
880} 901}
881 902
diff --git a/fs/ceph/mds_client.h b/fs/ceph/mds_client.h
index 4c053d099ae4..68288917c737 100644
--- a/fs/ceph/mds_client.h
+++ b/fs/ceph/mds_client.h
@@ -383,6 +383,8 @@ extern void ceph_mdsc_lease_send_msg(struct ceph_mds_session *session,
383extern void ceph_mdsc_handle_map(struct ceph_mds_client *mdsc, 383extern void ceph_mdsc_handle_map(struct ceph_mds_client *mdsc,
384 struct ceph_msg *msg); 384 struct ceph_msg *msg);
385 385
386extern struct ceph_mds_session *
387ceph_mdsc_open_export_target_session(struct ceph_mds_client *mdsc, int target);
386extern void ceph_mdsc_open_export_target_sessions(struct ceph_mds_client *mdsc, 388extern void ceph_mdsc_open_export_target_sessions(struct ceph_mds_client *mdsc,
387 struct ceph_mds_session *session); 389 struct ceph_mds_session *session);
388 390