Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ed0552a1 authored by Sage Weil's avatar Sage Weil
Browse files

ceph: introduce helper to connect to mds export targets



There are a few cases where we need to open sessions with a given mds's
potential export targets.

Signed-off-by: default avatarSage Weil <sage@newdream.net>
parent 796d6955
Loading
Loading
Loading
Loading
+37 −0
Original line number Diff line number Diff line
@@ -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
 */