ceph: add open export target session helper
Signed-off-by: Yan, Zheng <zheng.z.yan@intel.com>
此提交包含在:
@@ -847,35 +847,56 @@ static int __open_session(struct ceph_mds_client *mdsc,
|
||||
*
|
||||
* 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,
|
||||
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);
|
||||
ts = __open_export_target_session(mdsc, mi->export_targets[i]);
|
||||
if (!IS_ERR(ts))
|
||||
ceph_put_mds_session(ts);
|
||||
}
|
||||
}
|
||||
|
||||
|
新增問題並參考
封鎖使用者