Lines Matching refs:session

51 	struct ceph_mds_session *session;  member
1007 mds = cap->session->s_mds; in __choose_mds()
1155 struct ceph_mds_session *session) in __open_session() argument
1159 int mds = session->s_mds; in __open_session()
1165 session->s_state = CEPH_MDS_SESSION_OPENING; in __open_session()
1166 session->s_renew_requested = jiffies; in __open_session()
1169 msg = create_session_open_msg(mdsc, session->s_seq); in __open_session()
1172 ceph_con_send(&session->s_con, msg); in __open_session()
1184 struct ceph_mds_session *session; in __open_export_target_session() local
1186 session = __ceph_lookup_mds_session(mdsc, target); in __open_export_target_session()
1187 if (!session) { in __open_export_target_session()
1188 session = register_session(mdsc, target); in __open_export_target_session()
1189 if (IS_ERR(session)) in __open_export_target_session()
1190 return session; in __open_export_target_session()
1192 if (session->s_state == CEPH_MDS_SESSION_NEW || in __open_export_target_session()
1193 session->s_state == CEPH_MDS_SESSION_CLOSING) in __open_export_target_session()
1194 __open_session(mdsc, session); in __open_export_target_session()
1196 return session; in __open_export_target_session()
1202 struct ceph_mds_session *session; in ceph_mdsc_open_export_target_session() local
1207 session = __open_export_target_session(mdsc, target); in ceph_mdsc_open_export_target_session()
1210 return session; in ceph_mdsc_open_export_target_session()
1214 struct ceph_mds_session *session) in __open_export_target_sessions() argument
1218 int i, mds = session->s_mds; in __open_export_target_sessions()
1225 session->s_mds, mi->num_export_targets); in __open_export_target_sessions()
1235 struct ceph_mds_session *session) in ceph_mdsc_open_export_target_sessions() argument
1238 __open_export_target_sessions(mdsc, session); in ceph_mdsc_open_export_target_sessions()
1246 static void detach_cap_releases(struct ceph_mds_session *session, in detach_cap_releases() argument
1249 lockdep_assert_held(&session->s_cap_lock); in detach_cap_releases()
1251 list_splice_init(&session->s_cap_releases, target); in detach_cap_releases()
1252 session->s_num_cap_releases = 0; in detach_cap_releases()
1253 dout("dispose_cap_releases mds%d\n", session->s_mds); in detach_cap_releases()
1269 struct ceph_mds_session *session) in cleanup_session_requests() argument
1275 dout("cleanup_session_requests mds%d\n", session->s_mds); in cleanup_session_requests()
1277 while (!list_empty(&session->s_unsafe)) { in cleanup_session_requests()
1278 req = list_first_entry(&session->s_unsafe, in cleanup_session_requests()
1300 req->r_session->s_mds == session->s_mds) in cleanup_session_requests()
1312 int ceph_iterate_session_caps(struct ceph_mds_session *session, in ceph_iterate_session_caps() argument
1322 dout("iterate_session_caps %p mds%d\n", session, session->s_mds); in ceph_iterate_session_caps()
1323 spin_lock(&session->s_cap_lock); in ceph_iterate_session_caps()
1324 p = session->s_caps.next; in ceph_iterate_session_caps()
1325 while (p != &session->s_caps) { in ceph_iterate_session_caps()
1332 session->s_cap_iterator = cap; in ceph_iterate_session_caps()
1333 spin_unlock(&session->s_cap_lock); in ceph_iterate_session_caps()
1342 ceph_put_cap(session->s_mdsc, old_cap); in ceph_iterate_session_caps()
1349 spin_lock(&session->s_cap_lock); in ceph_iterate_session_caps()
1354 BUG_ON(cap->session != session); in ceph_iterate_session_caps()
1355 cap->session = NULL; in ceph_iterate_session_caps()
1357 session->s_nr_caps--; in ceph_iterate_session_caps()
1359 __ceph_queue_cap_release(session, cap); in ceph_iterate_session_caps()
1368 session->s_cap_iterator = NULL; in ceph_iterate_session_caps()
1369 spin_unlock(&session->s_cap_lock); in ceph_iterate_session_caps()
1373 ceph_put_cap(session->s_mdsc, old_cap); in ceph_iterate_session_caps()
1480 static void remove_session_caps(struct ceph_mds_session *session) in remove_session_caps() argument
1482 struct ceph_fs_client *fsc = session->s_mdsc->fsc; in remove_session_caps()
1486 dout("remove_session_caps on %p\n", session); in remove_session_caps()
1487 ceph_iterate_session_caps(session, remove_session_caps_cb, fsc); in remove_session_caps()
1491 spin_lock(&session->s_cap_lock); in remove_session_caps()
1492 if (session->s_nr_caps > 0) { in remove_session_caps()
1503 while (!list_empty(&session->s_caps)) { in remove_session_caps()
1504 cap = list_entry(session->s_caps.next, in remove_session_caps()
1510 spin_unlock(&session->s_cap_lock); in remove_session_caps()
1516 spin_lock(&session->s_cap_lock); in remove_session_caps()
1521 detach_cap_releases(session, &dispose); in remove_session_caps()
1523 BUG_ON(session->s_nr_caps > 0); in remove_session_caps()
1524 BUG_ON(!list_empty(&session->s_cap_flushing)); in remove_session_caps()
1525 spin_unlock(&session->s_cap_lock); in remove_session_caps()
1526 dispose_cap_releases(session->s_mdsc, &dispose); in remove_session_caps()
1553 if (cap->cap_gen < cap->session->s_cap_gen) { in wake_up_session_cb()
1568 static void wake_up_session_caps(struct ceph_mds_session *session, int ev) in wake_up_session_caps() argument
1570 dout("wake_up_session_caps %p mds%d\n", session, session->s_mds); in wake_up_session_caps()
1571 ceph_iterate_session_caps(session, wake_up_session_cb, in wake_up_session_caps()
1582 struct ceph_mds_session *session) in send_renew_caps() argument
1587 if (time_after_eq(jiffies, session->s_cap_ttl) && in send_renew_caps()
1588 time_after_eq(session->s_cap_ttl, session->s_renew_requested)) in send_renew_caps()
1589 pr_info("mds%d caps stale\n", session->s_mds); in send_renew_caps()
1590 session->s_renew_requested = jiffies; in send_renew_caps()
1594 state = ceph_mdsmap_get_state(mdsc->mdsmap, session->s_mds); in send_renew_caps()
1597 session->s_mds, ceph_mds_state_name(state)); in send_renew_caps()
1601 dout("send_renew_caps to mds%d (%s)\n", session->s_mds, in send_renew_caps()
1604 ++session->s_renew_seq); in send_renew_caps()
1607 ceph_con_send(&session->s_con, msg); in send_renew_caps()
1612 struct ceph_mds_session *session, u64 seq) in send_flushmsg_ack() argument
1617 session->s_mds, ceph_session_state_name(session->s_state), seq); in send_flushmsg_ack()
1621 ceph_con_send(&session->s_con, msg); in send_flushmsg_ack()
1632 struct ceph_mds_session *session, int is_renew) in renewed_caps() argument
1637 spin_lock(&session->s_cap_lock); in renewed_caps()
1638 was_stale = is_renew && time_after_eq(jiffies, session->s_cap_ttl); in renewed_caps()
1640 session->s_cap_ttl = session->s_renew_requested + in renewed_caps()
1644 if (time_before(jiffies, session->s_cap_ttl)) { in renewed_caps()
1645 pr_info("mds%d caps renewed\n", session->s_mds); in renewed_caps()
1648 pr_info("mds%d caps still stale\n", session->s_mds); in renewed_caps()
1652 session->s_mds, session->s_cap_ttl, was_stale ? "stale" : "fresh", in renewed_caps()
1653 time_before(jiffies, session->s_cap_ttl) ? "stale" : "fresh"); in renewed_caps()
1654 spin_unlock(&session->s_cap_lock); in renewed_caps()
1657 wake_up_session_caps(session, RENEWCAPS); in renewed_caps()
1664 struct ceph_mds_session *session) in request_close_session() argument
1669 session->s_mds, ceph_session_state_name(session->s_state), in request_close_session()
1670 session->s_seq); in request_close_session()
1671 msg = create_session_msg(CEPH_SESSION_REQUEST_CLOSE, session->s_seq); in request_close_session()
1674 ceph_con_send(&session->s_con, msg); in request_close_session()
1682 struct ceph_mds_session *session) in __close_session() argument
1684 if (session->s_state >= CEPH_MDS_SESSION_CLOSING) in __close_session()
1686 session->s_state = CEPH_MDS_SESSION_CLOSING; in __close_session()
1687 return request_close_session(mdsc, session); in __close_session()
1796 struct ceph_mds_session *session, in ceph_trim_caps() argument
1799 int trim_caps = session->s_nr_caps - max_caps; in ceph_trim_caps()
1802 session->s_mds, session->s_nr_caps, max_caps, trim_caps); in ceph_trim_caps()
1806 ceph_iterate_session_caps(session, trim_caps_cb, &remaining); in ceph_trim_caps()
1808 session->s_mds, session->s_nr_caps, max_caps, in ceph_trim_caps()
1812 ceph_flush_cap_releases(mdsc, session); in ceph_trim_caps()
1856 struct ceph_mds_session *session) in ceph_send_cap_releases() argument
1871 spin_lock(&session->s_cap_lock); in ceph_send_cap_releases()
1873 list_splice_init(&session->s_cap_releases, &tmp_list); in ceph_send_cap_releases()
1874 num_cap_releases = session->s_num_cap_releases; in ceph_send_cap_releases()
1875 session->s_num_cap_releases = 0; in ceph_send_cap_releases()
1876 spin_unlock(&session->s_cap_lock); in ceph_send_cap_releases()
1916 dout("send_cap_releases mds%d %p\n", session->s_mds, msg); in ceph_send_cap_releases()
1917 ceph_con_send(&session->s_con, msg); in ceph_send_cap_releases()
1924 spin_lock(&session->s_cap_lock); in ceph_send_cap_releases()
1925 if (!list_empty(&session->s_cap_releases)) in ceph_send_cap_releases()
1927 spin_unlock(&session->s_cap_lock); in ceph_send_cap_releases()
1936 dout("send_cap_releases mds%d %p\n", session->s_mds, msg); in ceph_send_cap_releases()
1937 ceph_con_send(&session->s_con, msg); in ceph_send_cap_releases()
1942 session->s_mds); in ceph_send_cap_releases()
1943 spin_lock(&session->s_cap_lock); in ceph_send_cap_releases()
1944 list_splice(&tmp_list, &session->s_cap_releases); in ceph_send_cap_releases()
1945 session->s_num_cap_releases += num_cap_releases; in ceph_send_cap_releases()
1946 spin_unlock(&session->s_cap_lock); in ceph_send_cap_releases()
1951 struct ceph_mds_session *session = in ceph_cap_release_work() local
1954 mutex_lock(&session->s_mutex); in ceph_cap_release_work()
1955 if (session->s_state == CEPH_MDS_SESSION_OPEN || in ceph_cap_release_work()
1956 session->s_state == CEPH_MDS_SESSION_HUNG) in ceph_cap_release_work()
1957 ceph_send_cap_releases(session->s_mdsc, session); in ceph_cap_release_work()
1958 mutex_unlock(&session->s_mutex); in ceph_cap_release_work()
1959 ceph_put_mds_session(session); in ceph_cap_release_work()
1963 struct ceph_mds_session *session) in ceph_flush_cap_releases() argument
1968 get_session(session); in ceph_flush_cap_releases()
1970 &session->s_cap_release_work)) { in ceph_flush_cap_releases()
1973 ceph_put_mds_session(session); in ceph_flush_cap_releases()
1981 void __ceph_queue_cap_release(struct ceph_mds_session *session, in __ceph_queue_cap_release() argument
1984 list_add_tail(&cap->session_caps, &session->s_cap_releases); in __ceph_queue_cap_release()
1985 session->s_num_cap_releases++; in __ceph_queue_cap_release()
1987 if (!(session->s_num_cap_releases % CEPH_CAPS_PER_RELEASE)) in __ceph_queue_cap_release()
1988 ceph_flush_cap_releases(session->s_mdsc, session); in __ceph_queue_cap_release()
2518 struct ceph_mds_session *session = NULL; in __do_request() local
2570 session = __ceph_lookup_mds_session(mdsc, mds); in __do_request()
2571 if (!session) { in __do_request()
2572 session = register_session(mdsc, mds); in __do_request()
2573 if (IS_ERR(session)) { in __do_request()
2574 err = PTR_ERR(session); in __do_request()
2578 req->r_session = get_session(session); in __do_request()
2580 dout("do_request mds%d session %p state %s\n", mds, session, in __do_request()
2581 ceph_session_state_name(session->s_state)); in __do_request()
2582 if (session->s_state != CEPH_MDS_SESSION_OPEN && in __do_request()
2583 session->s_state != CEPH_MDS_SESSION_HUNG) { in __do_request()
2584 if (session->s_state == CEPH_MDS_SESSION_REJECTED) { in __do_request()
2588 if (session->s_state == CEPH_MDS_SESSION_NEW || in __do_request()
2589 session->s_state == CEPH_MDS_SESSION_CLOSING) in __do_request()
2590 __open_session(mdsc, session); in __do_request()
2591 list_add(&req->r_wait, &session->s_waiting); in __do_request()
2604 ceph_con_send(&session->s_con, req->r_request); in __do_request()
2608 ceph_put_mds_session(session); in __do_request()
2785 static void handle_reply(struct ceph_mds_session *session, struct ceph_msg *msg) in handle_reply() argument
2787 struct ceph_mds_client *mdsc = session->s_mdsc; in handle_reply()
2794 int mds = session->s_mds; in handle_reply()
2814 if (req->r_session != session) { in handle_reply()
2816 " not mds%d\n", tid, session->s_mds, in handle_reply()
2903 if (test_bit(CEPHFS_FEATURE_REPLY_ENCODING, &session->s_features)) in handle_reply()
2906 err = parse_reply_info(msg, rinfo, session->s_con.peer_features); in handle_reply()
2909 mutex_lock(&session->s_mutex); in handle_reply()
2972 mutex_unlock(&session->s_mutex); in handle_reply()
2987 struct ceph_mds_session *session, in handle_forward() argument
3062 static void handle_session(struct ceph_mds_session *session, in handle_session() argument
3065 struct ceph_mds_client *mdsc = session->s_mdsc; in handle_session()
3066 int mds = session->s_mds; in handle_session()
3099 get_session(session); in handle_session()
3100 __unregister_session(mdsc, session); in handle_session()
3103 session->s_ttl = jiffies + HZ*mdsc->mdsmap->m_session_autoclose; in handle_session()
3106 mutex_lock(&session->s_mutex); in handle_session()
3109 mds, ceph_session_op_name(op), session, in handle_session()
3110 ceph_session_state_name(session->s_state), seq); in handle_session()
3112 if (session->s_state == CEPH_MDS_SESSION_HUNG) { in handle_session()
3113 session->s_state = CEPH_MDS_SESSION_OPEN; in handle_session()
3114 pr_info("mds%d came back\n", session->s_mds); in handle_session()
3119 if (session->s_state == CEPH_MDS_SESSION_RECONNECTING) in handle_session()
3120 pr_info("mds%d reconnect success\n", session->s_mds); in handle_session()
3121 session->s_state = CEPH_MDS_SESSION_OPEN; in handle_session()
3122 session->s_features = features; in handle_session()
3123 renewed_caps(mdsc, session, 0); in handle_session()
3126 __close_session(mdsc, session); in handle_session()
3130 if (session->s_renew_seq == seq) in handle_session()
3131 renewed_caps(mdsc, session, 1); in handle_session()
3135 if (session->s_state == CEPH_MDS_SESSION_RECONNECTING) in handle_session()
3136 pr_info("mds%d reconnect denied\n", session->s_mds); in handle_session()
3137 cleanup_session_requests(mdsc, session); in handle_session()
3138 remove_session_caps(session); in handle_session()
3145 session->s_mds); in handle_session()
3146 spin_lock(&session->s_gen_ttl_lock); in handle_session()
3147 session->s_cap_gen++; in handle_session()
3148 session->s_cap_ttl = jiffies - 1; in handle_session()
3149 spin_unlock(&session->s_gen_ttl_lock); in handle_session()
3150 send_renew_caps(mdsc, session); in handle_session()
3154 ceph_trim_caps(mdsc, session, le32_to_cpu(h->max_caps)); in handle_session()
3158 send_flushmsg_ack(mdsc, session, seq); in handle_session()
3162 dout("force_session_readonly %p\n", session); in handle_session()
3163 spin_lock(&session->s_cap_lock); in handle_session()
3164 session->s_readonly = true; in handle_session()
3165 spin_unlock(&session->s_cap_lock); in handle_session()
3166 wake_up_session_caps(session, FORCE_RO); in handle_session()
3170 WARN_ON(session->s_state != CEPH_MDS_SESSION_OPENING); in handle_session()
3171 pr_info("mds%d rejected session\n", session->s_mds); in handle_session()
3172 session->s_state = CEPH_MDS_SESSION_REJECTED; in handle_session()
3173 cleanup_session_requests(mdsc, session); in handle_session()
3174 remove_session_caps(session); in handle_session()
3185 mutex_unlock(&session->s_mutex); in handle_session()
3188 __wake_requests(mdsc, &session->s_waiting); in handle_session()
3194 ceph_put_mds_session(session); in handle_session()
3209 struct ceph_mds_session *session) in replay_unsafe_requests() argument
3215 dout("replay_unsafe_requests mds%d\n", session->s_mds); in replay_unsafe_requests()
3218 list_for_each_entry_safe(req, nreq, &session->s_unsafe, r_unsafe_item) { in replay_unsafe_requests()
3219 err = __prepare_send_request(mdsc, req, session->s_mds, true); in replay_unsafe_requests()
3222 ceph_con_send(&session->s_con, req->r_request); in replay_unsafe_requests()
3239 req->r_session->s_mds == session->s_mds) { in replay_unsafe_requests()
3241 session->s_mds, true); in replay_unsafe_requests()
3244 ceph_con_send(&session->s_con, req->r_request); in replay_unsafe_requests()
3312 ceph_con_send(&recon_state->session->s_con, reply); in send_reconnect_partial()
3351 cap->cap_gen = cap->session->s_cap_gen; in encode_caps_cb()
3574 struct ceph_mds_session *session) in send_mds_reconnect() argument
3577 int mds = session->s_mds; in send_mds_reconnect()
3580 .session = session, in send_mds_reconnect()
3594 mutex_lock(&session->s_mutex); in send_mds_reconnect()
3595 session->s_state = CEPH_MDS_SESSION_RECONNECTING; in send_mds_reconnect()
3596 session->s_seq = 0; in send_mds_reconnect()
3598 dout("session %p state %s\n", session, in send_mds_reconnect()
3599 ceph_session_state_name(session->s_state)); in send_mds_reconnect()
3601 spin_lock(&session->s_gen_ttl_lock); in send_mds_reconnect()
3602 session->s_cap_gen++; in send_mds_reconnect()
3603 spin_unlock(&session->s_gen_ttl_lock); in send_mds_reconnect()
3605 spin_lock(&session->s_cap_lock); in send_mds_reconnect()
3607 session->s_readonly = 0; in send_mds_reconnect()
3613 session->s_cap_reconnect = 1; in send_mds_reconnect()
3615 detach_cap_releases(session, &dispose); in send_mds_reconnect()
3616 spin_unlock(&session->s_cap_lock); in send_mds_reconnect()
3623 ceph_con_close(&session->s_con); in send_mds_reconnect()
3624 ceph_con_open(&session->s_con, in send_mds_reconnect()
3629 replay_unsafe_requests(mdsc, session); in send_mds_reconnect()
3631 ceph_early_kick_flushing_caps(mdsc, session); in send_mds_reconnect()
3640 if (test_bit(CEPHFS_FEATURE_MULTI_RECONNECT, &session->s_features)) { in send_mds_reconnect()
3643 } else if (session->s_con.peer_features & CEPH_FEATURE_MDSENC) { in send_mds_reconnect()
3649 err = ceph_iterate_session_caps(session, encode_caps_cb, &recon_state); in send_mds_reconnect()
3651 spin_lock(&session->s_cap_lock); in send_mds_reconnect()
3652 session->s_cap_reconnect = 0; in send_mds_reconnect()
3653 spin_unlock(&session->s_cap_lock); in send_mds_reconnect()
3716 ceph_con_send(&session->s_con, reply); in send_mds_reconnect()
3718 mutex_unlock(&session->s_mutex); in send_mds_reconnect()
3721 __wake_requests(mdsc, &session->s_waiting); in send_mds_reconnect()
3731 mutex_unlock(&session->s_mutex); in send_mds_reconnect()
3862 struct ceph_mds_session *session, in handle_lease() argument
3869 int mds = session->s_mds; in handle_lease()
3895 mutex_lock(&session->s_mutex); in handle_lease()
3896 session->s_seq++; in handle_lease()
3920 if (di->lease_session == session) { in handle_lease()
3929 if (di->lease_session == session && in handle_lease()
3930 di->lease_gen == session->s_cap_gen && in handle_lease()
3954 ceph_con_send(&session->s_con, msg); in handle_lease()
3957 mutex_unlock(&session->s_mutex); in handle_lease()
3967 void ceph_mdsc_lease_send_msg(struct ceph_mds_session *session, in ceph_mdsc_lease_send_msg() argument
3977 dentry, ceph_lease_op_name(action), session->s_mds); in ceph_mdsc_lease_send_msg()
4002 ceph_con_send(&session->s_con, msg); in ceph_mdsc_lease_send_msg()
4342 struct ceph_mds_session *session; in ceph_mdsc_close_sessions() local
4351 session = __ceph_lookup_mds_session(mdsc, i); in ceph_mdsc_close_sessions()
4352 if (!session) in ceph_mdsc_close_sessions()
4355 mutex_lock(&session->s_mutex); in ceph_mdsc_close_sessions()
4356 if (__close_session(mdsc, session) <= 0) in ceph_mdsc_close_sessions()
4358 mutex_unlock(&session->s_mutex); in ceph_mdsc_close_sessions()
4359 ceph_put_mds_session(session); in ceph_mdsc_close_sessions()
4373 session = get_session(mdsc->sessions[i]); in ceph_mdsc_close_sessions()
4374 __unregister_session(mdsc, session); in ceph_mdsc_close_sessions()
4376 mutex_lock(&session->s_mutex); in ceph_mdsc_close_sessions()
4377 remove_session_caps(session); in ceph_mdsc_close_sessions()
4378 mutex_unlock(&session->s_mutex); in ceph_mdsc_close_sessions()
4379 ceph_put_mds_session(session); in ceph_mdsc_close_sessions()
4397 struct ceph_mds_session *session; in ceph_mdsc_force_umount() local
4404 session = __ceph_lookup_mds_session(mdsc, mds); in ceph_mdsc_force_umount()
4405 if (!session) in ceph_mdsc_force_umount()
4408 if (session->s_state == CEPH_MDS_SESSION_REJECTED) in ceph_mdsc_force_umount()
4409 __unregister_session(mdsc, session); in ceph_mdsc_force_umount()
4410 __wake_requests(mdsc, &session->s_waiting); in ceph_mdsc_force_umount()
4413 mutex_lock(&session->s_mutex); in ceph_mdsc_force_umount()
4414 __close_session(mdsc, session); in ceph_mdsc_force_umount()
4415 if (session->s_state == CEPH_MDS_SESSION_CLOSING) { in ceph_mdsc_force_umount()
4416 cleanup_session_requests(mdsc, session); in ceph_mdsc_force_umount()
4417 remove_session_caps(session); in ceph_mdsc_force_umount()
4419 mutex_unlock(&session->s_mutex); in ceph_mdsc_force_umount()
4420 ceph_put_mds_session(session); in ceph_mdsc_force_umount()