Lines Matching refs:session

429 	struct ceph_mds_session *session;  in __ceph_lookup_mds_session()  local
433 session = mdsc->sessions[mds]; in __ceph_lookup_mds_session()
434 dout("lookup_mds_session %p %d\n", session, in __ceph_lookup_mds_session()
435 refcount_read(&session->s_ref)); in __ceph_lookup_mds_session()
436 get_session(session); in __ceph_lookup_mds_session()
437 return session; in __ceph_lookup_mds_session()
868 mds = cap->session->s_mds; in __choose_mds()
1014 struct ceph_mds_session *session) in __open_session() argument
1018 int mds = session->s_mds; in __open_session()
1024 session->s_state = CEPH_MDS_SESSION_OPENING; in __open_session()
1025 session->s_renew_requested = jiffies; in __open_session()
1028 msg = create_session_open_msg(mdsc, session->s_seq); in __open_session()
1031 ceph_con_send(&session->s_con, msg); in __open_session()
1043 struct ceph_mds_session *session; in __open_export_target_session() local
1045 session = __ceph_lookup_mds_session(mdsc, target); in __open_export_target_session()
1046 if (!session) { in __open_export_target_session()
1047 session = register_session(mdsc, target); in __open_export_target_session()
1048 if (IS_ERR(session)) in __open_export_target_session()
1049 return session; in __open_export_target_session()
1051 if (session->s_state == CEPH_MDS_SESSION_NEW || in __open_export_target_session()
1052 session->s_state == CEPH_MDS_SESSION_CLOSING) in __open_export_target_session()
1053 __open_session(mdsc, session); in __open_export_target_session()
1055 return session; in __open_export_target_session()
1061 struct ceph_mds_session *session; in ceph_mdsc_open_export_target_session() local
1066 session = __open_export_target_session(mdsc, target); in ceph_mdsc_open_export_target_session()
1069 return session; in ceph_mdsc_open_export_target_session()
1073 struct ceph_mds_session *session) in __open_export_target_sessions() argument
1077 int i, mds = session->s_mds; in __open_export_target_sessions()
1084 session->s_mds, mi->num_export_targets); in __open_export_target_sessions()
1094 struct ceph_mds_session *session) in ceph_mdsc_open_export_target_sessions() argument
1097 __open_export_target_sessions(mdsc, session); in ceph_mdsc_open_export_target_sessions()
1105 static void detach_cap_releases(struct ceph_mds_session *session, in detach_cap_releases() argument
1108 lockdep_assert_held(&session->s_cap_lock); in detach_cap_releases()
1110 list_splice_init(&session->s_cap_releases, target); in detach_cap_releases()
1111 session->s_num_cap_releases = 0; in detach_cap_releases()
1112 dout("dispose_cap_releases mds%d\n", session->s_mds); in detach_cap_releases()
1128 struct ceph_mds_session *session) in cleanup_session_requests() argument
1133 dout("cleanup_session_requests mds%d\n", session->s_mds); in cleanup_session_requests()
1135 while (!list_empty(&session->s_unsafe)) { in cleanup_session_requests()
1136 req = list_first_entry(&session->s_unsafe, in cleanup_session_requests()
1148 req->r_session->s_mds == session->s_mds) in cleanup_session_requests()
1160 static int iterate_session_caps(struct ceph_mds_session *session, in iterate_session_caps() argument
1170 dout("iterate_session_caps %p mds%d\n", session, session->s_mds); in iterate_session_caps()
1171 spin_lock(&session->s_cap_lock); in iterate_session_caps()
1172 p = session->s_caps.next; in iterate_session_caps()
1173 while (p != &session->s_caps) { in iterate_session_caps()
1180 session->s_cap_iterator = cap; in iterate_session_caps()
1181 spin_unlock(&session->s_cap_lock); in iterate_session_caps()
1188 ceph_put_cap(session->s_mdsc, old_cap); in iterate_session_caps()
1195 spin_lock(&session->s_cap_lock); in iterate_session_caps()
1200 BUG_ON(cap->session != session); in iterate_session_caps()
1201 cap->session = NULL; in iterate_session_caps()
1203 session->s_nr_caps--; in iterate_session_caps()
1206 &session->s_cap_releases); in iterate_session_caps()
1207 session->s_num_cap_releases++; in iterate_session_caps()
1217 session->s_cap_iterator = NULL; in iterate_session_caps()
1218 spin_unlock(&session->s_cap_lock); in iterate_session_caps()
1222 ceph_put_cap(session->s_mdsc, old_cap); in iterate_session_caps()
1314 static void remove_session_caps(struct ceph_mds_session *session) in remove_session_caps() argument
1316 struct ceph_fs_client *fsc = session->s_mdsc->fsc; in remove_session_caps()
1320 dout("remove_session_caps on %p\n", session); in remove_session_caps()
1321 iterate_session_caps(session, remove_session_caps_cb, fsc); in remove_session_caps()
1325 spin_lock(&session->s_cap_lock); in remove_session_caps()
1326 if (session->s_nr_caps > 0) { in remove_session_caps()
1337 while (!list_empty(&session->s_caps)) { in remove_session_caps()
1338 cap = list_entry(session->s_caps.next, in remove_session_caps()
1344 spin_unlock(&session->s_cap_lock); in remove_session_caps()
1349 spin_lock(&session->s_cap_lock); in remove_session_caps()
1354 detach_cap_releases(session, &dispose); in remove_session_caps()
1356 BUG_ON(session->s_nr_caps > 0); in remove_session_caps()
1357 BUG_ON(!list_empty(&session->s_cap_flushing)); in remove_session_caps()
1358 spin_unlock(&session->s_cap_lock); in remove_session_caps()
1359 dispose_cap_releases(session->s_mdsc, &dispose); in remove_session_caps()
1383 static void wake_up_session_caps(struct ceph_mds_session *session, in wake_up_session_caps() argument
1386 dout("wake_up_session_caps %p mds%d\n", session, session->s_mds); in wake_up_session_caps()
1387 iterate_session_caps(session, wake_up_session_cb, in wake_up_session_caps()
1398 struct ceph_mds_session *session) in send_renew_caps() argument
1403 if (time_after_eq(jiffies, session->s_cap_ttl) && in send_renew_caps()
1404 time_after_eq(session->s_cap_ttl, session->s_renew_requested)) in send_renew_caps()
1405 pr_info("mds%d caps stale\n", session->s_mds); in send_renew_caps()
1406 session->s_renew_requested = jiffies; in send_renew_caps()
1410 state = ceph_mdsmap_get_state(mdsc->mdsmap, session->s_mds); in send_renew_caps()
1413 session->s_mds, ceph_mds_state_name(state)); in send_renew_caps()
1417 dout("send_renew_caps to mds%d (%s)\n", session->s_mds, in send_renew_caps()
1420 ++session->s_renew_seq); in send_renew_caps()
1423 ceph_con_send(&session->s_con, msg); in send_renew_caps()
1428 struct ceph_mds_session *session, u64 seq) in send_flushmsg_ack() argument
1433 session->s_mds, ceph_session_state_name(session->s_state), seq); in send_flushmsg_ack()
1437 ceph_con_send(&session->s_con, msg); in send_flushmsg_ack()
1448 struct ceph_mds_session *session, int is_renew) in renewed_caps() argument
1453 spin_lock(&session->s_cap_lock); in renewed_caps()
1454 was_stale = is_renew && time_after_eq(jiffies, session->s_cap_ttl); in renewed_caps()
1456 session->s_cap_ttl = session->s_renew_requested + in renewed_caps()
1460 if (time_before(jiffies, session->s_cap_ttl)) { in renewed_caps()
1461 pr_info("mds%d caps renewed\n", session->s_mds); in renewed_caps()
1464 pr_info("mds%d caps still stale\n", session->s_mds); in renewed_caps()
1468 session->s_mds, session->s_cap_ttl, was_stale ? "stale" : "fresh", in renewed_caps()
1469 time_before(jiffies, session->s_cap_ttl) ? "stale" : "fresh"); in renewed_caps()
1470 spin_unlock(&session->s_cap_lock); in renewed_caps()
1473 wake_up_session_caps(session, 0); in renewed_caps()
1480 struct ceph_mds_session *session) in request_close_session() argument
1485 session->s_mds, ceph_session_state_name(session->s_state), in request_close_session()
1486 session->s_seq); in request_close_session()
1487 msg = create_session_msg(CEPH_SESSION_REQUEST_CLOSE, session->s_seq); in request_close_session()
1490 ceph_con_send(&session->s_con, msg); in request_close_session()
1498 struct ceph_mds_session *session) in __close_session() argument
1500 if (session->s_state >= CEPH_MDS_SESSION_CLOSING) in __close_session()
1502 session->s_state = CEPH_MDS_SESSION_CLOSING; in __close_session()
1503 return request_close_session(mdsc, session); in __close_session()
1541 struct ceph_mds_session *session = arg; in trim_caps_cb() local
1545 if (session->s_trim_caps <= 0) in trim_caps_cb()
1582 session->s_trim_caps--; in trim_caps_cb()
1594 session->s_trim_caps--; in trim_caps_cb()
1612 struct ceph_mds_session *session, in ceph_trim_caps() argument
1615 int trim_caps = session->s_nr_caps - max_caps; in ceph_trim_caps()
1618 session->s_mds, session->s_nr_caps, max_caps, trim_caps); in ceph_trim_caps()
1620 session->s_trim_caps = trim_caps; in ceph_trim_caps()
1621 iterate_session_caps(session, trim_caps_cb, session); in ceph_trim_caps()
1623 session->s_mds, session->s_nr_caps, max_caps, in ceph_trim_caps()
1624 trim_caps - session->s_trim_caps); in ceph_trim_caps()
1625 session->s_trim_caps = 0; in ceph_trim_caps()
1628 ceph_send_cap_releases(mdsc, session); in ceph_trim_caps()
1672 struct ceph_mds_session *session) in ceph_send_cap_releases() argument
1687 spin_lock(&session->s_cap_lock); in ceph_send_cap_releases()
1689 list_splice_init(&session->s_cap_releases, &tmp_list); in ceph_send_cap_releases()
1690 num_cap_releases = session->s_num_cap_releases; in ceph_send_cap_releases()
1691 session->s_num_cap_releases = 0; in ceph_send_cap_releases()
1692 spin_unlock(&session->s_cap_lock); in ceph_send_cap_releases()
1731 dout("send_cap_releases mds%d %p\n", session->s_mds, msg); in ceph_send_cap_releases()
1732 ceph_con_send(&session->s_con, msg); in ceph_send_cap_releases()
1739 spin_lock(&session->s_cap_lock); in ceph_send_cap_releases()
1740 if (!list_empty(&session->s_cap_releases)) in ceph_send_cap_releases()
1742 spin_unlock(&session->s_cap_lock); in ceph_send_cap_releases()
1751 dout("send_cap_releases mds%d %p\n", session->s_mds, msg); in ceph_send_cap_releases()
1752 ceph_con_send(&session->s_con, msg); in ceph_send_cap_releases()
1757 session->s_mds); in ceph_send_cap_releases()
1758 spin_lock(&session->s_cap_lock); in ceph_send_cap_releases()
1759 list_splice(&tmp_list, &session->s_cap_releases); in ceph_send_cap_releases()
1760 session->s_num_cap_releases += num_cap_releases; in ceph_send_cap_releases()
1761 spin_unlock(&session->s_cap_lock); in ceph_send_cap_releases()
2263 struct ceph_mds_session *session = NULL; in __do_request() local
2315 session = __ceph_lookup_mds_session(mdsc, mds); in __do_request()
2316 if (!session) { in __do_request()
2317 session = register_session(mdsc, mds); in __do_request()
2318 if (IS_ERR(session)) { in __do_request()
2319 err = PTR_ERR(session); in __do_request()
2323 req->r_session = get_session(session); in __do_request()
2325 dout("do_request mds%d session %p state %s\n", mds, session, in __do_request()
2326 ceph_session_state_name(session->s_state)); in __do_request()
2327 if (session->s_state != CEPH_MDS_SESSION_OPEN && in __do_request()
2328 session->s_state != CEPH_MDS_SESSION_HUNG) { in __do_request()
2329 if (session->s_state == CEPH_MDS_SESSION_REJECTED) { in __do_request()
2333 if (session->s_state == CEPH_MDS_SESSION_NEW || in __do_request()
2334 session->s_state == CEPH_MDS_SESSION_CLOSING) in __do_request()
2335 __open_session(mdsc, session); in __do_request()
2336 list_add(&req->r_wait, &session->s_waiting); in __do_request()
2349 ceph_con_send(&session->s_con, req->r_request); in __do_request()
2353 ceph_put_mds_session(session); in __do_request()
2526 static void handle_reply(struct ceph_mds_session *session, struct ceph_msg *msg) in handle_reply() argument
2528 struct ceph_mds_client *mdsc = session->s_mdsc; in handle_reply()
2535 int mds = session->s_mds; in handle_reply()
2555 if (req->r_session != session) { in handle_reply()
2557 " not mds%d\n", tid, session->s_mds, in handle_reply()
2644 err = parse_reply_info(msg, rinfo, session->s_con.peer_features); in handle_reply()
2647 mutex_lock(&session->s_mutex); in handle_reply()
2705 mutex_unlock(&session->s_mutex); in handle_reply()
2720 struct ceph_mds_session *session, in handle_forward() argument
2771 static void handle_session(struct ceph_mds_session *session, in handle_session() argument
2774 struct ceph_mds_client *mdsc = session->s_mdsc; in handle_session()
2777 int mds = session->s_mds; in handle_session()
2789 get_session(session); in handle_session()
2790 __unregister_session(mdsc, session); in handle_session()
2793 session->s_ttl = jiffies + HZ*mdsc->mdsmap->m_session_autoclose; in handle_session()
2796 mutex_lock(&session->s_mutex); in handle_session()
2799 mds, ceph_session_op_name(op), session, in handle_session()
2800 ceph_session_state_name(session->s_state), seq); in handle_session()
2802 if (session->s_state == CEPH_MDS_SESSION_HUNG) { in handle_session()
2803 session->s_state = CEPH_MDS_SESSION_OPEN; in handle_session()
2804 pr_info("mds%d came back\n", session->s_mds); in handle_session()
2809 if (session->s_state == CEPH_MDS_SESSION_RECONNECTING) in handle_session()
2810 pr_info("mds%d reconnect success\n", session->s_mds); in handle_session()
2811 session->s_state = CEPH_MDS_SESSION_OPEN; in handle_session()
2812 renewed_caps(mdsc, session, 0); in handle_session()
2815 __close_session(mdsc, session); in handle_session()
2819 if (session->s_renew_seq == seq) in handle_session()
2820 renewed_caps(mdsc, session, 1); in handle_session()
2824 if (session->s_state == CEPH_MDS_SESSION_RECONNECTING) in handle_session()
2825 pr_info("mds%d reconnect denied\n", session->s_mds); in handle_session()
2826 cleanup_session_requests(mdsc, session); in handle_session()
2827 remove_session_caps(session); in handle_session()
2834 session->s_mds); in handle_session()
2835 spin_lock(&session->s_gen_ttl_lock); in handle_session()
2836 session->s_cap_gen++; in handle_session()
2837 session->s_cap_ttl = jiffies - 1; in handle_session()
2838 spin_unlock(&session->s_gen_ttl_lock); in handle_session()
2839 send_renew_caps(mdsc, session); in handle_session()
2843 ceph_trim_caps(mdsc, session, le32_to_cpu(h->max_caps)); in handle_session()
2847 send_flushmsg_ack(mdsc, session, seq); in handle_session()
2851 dout("force_session_readonly %p\n", session); in handle_session()
2852 spin_lock(&session->s_cap_lock); in handle_session()
2853 session->s_readonly = true; in handle_session()
2854 spin_unlock(&session->s_cap_lock); in handle_session()
2855 wake_up_session_caps(session, 0); in handle_session()
2859 WARN_ON(session->s_state != CEPH_MDS_SESSION_OPENING); in handle_session()
2860 pr_info("mds%d rejected session\n", session->s_mds); in handle_session()
2861 session->s_state = CEPH_MDS_SESSION_REJECTED; in handle_session()
2862 cleanup_session_requests(mdsc, session); in handle_session()
2863 remove_session_caps(session); in handle_session()
2872 mutex_unlock(&session->s_mutex); in handle_session()
2875 __wake_requests(mdsc, &session->s_waiting); in handle_session()
2881 ceph_put_mds_session(session); in handle_session()
2896 struct ceph_mds_session *session) in replay_unsafe_requests() argument
2902 dout("replay_unsafe_requests mds%d\n", session->s_mds); in replay_unsafe_requests()
2905 list_for_each_entry_safe(req, nreq, &session->s_unsafe, r_unsafe_item) { in replay_unsafe_requests()
2906 err = __prepare_send_request(mdsc, req, session->s_mds, true); in replay_unsafe_requests()
2909 ceph_con_send(&session->s_con, req->r_request); in replay_unsafe_requests()
2926 req->r_session->s_mds == session->s_mds) { in replay_unsafe_requests()
2928 session->s_mds, true); in replay_unsafe_requests()
2931 ceph_con_send(&session->s_con, req->r_request); in replay_unsafe_requests()
2981 cap->cap_gen = cap->session->s_cap_gen; in encode_caps_cb()
3116 struct ceph_mds_session *session) in send_mds_reconnect() argument
3120 int mds = session->s_mds; in send_mds_reconnect()
3138 mutex_lock(&session->s_mutex); in send_mds_reconnect()
3139 session->s_state = CEPH_MDS_SESSION_RECONNECTING; in send_mds_reconnect()
3140 session->s_seq = 0; in send_mds_reconnect()
3142 dout("session %p state %s\n", session, in send_mds_reconnect()
3143 ceph_session_state_name(session->s_state)); in send_mds_reconnect()
3145 spin_lock(&session->s_gen_ttl_lock); in send_mds_reconnect()
3146 session->s_cap_gen++; in send_mds_reconnect()
3147 spin_unlock(&session->s_gen_ttl_lock); in send_mds_reconnect()
3149 spin_lock(&session->s_cap_lock); in send_mds_reconnect()
3151 session->s_readonly = 0; in send_mds_reconnect()
3157 session->s_cap_reconnect = 1; in send_mds_reconnect()
3159 detach_cap_releases(session, &dispose); in send_mds_reconnect()
3160 spin_unlock(&session->s_cap_lock); in send_mds_reconnect()
3167 ceph_con_close(&session->s_con); in send_mds_reconnect()
3168 ceph_con_open(&session->s_con, in send_mds_reconnect()
3173 replay_unsafe_requests(mdsc, session); in send_mds_reconnect()
3178 s_nr_caps = session->s_nr_caps; in send_mds_reconnect()
3185 if (session->s_con.peer_features & CEPH_FEATURE_MDSENC) in send_mds_reconnect()
3187 else if (session->s_con.peer_features & CEPH_FEATURE_FLOCK) in send_mds_reconnect()
3191 err = iterate_session_caps(session, encode_caps_cb, &recon_state); in send_mds_reconnect()
3195 spin_lock(&session->s_cap_lock); in send_mds_reconnect()
3196 session->s_cap_reconnect = 0; in send_mds_reconnect()
3197 spin_unlock(&session->s_cap_lock); in send_mds_reconnect()
3233 ceph_early_kick_flushing_caps(mdsc, session); in send_mds_reconnect()
3235 ceph_con_send(&session->s_con, reply); in send_mds_reconnect()
3237 mutex_unlock(&session->s_mutex); in send_mds_reconnect()
3240 __wake_requests(mdsc, &session->s_waiting); in send_mds_reconnect()
3249 mutex_unlock(&session->s_mutex); in send_mds_reconnect()
3387 struct ceph_mds_session *session, in handle_lease() argument
3394 int mds = session->s_mds; in handle_lease()
3420 mutex_lock(&session->s_mutex); in handle_lease()
3421 session->s_seq++; in handle_lease()
3445 if (di->lease_session == session) { in handle_lease()
3454 if (di->lease_session == session && in handle_lease()
3455 di->lease_gen == session->s_cap_gen && in handle_lease()
3479 ceph_con_send(&session->s_con, msg); in handle_lease()
3483 mutex_unlock(&session->s_mutex); in handle_lease()
3491 void ceph_mdsc_lease_send_msg(struct ceph_mds_session *session, in ceph_mdsc_lease_send_msg() argument
3502 inode, dentry, ceph_lease_op_name(action), session->s_mds); in ceph_mdsc_lease_send_msg()
3524 ceph_con_send(&session->s_con, msg); in ceph_mdsc_lease_send_msg()
3821 struct ceph_mds_session *session; in ceph_mdsc_close_sessions() local
3830 session = __ceph_lookup_mds_session(mdsc, i); in ceph_mdsc_close_sessions()
3831 if (!session) in ceph_mdsc_close_sessions()
3834 mutex_lock(&session->s_mutex); in ceph_mdsc_close_sessions()
3835 if (__close_session(mdsc, session) <= 0) in ceph_mdsc_close_sessions()
3837 mutex_unlock(&session->s_mutex); in ceph_mdsc_close_sessions()
3838 ceph_put_mds_session(session); in ceph_mdsc_close_sessions()
3852 session = get_session(mdsc->sessions[i]); in ceph_mdsc_close_sessions()
3853 __unregister_session(mdsc, session); in ceph_mdsc_close_sessions()
3855 mutex_lock(&session->s_mutex); in ceph_mdsc_close_sessions()
3856 remove_session_caps(session); in ceph_mdsc_close_sessions()
3857 mutex_unlock(&session->s_mutex); in ceph_mdsc_close_sessions()
3858 ceph_put_mds_session(session); in ceph_mdsc_close_sessions()
3874 struct ceph_mds_session *session; in ceph_mdsc_force_umount() local
3881 session = __ceph_lookup_mds_session(mdsc, mds); in ceph_mdsc_force_umount()
3882 if (!session) in ceph_mdsc_force_umount()
3885 mutex_lock(&session->s_mutex); in ceph_mdsc_force_umount()
3886 __close_session(mdsc, session); in ceph_mdsc_force_umount()
3887 if (session->s_state == CEPH_MDS_SESSION_CLOSING) { in ceph_mdsc_force_umount()
3888 cleanup_session_requests(mdsc, session); in ceph_mdsc_force_umount()
3889 remove_session_caps(session); in ceph_mdsc_force_umount()
3891 mutex_unlock(&session->s_mutex); in ceph_mdsc_force_umount()
3892 ceph_put_mds_session(session); in ceph_mdsc_force_umount()