Lines Matching refs:session

394 	struct ceph_mds_session *session;  in __ceph_lookup_mds_session()  local
398 session = mdsc->sessions[mds]; in __ceph_lookup_mds_session()
399 dout("lookup_mds_session %p %d\n", session, in __ceph_lookup_mds_session()
400 atomic_read(&session->s_ref)); in __ceph_lookup_mds_session()
401 get_session(session); in __ceph_lookup_mds_session()
402 return session; in __ceph_lookup_mds_session()
818 mds = cap->session->s_mds; in __choose_mds()
930 struct ceph_mds_session *session) in __open_session() argument
934 int mds = session->s_mds; in __open_session()
940 session->s_state = CEPH_MDS_SESSION_OPENING; in __open_session()
941 session->s_renew_requested = jiffies; in __open_session()
944 msg = create_session_open_msg(mdsc, session->s_seq); in __open_session()
947 ceph_con_send(&session->s_con, msg); in __open_session()
959 struct ceph_mds_session *session; in __open_export_target_session() local
961 session = __ceph_lookup_mds_session(mdsc, target); in __open_export_target_session()
962 if (!session) { in __open_export_target_session()
963 session = register_session(mdsc, target); in __open_export_target_session()
964 if (IS_ERR(session)) in __open_export_target_session()
965 return session; in __open_export_target_session()
967 if (session->s_state == CEPH_MDS_SESSION_NEW || in __open_export_target_session()
968 session->s_state == CEPH_MDS_SESSION_CLOSING) in __open_export_target_session()
969 __open_session(mdsc, session); in __open_export_target_session()
971 return session; in __open_export_target_session()
977 struct ceph_mds_session *session; in ceph_mdsc_open_export_target_session() local
982 session = __open_export_target_session(mdsc, target); in ceph_mdsc_open_export_target_session()
985 return session; in ceph_mdsc_open_export_target_session()
989 struct ceph_mds_session *session) in __open_export_target_sessions() argument
993 int i, mds = session->s_mds; in __open_export_target_sessions()
1000 session->s_mds, mi->num_export_targets); in __open_export_target_sessions()
1010 struct ceph_mds_session *session) in ceph_mdsc_open_export_target_sessions() argument
1013 __open_export_target_sessions(mdsc, session); in ceph_mdsc_open_export_target_sessions()
1023 struct ceph_mds_session *session) in cleanup_cap_releases() argument
1024 __releases(session->s_cap_lock) in cleanup_cap_releases()
1027 list_splice_init(&session->s_cap_releases, &tmp_list); in cleanup_cap_releases()
1028 session->s_num_cap_releases = 0; in cleanup_cap_releases()
1029 spin_unlock(&session->s_cap_lock); in cleanup_cap_releases()
1031 dout("cleanup_cap_releases mds%d\n", session->s_mds); in cleanup_cap_releases()
1043 struct ceph_mds_session *session) in cleanup_session_requests() argument
1048 dout("cleanup_session_requests mds%d\n", session->s_mds); in cleanup_session_requests()
1050 while (!list_empty(&session->s_unsafe)) { in cleanup_session_requests()
1051 req = list_first_entry(&session->s_unsafe, in cleanup_session_requests()
1064 req->r_session->s_mds == session->s_mds) in cleanup_session_requests()
1076 static int iterate_session_caps(struct ceph_mds_session *session, in iterate_session_caps() argument
1086 dout("iterate_session_caps %p mds%d\n", session, session->s_mds); in iterate_session_caps()
1087 spin_lock(&session->s_cap_lock); in iterate_session_caps()
1088 p = session->s_caps.next; in iterate_session_caps()
1089 while (p != &session->s_caps) { in iterate_session_caps()
1096 session->s_cap_iterator = cap; in iterate_session_caps()
1097 spin_unlock(&session->s_cap_lock); in iterate_session_caps()
1104 ceph_put_cap(session->s_mdsc, old_cap); in iterate_session_caps()
1111 spin_lock(&session->s_cap_lock); in iterate_session_caps()
1116 BUG_ON(cap->session != session); in iterate_session_caps()
1117 cap->session = NULL; in iterate_session_caps()
1119 session->s_nr_caps--; in iterate_session_caps()
1122 &session->s_cap_releases); in iterate_session_caps()
1123 session->s_num_cap_releases++; in iterate_session_caps()
1133 session->s_cap_iterator = NULL; in iterate_session_caps()
1134 spin_unlock(&session->s_cap_lock); in iterate_session_caps()
1138 ceph_put_cap(session->s_mdsc, old_cap); in iterate_session_caps()
1215 static void remove_session_caps(struct ceph_mds_session *session) in remove_session_caps() argument
1217 dout("remove_session_caps on %p\n", session); in remove_session_caps()
1218 iterate_session_caps(session, remove_session_caps_cb, NULL); in remove_session_caps()
1220 spin_lock(&session->s_cap_lock); in remove_session_caps()
1221 if (session->s_nr_caps > 0) { in remove_session_caps()
1222 struct super_block *sb = session->s_mdsc->fsc->sb; in remove_session_caps()
1233 while (!list_empty(&session->s_caps)) { in remove_session_caps()
1234 cap = list_entry(session->s_caps.next, in remove_session_caps()
1240 spin_unlock(&session->s_cap_lock); in remove_session_caps()
1245 spin_lock(&session->s_cap_lock); in remove_session_caps()
1250 cleanup_cap_releases(session->s_mdsc, session); in remove_session_caps()
1252 BUG_ON(session->s_nr_caps > 0); in remove_session_caps()
1253 BUG_ON(!list_empty(&session->s_cap_flushing)); in remove_session_caps()
1277 static void wake_up_session_caps(struct ceph_mds_session *session, in wake_up_session_caps() argument
1280 dout("wake_up_session_caps %p mds%d\n", session, session->s_mds); in wake_up_session_caps()
1281 iterate_session_caps(session, wake_up_session_cb, in wake_up_session_caps()
1292 struct ceph_mds_session *session) in send_renew_caps() argument
1297 if (time_after_eq(jiffies, session->s_cap_ttl) && in send_renew_caps()
1298 time_after_eq(session->s_cap_ttl, session->s_renew_requested)) in send_renew_caps()
1299 pr_info("mds%d caps stale\n", session->s_mds); in send_renew_caps()
1300 session->s_renew_requested = jiffies; in send_renew_caps()
1304 state = ceph_mdsmap_get_state(mdsc->mdsmap, session->s_mds); in send_renew_caps()
1307 session->s_mds, ceph_mds_state_name(state)); in send_renew_caps()
1311 dout("send_renew_caps to mds%d (%s)\n", session->s_mds, in send_renew_caps()
1314 ++session->s_renew_seq); in send_renew_caps()
1317 ceph_con_send(&session->s_con, msg); in send_renew_caps()
1322 struct ceph_mds_session *session, u64 seq) in send_flushmsg_ack() argument
1327 session->s_mds, ceph_session_state_name(session->s_state), seq); in send_flushmsg_ack()
1331 ceph_con_send(&session->s_con, msg); in send_flushmsg_ack()
1342 struct ceph_mds_session *session, int is_renew) in renewed_caps() argument
1347 spin_lock(&session->s_cap_lock); in renewed_caps()
1348 was_stale = is_renew && time_after_eq(jiffies, session->s_cap_ttl); in renewed_caps()
1350 session->s_cap_ttl = session->s_renew_requested + in renewed_caps()
1354 if (time_before(jiffies, session->s_cap_ttl)) { in renewed_caps()
1355 pr_info("mds%d caps renewed\n", session->s_mds); in renewed_caps()
1358 pr_info("mds%d caps still stale\n", session->s_mds); in renewed_caps()
1362 session->s_mds, session->s_cap_ttl, was_stale ? "stale" : "fresh", in renewed_caps()
1363 time_before(jiffies, session->s_cap_ttl) ? "stale" : "fresh"); in renewed_caps()
1364 spin_unlock(&session->s_cap_lock); in renewed_caps()
1367 wake_up_session_caps(session, 0); in renewed_caps()
1374 struct ceph_mds_session *session) in request_close_session() argument
1379 session->s_mds, ceph_session_state_name(session->s_state), in request_close_session()
1380 session->s_seq); in request_close_session()
1381 msg = create_session_msg(CEPH_SESSION_REQUEST_CLOSE, session->s_seq); in request_close_session()
1384 ceph_con_send(&session->s_con, msg); in request_close_session()
1392 struct ceph_mds_session *session) in __close_session() argument
1394 if (session->s_state >= CEPH_MDS_SESSION_CLOSING) in __close_session()
1396 session->s_state = CEPH_MDS_SESSION_CLOSING; in __close_session()
1397 return request_close_session(mdsc, session); in __close_session()
1412 struct ceph_mds_session *session = arg; in trim_caps_cb() local
1416 if (session->s_trim_caps <= 0) in trim_caps_cb()
1445 session->s_trim_caps--; in trim_caps_cb()
1467 struct ceph_mds_session *session, in trim_caps() argument
1470 int trim_caps = session->s_nr_caps - max_caps; in trim_caps()
1473 session->s_mds, session->s_nr_caps, max_caps, trim_caps); in trim_caps()
1475 session->s_trim_caps = trim_caps; in trim_caps()
1476 iterate_session_caps(session, trim_caps_cb, session); in trim_caps()
1478 session->s_mds, session->s_nr_caps, max_caps, in trim_caps()
1479 trim_caps - session->s_trim_caps); in trim_caps()
1480 session->s_trim_caps = 0; in trim_caps()
1483 ceph_send_cap_releases(mdsc, session); in trim_caps()
1535 struct ceph_mds_session *session = mdsc->sessions[mds]; in wait_caps_flush() local
1538 if (!session) { in wait_caps_flush()
1542 get_session(session); in wait_caps_flush()
1545 mutex_lock(&session->s_mutex); in wait_caps_flush()
1546 if (!list_empty(&session->s_cap_snaps_flushing)) { in wait_caps_flush()
1548 list_first_entry(&session->s_cap_snaps_flushing, in wait_caps_flush()
1560 mutex_unlock(&session->s_mutex); in wait_caps_flush()
1561 ceph_put_mds_session(session); in wait_caps_flush()
1586 struct ceph_mds_session *session) in ceph_send_cap_releases() argument
1595 spin_lock(&session->s_cap_lock); in ceph_send_cap_releases()
1597 list_splice_init(&session->s_cap_releases, &tmp_list); in ceph_send_cap_releases()
1598 num_cap_releases = session->s_num_cap_releases; in ceph_send_cap_releases()
1599 session->s_num_cap_releases = 0; in ceph_send_cap_releases()
1600 spin_unlock(&session->s_cap_lock); in ceph_send_cap_releases()
1630 dout("send_cap_releases mds%d %p\n", session->s_mds, msg); in ceph_send_cap_releases()
1631 ceph_con_send(&session->s_con, msg); in ceph_send_cap_releases()
1638 spin_lock(&session->s_cap_lock); in ceph_send_cap_releases()
1639 if (!list_empty(&session->s_cap_releases)) in ceph_send_cap_releases()
1641 spin_unlock(&session->s_cap_lock); in ceph_send_cap_releases()
1645 dout("send_cap_releases mds%d %p\n", session->s_mds, msg); in ceph_send_cap_releases()
1646 ceph_con_send(&session->s_con, msg); in ceph_send_cap_releases()
1651 session->s_mds); in ceph_send_cap_releases()
1652 spin_lock(&session->s_cap_lock); in ceph_send_cap_releases()
1653 list_splice(&tmp_list, &session->s_cap_releases); in ceph_send_cap_releases()
1654 session->s_num_cap_releases += num_cap_releases; in ceph_send_cap_releases()
1655 spin_unlock(&session->s_cap_lock); in ceph_send_cap_releases()
2145 struct ceph_mds_session *session = NULL; in __do_request() local
2178 session = __ceph_lookup_mds_session(mdsc, mds); in __do_request()
2179 if (!session) { in __do_request()
2180 session = register_session(mdsc, mds); in __do_request()
2181 if (IS_ERR(session)) { in __do_request()
2182 err = PTR_ERR(session); in __do_request()
2186 req->r_session = get_session(session); in __do_request()
2188 dout("do_request mds%d session %p state %s\n", mds, session, in __do_request()
2189 ceph_session_state_name(session->s_state)); in __do_request()
2190 if (session->s_state != CEPH_MDS_SESSION_OPEN && in __do_request()
2191 session->s_state != CEPH_MDS_SESSION_HUNG) { in __do_request()
2192 if (session->s_state == CEPH_MDS_SESSION_NEW || in __do_request()
2193 session->s_state == CEPH_MDS_SESSION_CLOSING) in __do_request()
2194 __open_session(mdsc, session); in __do_request()
2195 list_add(&req->r_wait, &session->s_waiting); in __do_request()
2208 ceph_con_send(&session->s_con, req->r_request); in __do_request()
2212 ceph_put_mds_session(session); in __do_request()
2383 static void handle_reply(struct ceph_mds_session *session, struct ceph_msg *msg) in handle_reply() argument
2385 struct ceph_mds_client *mdsc = session->s_mdsc; in handle_reply()
2392 int mds = session->s_mds; in handle_reply()
2412 if (req->r_session != session) { in handle_reply()
2414 " not mds%d\n", tid, session->s_mds, in handle_reply()
2502 err = parse_reply_info(msg, rinfo, session->s_con.peer_features); in handle_reply()
2505 mutex_lock(&session->s_mutex); in handle_reply()
2560 mutex_unlock(&session->s_mutex); in handle_reply()
2575 struct ceph_mds_session *session, in handle_forward() argument
2626 static void handle_session(struct ceph_mds_session *session, in handle_session() argument
2629 struct ceph_mds_client *mdsc = session->s_mdsc; in handle_session()
2632 int mds = session->s_mds; in handle_session()
2644 __unregister_session(mdsc, session); in handle_session()
2646 session->s_ttl = jiffies + HZ*mdsc->mdsmap->m_session_autoclose; in handle_session()
2649 mutex_lock(&session->s_mutex); in handle_session()
2652 mds, ceph_session_op_name(op), session, in handle_session()
2653 ceph_session_state_name(session->s_state), seq); in handle_session()
2655 if (session->s_state == CEPH_MDS_SESSION_HUNG) { in handle_session()
2656 session->s_state = CEPH_MDS_SESSION_OPEN; in handle_session()
2657 pr_info("mds%d came back\n", session->s_mds); in handle_session()
2662 if (session->s_state == CEPH_MDS_SESSION_RECONNECTING) in handle_session()
2663 pr_info("mds%d reconnect success\n", session->s_mds); in handle_session()
2664 session->s_state = CEPH_MDS_SESSION_OPEN; in handle_session()
2665 renewed_caps(mdsc, session, 0); in handle_session()
2668 __close_session(mdsc, session); in handle_session()
2672 if (session->s_renew_seq == seq) in handle_session()
2673 renewed_caps(mdsc, session, 1); in handle_session()
2677 if (session->s_state == CEPH_MDS_SESSION_RECONNECTING) in handle_session()
2678 pr_info("mds%d reconnect denied\n", session->s_mds); in handle_session()
2679 cleanup_session_requests(mdsc, session); in handle_session()
2680 remove_session_caps(session); in handle_session()
2687 session->s_mds); in handle_session()
2688 spin_lock(&session->s_gen_ttl_lock); in handle_session()
2689 session->s_cap_gen++; in handle_session()
2690 session->s_cap_ttl = jiffies - 1; in handle_session()
2691 spin_unlock(&session->s_gen_ttl_lock); in handle_session()
2692 send_renew_caps(mdsc, session); in handle_session()
2696 trim_caps(mdsc, session, le32_to_cpu(h->max_caps)); in handle_session()
2700 send_flushmsg_ack(mdsc, session, seq); in handle_session()
2704 dout("force_session_readonly %p\n", session); in handle_session()
2705 spin_lock(&session->s_cap_lock); in handle_session()
2706 session->s_readonly = true; in handle_session()
2707 spin_unlock(&session->s_cap_lock); in handle_session()
2708 wake_up_session_caps(session, 0); in handle_session()
2716 mutex_unlock(&session->s_mutex); in handle_session()
2719 __wake_requests(mdsc, &session->s_waiting); in handle_session()
2738 struct ceph_mds_session *session) in replay_unsafe_requests() argument
2744 dout("replay_unsafe_requests mds%d\n", session->s_mds); in replay_unsafe_requests()
2747 list_for_each_entry_safe(req, nreq, &session->s_unsafe, r_unsafe_item) { in replay_unsafe_requests()
2748 err = __prepare_send_request(mdsc, req, session->s_mds, true); in replay_unsafe_requests()
2751 ceph_con_send(&session->s_con, req->r_request); in replay_unsafe_requests()
2768 req->r_session->s_mds == session->s_mds) { in replay_unsafe_requests()
2770 session->s_mds, true); in replay_unsafe_requests()
2773 ceph_con_send(&session->s_con, req->r_request); in replay_unsafe_requests()
2827 cap->cap_gen = cap->session->s_cap_gen; in encode_caps_cb()
2909 struct ceph_mds_session *session) in send_mds_reconnect() argument
2913 int mds = session->s_mds; in send_mds_reconnect()
2930 mutex_lock(&session->s_mutex); in send_mds_reconnect()
2931 session->s_state = CEPH_MDS_SESSION_RECONNECTING; in send_mds_reconnect()
2932 session->s_seq = 0; in send_mds_reconnect()
2934 dout("session %p state %s\n", session, in send_mds_reconnect()
2935 ceph_session_state_name(session->s_state)); in send_mds_reconnect()
2937 spin_lock(&session->s_gen_ttl_lock); in send_mds_reconnect()
2938 session->s_cap_gen++; in send_mds_reconnect()
2939 spin_unlock(&session->s_gen_ttl_lock); in send_mds_reconnect()
2941 spin_lock(&session->s_cap_lock); in send_mds_reconnect()
2943 session->s_readonly = 0; in send_mds_reconnect()
2949 session->s_cap_reconnect = 1; in send_mds_reconnect()
2951 cleanup_cap_releases(mdsc, session); in send_mds_reconnect()
2957 ceph_con_close(&session->s_con); in send_mds_reconnect()
2958 ceph_con_open(&session->s_con, in send_mds_reconnect()
2963 replay_unsafe_requests(mdsc, session); in send_mds_reconnect()
2968 s_nr_caps = session->s_nr_caps; in send_mds_reconnect()
2975 recon_state.flock = session->s_con.peer_features & CEPH_FEATURE_FLOCK; in send_mds_reconnect()
2976 err = iterate_session_caps(session, encode_caps_cb, &recon_state); in send_mds_reconnect()
2980 spin_lock(&session->s_cap_lock); in send_mds_reconnect()
2981 session->s_cap_reconnect = 0; in send_mds_reconnect()
2982 spin_unlock(&session->s_cap_lock); in send_mds_reconnect()
3019 ceph_early_kick_flushing_caps(mdsc, session); in send_mds_reconnect()
3021 ceph_con_send(&session->s_con, reply); in send_mds_reconnect()
3023 mutex_unlock(&session->s_mutex); in send_mds_reconnect()
3026 __wake_requests(mdsc, &session->s_waiting); in send_mds_reconnect()
3035 mutex_unlock(&session->s_mutex); in send_mds_reconnect()
3155 struct ceph_mds_session *session, in handle_lease() argument
3162 int mds = session->s_mds; in handle_lease()
3188 mutex_lock(&session->s_mutex); in handle_lease()
3189 session->s_seq++; in handle_lease()
3213 if (di->lease_session == session) { in handle_lease()
3222 if (di->lease_session == session && in handle_lease()
3223 di->lease_gen == session->s_cap_gen && in handle_lease()
3247 ceph_con_send(&session->s_con, msg); in handle_lease()
3251 mutex_unlock(&session->s_mutex); in handle_lease()
3259 void ceph_mdsc_lease_send_msg(struct ceph_mds_session *session, in ceph_mdsc_lease_send_msg() argument
3270 inode, dentry, ceph_lease_op_name(action), session->s_mds); in ceph_mdsc_lease_send_msg()
3292 ceph_con_send(&session->s_con, msg); in ceph_mdsc_lease_send_msg()
3303 struct ceph_mds_session *session; in ceph_mdsc_lease_release() local
3324 session = ceph_get_mds_session(di->lease_session); in ceph_mdsc_lease_release()
3330 inode, dentry, session->s_mds); in ceph_mdsc_lease_release()
3331 ceph_mdsc_lease_send_msg(session, inode, dentry, in ceph_mdsc_lease_release()
3333 ceph_put_mds_session(session); in ceph_mdsc_lease_release()
3626 struct ceph_mds_session *session; in ceph_mdsc_close_sessions() local
3634 session = __ceph_lookup_mds_session(mdsc, i); in ceph_mdsc_close_sessions()
3635 if (!session) in ceph_mdsc_close_sessions()
3638 mutex_lock(&session->s_mutex); in ceph_mdsc_close_sessions()
3639 __close_session(mdsc, session); in ceph_mdsc_close_sessions()
3640 mutex_unlock(&session->s_mutex); in ceph_mdsc_close_sessions()
3641 ceph_put_mds_session(session); in ceph_mdsc_close_sessions()
3654 session = get_session(mdsc->sessions[i]); in ceph_mdsc_close_sessions()
3655 __unregister_session(mdsc, session); in ceph_mdsc_close_sessions()
3657 mutex_lock(&session->s_mutex); in ceph_mdsc_close_sessions()
3658 remove_session_caps(session); in ceph_mdsc_close_sessions()
3659 mutex_unlock(&session->s_mutex); in ceph_mdsc_close_sessions()
3660 ceph_put_mds_session(session); in ceph_mdsc_close_sessions()
3676 struct ceph_mds_session *session; in ceph_mdsc_force_umount() local
3683 session = __ceph_lookup_mds_session(mdsc, mds); in ceph_mdsc_force_umount()
3684 if (!session) in ceph_mdsc_force_umount()
3687 mutex_lock(&session->s_mutex); in ceph_mdsc_force_umount()
3688 __close_session(mdsc, session); in ceph_mdsc_force_umount()
3689 if (session->s_state == CEPH_MDS_SESSION_CLOSING) { in ceph_mdsc_force_umount()
3690 cleanup_session_requests(mdsc, session); in ceph_mdsc_force_umount()
3691 remove_session_caps(session); in ceph_mdsc_force_umount()
3693 mutex_unlock(&session->s_mutex); in ceph_mdsc_force_umount()
3694 ceph_put_mds_session(session); in ceph_mdsc_force_umount()