Commit 5d72d13c authored by Yan, Zheng's avatar Yan, Zheng

ceph: add open export target session helper

Signed-off-by: default avatarYan, Zheng <zheng.z.yan@intel.com>
parent 4ee6a914
...@@ -847,35 +847,56 @@ static int __open_session(struct ceph_mds_client *mdsc, ...@@ -847,35 +847,56 @@ static int __open_session(struct ceph_mds_client *mdsc,
* *
* called under mdsc->mutex * called under mdsc->mutex
*/ */
static struct ceph_mds_session *
__open_export_target_session(struct ceph_mds_client *mdsc, int target)
{
struct ceph_mds_session *session;
session = __ceph_lookup_mds_session(mdsc, target);
if (!session) {
session = register_session(mdsc, target);
if (IS_ERR(session))
return session;
}
if (session->s_state == CEPH_MDS_SESSION_NEW ||
session->s_state == CEPH_MDS_SESSION_CLOSING)
__open_session(mdsc, session);
return session;
}
struct ceph_mds_session *
ceph_mdsc_open_export_target_session(struct ceph_mds_client *mdsc, int target)
{
struct ceph_mds_session *session;
dout("open_export_target_session to mds%d\n", target);
mutex_lock(&mdsc->mutex);
session = __open_export_target_session(mdsc, target);
mutex_unlock(&mdsc->mutex);
return session;
}
static void __open_export_target_sessions(struct ceph_mds_client *mdsc, static void __open_export_target_sessions(struct ceph_mds_client *mdsc,
struct ceph_mds_session *session) struct ceph_mds_session *session)
{ {
struct ceph_mds_info *mi; struct ceph_mds_info *mi;
struct ceph_mds_session *ts; struct ceph_mds_session *ts;
int i, mds = session->s_mds; int i, mds = session->s_mds;
int target;
if (mds >= mdsc->mdsmap->m_max_mds) if (mds >= mdsc->mdsmap->m_max_mds)
return; return;
mi = &mdsc->mdsmap->m_info[mds]; mi = &mdsc->mdsmap->m_info[mds];
dout("open_export_target_sessions for mds%d (%d targets)\n", dout("open_export_target_sessions for mds%d (%d targets)\n",
session->s_mds, mi->num_export_targets); session->s_mds, mi->num_export_targets);
for (i = 0; i < mi->num_export_targets; i++) { for (i = 0; i < mi->num_export_targets; i++) {
target = mi->export_targets[i]; ts = __open_export_target_session(mdsc, mi->export_targets[i]);
ts = __ceph_lookup_mds_session(mdsc, target); if (!IS_ERR(ts))
if (!ts) { ceph_put_mds_session(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);
} }
} }
......
...@@ -383,6 +383,8 @@ extern void ceph_mdsc_lease_send_msg(struct ceph_mds_session *session, ...@@ -383,6 +383,8 @@ extern void ceph_mdsc_lease_send_msg(struct ceph_mds_session *session,
extern void ceph_mdsc_handle_map(struct ceph_mds_client *mdsc, extern void ceph_mdsc_handle_map(struct ceph_mds_client *mdsc,
struct ceph_msg *msg); struct ceph_msg *msg);
extern struct ceph_mds_session *
ceph_mdsc_open_export_target_session(struct ceph_mds_client *mdsc, int target);
extern void ceph_mdsc_open_export_target_sessions(struct ceph_mds_client *mdsc, extern void ceph_mdsc_open_export_target_sessions(struct ceph_mds_client *mdsc,
struct ceph_mds_session *session); struct ceph_mds_session *session);
......
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