Lines Matching refs:session
393 struct ceph_mds_session *session; in __ceph_lookup_mds_session() local
397 session = mdsc->sessions[mds]; in __ceph_lookup_mds_session()
398 dout("lookup_mds_session %p %d\n", session, in __ceph_lookup_mds_session()
399 atomic_read(&session->s_ref)); in __ceph_lookup_mds_session()
400 get_session(session); in __ceph_lookup_mds_session()
401 return session; in __ceph_lookup_mds_session()
798 mds = cap->session->s_mds; in __choose_mds()
910 struct ceph_mds_session *session) in __open_session() argument
914 int mds = session->s_mds; in __open_session()
920 session->s_state = CEPH_MDS_SESSION_OPENING; in __open_session()
921 session->s_renew_requested = jiffies; in __open_session()
924 msg = create_session_open_msg(mdsc, session->s_seq); in __open_session()
927 ceph_con_send(&session->s_con, msg); in __open_session()
939 struct ceph_mds_session *session; in __open_export_target_session() local
941 session = __ceph_lookup_mds_session(mdsc, target); in __open_export_target_session()
942 if (!session) { in __open_export_target_session()
943 session = register_session(mdsc, target); in __open_export_target_session()
944 if (IS_ERR(session)) in __open_export_target_session()
945 return session; in __open_export_target_session()
947 if (session->s_state == CEPH_MDS_SESSION_NEW || in __open_export_target_session()
948 session->s_state == CEPH_MDS_SESSION_CLOSING) in __open_export_target_session()
949 __open_session(mdsc, session); in __open_export_target_session()
951 return session; in __open_export_target_session()
957 struct ceph_mds_session *session; in ceph_mdsc_open_export_target_session() local
962 session = __open_export_target_session(mdsc, target); in ceph_mdsc_open_export_target_session()
965 return session; in ceph_mdsc_open_export_target_session()
969 struct ceph_mds_session *session) in __open_export_target_sessions() argument
973 int i, mds = session->s_mds; in __open_export_target_sessions()
980 session->s_mds, mi->num_export_targets); in __open_export_target_sessions()
990 struct ceph_mds_session *session) in ceph_mdsc_open_export_target_sessions() argument
993 __open_export_target_sessions(mdsc, session); in ceph_mdsc_open_export_target_sessions()
1004 static void cleanup_cap_releases(struct ceph_mds_session *session) in cleanup_cap_releases() argument
1008 spin_lock(&session->s_cap_lock); in cleanup_cap_releases()
1009 while (!list_empty(&session->s_cap_releases)) { in cleanup_cap_releases()
1010 msg = list_first_entry(&session->s_cap_releases, in cleanup_cap_releases()
1015 while (!list_empty(&session->s_cap_releases_done)) { in cleanup_cap_releases()
1016 msg = list_first_entry(&session->s_cap_releases_done, in cleanup_cap_releases()
1021 spin_unlock(&session->s_cap_lock); in cleanup_cap_releases()
1025 struct ceph_mds_session *session) in cleanup_session_requests() argument
1030 dout("cleanup_session_requests mds%d\n", session->s_mds); in cleanup_session_requests()
1032 while (!list_empty(&session->s_unsafe)) { in cleanup_session_requests()
1033 req = list_first_entry(&session->s_unsafe, in cleanup_session_requests()
1045 req->r_session->s_mds == session->s_mds) in cleanup_session_requests()
1057 static int iterate_session_caps(struct ceph_mds_session *session, in iterate_session_caps() argument
1067 dout("iterate_session_caps %p mds%d\n", session, session->s_mds); in iterate_session_caps()
1068 spin_lock(&session->s_cap_lock); in iterate_session_caps()
1069 p = session->s_caps.next; in iterate_session_caps()
1070 while (p != &session->s_caps) { in iterate_session_caps()
1077 session->s_cap_iterator = cap; in iterate_session_caps()
1078 spin_unlock(&session->s_cap_lock); in iterate_session_caps()
1085 ceph_put_cap(session->s_mdsc, old_cap); in iterate_session_caps()
1092 spin_lock(&session->s_cap_lock); in iterate_session_caps()
1097 BUG_ON(cap->session != session); in iterate_session_caps()
1099 session->s_nr_caps--; in iterate_session_caps()
1100 cap->session = NULL; in iterate_session_caps()
1108 session->s_cap_iterator = NULL; in iterate_session_caps()
1109 spin_unlock(&session->s_cap_lock); in iterate_session_caps()
1113 ceph_put_cap(session->s_mdsc, old_cap); in iterate_session_caps()
1161 static void remove_session_caps(struct ceph_mds_session *session) in remove_session_caps() argument
1163 dout("remove_session_caps on %p\n", session); in remove_session_caps()
1164 iterate_session_caps(session, remove_session_caps_cb, NULL); in remove_session_caps()
1166 spin_lock(&session->s_cap_lock); in remove_session_caps()
1167 if (session->s_nr_caps > 0) { in remove_session_caps()
1168 struct super_block *sb = session->s_mdsc->fsc->sb; in remove_session_caps()
1179 while (!list_empty(&session->s_caps)) { in remove_session_caps()
1180 cap = list_entry(session->s_caps.next, in remove_session_caps()
1186 spin_unlock(&session->s_cap_lock); in remove_session_caps()
1191 spin_lock(&session->s_cap_lock); in remove_session_caps()
1194 spin_unlock(&session->s_cap_lock); in remove_session_caps()
1196 BUG_ON(session->s_nr_caps > 0); in remove_session_caps()
1197 BUG_ON(!list_empty(&session->s_cap_flushing)); in remove_session_caps()
1198 cleanup_cap_releases(session); in remove_session_caps()
1222 static void wake_up_session_caps(struct ceph_mds_session *session, in wake_up_session_caps() argument
1225 dout("wake_up_session_caps %p mds%d\n", session, session->s_mds); in wake_up_session_caps()
1226 iterate_session_caps(session, wake_up_session_cb, in wake_up_session_caps()
1237 struct ceph_mds_session *session) in send_renew_caps() argument
1242 if (time_after_eq(jiffies, session->s_cap_ttl) && in send_renew_caps()
1243 time_after_eq(session->s_cap_ttl, session->s_renew_requested)) in send_renew_caps()
1244 pr_info("mds%d caps stale\n", session->s_mds); in send_renew_caps()
1245 session->s_renew_requested = jiffies; in send_renew_caps()
1249 state = ceph_mdsmap_get_state(mdsc->mdsmap, session->s_mds); in send_renew_caps()
1252 session->s_mds, ceph_mds_state_name(state)); in send_renew_caps()
1256 dout("send_renew_caps to mds%d (%s)\n", session->s_mds, in send_renew_caps()
1259 ++session->s_renew_seq); in send_renew_caps()
1262 ceph_con_send(&session->s_con, msg); in send_renew_caps()
1267 struct ceph_mds_session *session, u64 seq) in send_flushmsg_ack() argument
1272 session->s_mds, ceph_session_state_name(session->s_state), seq); in send_flushmsg_ack()
1276 ceph_con_send(&session->s_con, msg); in send_flushmsg_ack()
1287 struct ceph_mds_session *session, int is_renew) in renewed_caps() argument
1292 spin_lock(&session->s_cap_lock); in renewed_caps()
1293 was_stale = is_renew && time_after_eq(jiffies, session->s_cap_ttl); in renewed_caps()
1295 session->s_cap_ttl = session->s_renew_requested + in renewed_caps()
1299 if (time_before(jiffies, session->s_cap_ttl)) { in renewed_caps()
1300 pr_info("mds%d caps renewed\n", session->s_mds); in renewed_caps()
1303 pr_info("mds%d caps still stale\n", session->s_mds); in renewed_caps()
1307 session->s_mds, session->s_cap_ttl, was_stale ? "stale" : "fresh", in renewed_caps()
1308 time_before(jiffies, session->s_cap_ttl) ? "stale" : "fresh"); in renewed_caps()
1309 spin_unlock(&session->s_cap_lock); in renewed_caps()
1312 wake_up_session_caps(session, 0); in renewed_caps()
1319 struct ceph_mds_session *session) in request_close_session() argument
1324 session->s_mds, ceph_session_state_name(session->s_state), in request_close_session()
1325 session->s_seq); in request_close_session()
1326 msg = create_session_msg(CEPH_SESSION_REQUEST_CLOSE, session->s_seq); in request_close_session()
1329 ceph_con_send(&session->s_con, msg); in request_close_session()
1337 struct ceph_mds_session *session) in __close_session() argument
1339 if (session->s_state >= CEPH_MDS_SESSION_CLOSING) in __close_session()
1341 session->s_state = CEPH_MDS_SESSION_CLOSING; in __close_session()
1342 return request_close_session(mdsc, session); in __close_session()
1357 struct ceph_mds_session *session = arg; in trim_caps_cb() local
1361 if (session->s_trim_caps <= 0) in trim_caps_cb()
1382 session->s_trim_caps--; in trim_caps_cb()
1404 struct ceph_mds_session *session, in trim_caps() argument
1407 int trim_caps = session->s_nr_caps - max_caps; in trim_caps()
1410 session->s_mds, session->s_nr_caps, max_caps, trim_caps); in trim_caps()
1412 session->s_trim_caps = trim_caps; in trim_caps()
1413 iterate_session_caps(session, trim_caps_cb, session); in trim_caps()
1415 session->s_mds, session->s_nr_caps, max_caps, in trim_caps()
1416 trim_caps - session->s_trim_caps); in trim_caps()
1417 session->s_trim_caps = 0; in trim_caps()
1420 ceph_add_cap_releases(mdsc, session); in trim_caps()
1421 ceph_send_cap_releases(mdsc, session); in trim_caps()
1433 struct ceph_mds_session *session) in ceph_add_cap_releases() argument
1441 dout("add_cap_releases %p mds%d extra %d\n", session, session->s_mds, in ceph_add_cap_releases()
1444 spin_lock(&session->s_cap_lock); in ceph_add_cap_releases()
1446 if (!list_empty(&session->s_cap_releases)) { in ceph_add_cap_releases()
1447 msg = list_first_entry(&session->s_cap_releases, in ceph_add_cap_releases()
1459 while (session->s_num_cap_releases < session->s_nr_caps + extra) { in ceph_add_cap_releases()
1460 spin_unlock(&session->s_cap_lock); in ceph_add_cap_releases()
1465 dout("add_cap_releases %p msg %p now %d\n", session, msg, in ceph_add_cap_releases()
1470 spin_lock(&session->s_cap_lock); in ceph_add_cap_releases()
1471 list_add(&msg->list_head, &session->s_cap_releases); in ceph_add_cap_releases()
1472 session->s_num_cap_releases += CEPH_CAPS_PER_RELEASE; in ceph_add_cap_releases()
1481 &session->s_cap_releases_done); in ceph_add_cap_releases()
1482 session->s_num_cap_releases -= CEPH_CAPS_PER_RELEASE - num; in ceph_add_cap_releases()
1485 spin_unlock(&session->s_cap_lock); in ceph_add_cap_releases()
1515 struct ceph_mds_session *session = mdsc->sessions[mds]; in wait_caps_flush() local
1518 if (!session) in wait_caps_flush()
1520 get_session(session); in wait_caps_flush()
1523 mutex_lock(&session->s_mutex); in wait_caps_flush()
1524 if (!list_empty(&session->s_cap_flushing)) { in wait_caps_flush()
1526 list_entry(session->s_cap_flushing.next, in wait_caps_flush()
1534 want_flush_seq, session->s_mds); in wait_caps_flush()
1538 mutex_unlock(&session->s_mutex); in wait_caps_flush()
1539 ceph_put_mds_session(session); in wait_caps_flush()
1558 struct ceph_mds_session *session) in ceph_send_cap_releases() argument
1562 dout("send_cap_releases mds%d\n", session->s_mds); in ceph_send_cap_releases()
1563 spin_lock(&session->s_cap_lock); in ceph_send_cap_releases()
1564 while (!list_empty(&session->s_cap_releases_done)) { in ceph_send_cap_releases()
1565 msg = list_first_entry(&session->s_cap_releases_done, in ceph_send_cap_releases()
1568 spin_unlock(&session->s_cap_lock); in ceph_send_cap_releases()
1570 dout("send_cap_releases mds%d %p\n", session->s_mds, msg); in ceph_send_cap_releases()
1571 ceph_con_send(&session->s_con, msg); in ceph_send_cap_releases()
1572 spin_lock(&session->s_cap_lock); in ceph_send_cap_releases()
1574 spin_unlock(&session->s_cap_lock); in ceph_send_cap_releases()
1578 struct ceph_mds_session *session) in discard_cap_releases() argument
1584 dout("discard_cap_releases mds%d\n", session->s_mds); in discard_cap_releases()
1586 if (!list_empty(&session->s_cap_releases)) { in discard_cap_releases()
1588 msg = list_first_entry(&session->s_cap_releases, in discard_cap_releases()
1593 session->s_mds, msg, num); in discard_cap_releases()
1596 session->s_num_cap_releases += num; in discard_cap_releases()
1600 while (!list_empty(&session->s_cap_releases_done)) { in discard_cap_releases()
1601 msg = list_first_entry(&session->s_cap_releases_done, in discard_cap_releases()
1607 dout("discard_cap_releases mds%d %p %u\n", session->s_mds, msg, in discard_cap_releases()
1609 session->s_num_cap_releases += num; in discard_cap_releases()
1612 list_add(&msg->list_head, &session->s_cap_releases); in discard_cap_releases()
2106 struct ceph_mds_session *session = NULL; in __do_request() local
2134 session = __ceph_lookup_mds_session(mdsc, mds); in __do_request()
2135 if (!session) { in __do_request()
2136 session = register_session(mdsc, mds); in __do_request()
2137 if (IS_ERR(session)) { in __do_request()
2138 err = PTR_ERR(session); in __do_request()
2142 req->r_session = get_session(session); in __do_request()
2144 dout("do_request mds%d session %p state %s\n", mds, session, in __do_request()
2145 ceph_session_state_name(session->s_state)); in __do_request()
2146 if (session->s_state != CEPH_MDS_SESSION_OPEN && in __do_request()
2147 session->s_state != CEPH_MDS_SESSION_HUNG) { in __do_request()
2148 if (session->s_state == CEPH_MDS_SESSION_NEW || in __do_request()
2149 session->s_state == CEPH_MDS_SESSION_CLOSING) in __do_request()
2150 __open_session(mdsc, session); in __do_request()
2151 list_add(&req->r_wait, &session->s_waiting); in __do_request()
2164 ceph_con_send(&session->s_con, req->r_request); in __do_request()
2168 ceph_put_mds_session(session); in __do_request()
2336 static void handle_reply(struct ceph_mds_session *session, struct ceph_msg *msg) in handle_reply() argument
2338 struct ceph_mds_client *mdsc = session->s_mdsc; in handle_reply()
2345 int mds = session->s_mds; in handle_reply()
2365 if (req->r_session != session) { in handle_reply()
2367 " not mds%d\n", tid, session->s_mds, in handle_reply()
2447 err = parse_reply_info(msg, rinfo, session->s_con.peer_features); in handle_reply()
2450 mutex_lock(&session->s_mutex); in handle_reply()
2500 mutex_unlock(&session->s_mutex); in handle_reply()
2515 struct ceph_mds_session *session, in handle_forward() argument
2566 static void handle_session(struct ceph_mds_session *session, in handle_session() argument
2569 struct ceph_mds_client *mdsc = session->s_mdsc; in handle_session()
2572 int mds = session->s_mds; in handle_session()
2584 __unregister_session(mdsc, session); in handle_session()
2586 session->s_ttl = jiffies + HZ*mdsc->mdsmap->m_session_autoclose; in handle_session()
2589 mutex_lock(&session->s_mutex); in handle_session()
2592 mds, ceph_session_op_name(op), session, in handle_session()
2593 ceph_session_state_name(session->s_state), seq); in handle_session()
2595 if (session->s_state == CEPH_MDS_SESSION_HUNG) { in handle_session()
2596 session->s_state = CEPH_MDS_SESSION_OPEN; in handle_session()
2597 pr_info("mds%d came back\n", session->s_mds); in handle_session()
2602 if (session->s_state == CEPH_MDS_SESSION_RECONNECTING) in handle_session()
2603 pr_info("mds%d reconnect success\n", session->s_mds); in handle_session()
2604 session->s_state = CEPH_MDS_SESSION_OPEN; in handle_session()
2605 renewed_caps(mdsc, session, 0); in handle_session()
2608 __close_session(mdsc, session); in handle_session()
2612 if (session->s_renew_seq == seq) in handle_session()
2613 renewed_caps(mdsc, session, 1); in handle_session()
2617 if (session->s_state == CEPH_MDS_SESSION_RECONNECTING) in handle_session()
2618 pr_info("mds%d reconnect denied\n", session->s_mds); in handle_session()
2619 cleanup_session_requests(mdsc, session); in handle_session()
2620 remove_session_caps(session); in handle_session()
2627 session->s_mds); in handle_session()
2628 spin_lock(&session->s_gen_ttl_lock); in handle_session()
2629 session->s_cap_gen++; in handle_session()
2630 session->s_cap_ttl = jiffies - 1; in handle_session()
2631 spin_unlock(&session->s_gen_ttl_lock); in handle_session()
2632 send_renew_caps(mdsc, session); in handle_session()
2636 trim_caps(mdsc, session, le32_to_cpu(h->max_caps)); in handle_session()
2640 send_flushmsg_ack(mdsc, session, seq); in handle_session()
2644 dout("force_session_readonly %p\n", session); in handle_session()
2645 spin_lock(&session->s_cap_lock); in handle_session()
2646 session->s_readonly = true; in handle_session()
2647 spin_unlock(&session->s_cap_lock); in handle_session()
2648 wake_up_session_caps(session, 0); in handle_session()
2656 mutex_unlock(&session->s_mutex); in handle_session()
2659 __wake_requests(mdsc, &session->s_waiting); in handle_session()
2678 struct ceph_mds_session *session) in replay_unsafe_requests() argument
2684 dout("replay_unsafe_requests mds%d\n", session->s_mds); in replay_unsafe_requests()
2687 list_for_each_entry_safe(req, nreq, &session->s_unsafe, r_unsafe_item) { in replay_unsafe_requests()
2688 err = __prepare_send_request(mdsc, req, session->s_mds, true); in replay_unsafe_requests()
2691 ceph_con_send(&session->s_con, req->r_request); in replay_unsafe_requests()
2708 req->r_session->s_mds == session->s_mds) { in replay_unsafe_requests()
2710 session->s_mds, true); in replay_unsafe_requests()
2713 ceph_con_send(&session->s_con, req->r_request); in replay_unsafe_requests()
2767 cap->cap_gen = cap->session->s_cap_gen; in encode_caps_cb()
2849 struct ceph_mds_session *session) in send_mds_reconnect() argument
2853 int mds = session->s_mds; in send_mds_reconnect()
2870 mutex_lock(&session->s_mutex); in send_mds_reconnect()
2871 session->s_state = CEPH_MDS_SESSION_RECONNECTING; in send_mds_reconnect()
2872 session->s_seq = 0; in send_mds_reconnect()
2874 dout("session %p state %s\n", session, in send_mds_reconnect()
2875 ceph_session_state_name(session->s_state)); in send_mds_reconnect()
2877 spin_lock(&session->s_gen_ttl_lock); in send_mds_reconnect()
2878 session->s_cap_gen++; in send_mds_reconnect()
2879 spin_unlock(&session->s_gen_ttl_lock); in send_mds_reconnect()
2881 spin_lock(&session->s_cap_lock); in send_mds_reconnect()
2883 session->s_readonly = 0; in send_mds_reconnect()
2889 session->s_cap_reconnect = 1; in send_mds_reconnect()
2891 discard_cap_releases(mdsc, session); in send_mds_reconnect()
2892 spin_unlock(&session->s_cap_lock); in send_mds_reconnect()
2898 ceph_con_close(&session->s_con); in send_mds_reconnect()
2899 ceph_con_open(&session->s_con, in send_mds_reconnect()
2904 replay_unsafe_requests(mdsc, session); in send_mds_reconnect()
2909 s_nr_caps = session->s_nr_caps; in send_mds_reconnect()
2916 recon_state.flock = session->s_con.peer_features & CEPH_FEATURE_FLOCK; in send_mds_reconnect()
2917 err = iterate_session_caps(session, encode_caps_cb, &recon_state); in send_mds_reconnect()
2921 spin_lock(&session->s_cap_lock); in send_mds_reconnect()
2922 session->s_cap_reconnect = 0; in send_mds_reconnect()
2923 spin_unlock(&session->s_cap_lock); in send_mds_reconnect()
2959 ceph_con_send(&session->s_con, reply); in send_mds_reconnect()
2961 mutex_unlock(&session->s_mutex); in send_mds_reconnect()
2964 __wake_requests(mdsc, &session->s_waiting); in send_mds_reconnect()
2973 mutex_unlock(&session->s_mutex); in send_mds_reconnect()
3093 struct ceph_mds_session *session, in handle_lease() argument
3100 int mds = session->s_mds; in handle_lease()
3126 mutex_lock(&session->s_mutex); in handle_lease()
3127 session->s_seq++; in handle_lease()
3151 if (di->lease_session == session) { in handle_lease()
3160 if (di->lease_session == session && in handle_lease()
3161 di->lease_gen == session->s_cap_gen && in handle_lease()
3185 ceph_con_send(&session->s_con, msg); in handle_lease()
3189 mutex_unlock(&session->s_mutex); in handle_lease()
3197 void ceph_mdsc_lease_send_msg(struct ceph_mds_session *session, in ceph_mdsc_lease_send_msg() argument
3208 inode, dentry, ceph_lease_op_name(action), session->s_mds); in ceph_mdsc_lease_send_msg()
3230 ceph_con_send(&session->s_con, msg); in ceph_mdsc_lease_send_msg()
3241 struct ceph_mds_session *session; in ceph_mdsc_lease_release() local
3262 session = ceph_get_mds_session(di->lease_session); in ceph_mdsc_lease_release()
3268 inode, dentry, session->s_mds); in ceph_mdsc_lease_release()
3269 ceph_mdsc_lease_send_msg(session, inode, dentry, in ceph_mdsc_lease_release()
3271 ceph_put_mds_session(session); in ceph_mdsc_lease_release()
3552 struct ceph_mds_session *session; in ceph_mdsc_close_sessions() local
3562 session = __ceph_lookup_mds_session(mdsc, i); in ceph_mdsc_close_sessions()
3563 if (!session) in ceph_mdsc_close_sessions()
3566 mutex_lock(&session->s_mutex); in ceph_mdsc_close_sessions()
3567 __close_session(mdsc, session); in ceph_mdsc_close_sessions()
3568 mutex_unlock(&session->s_mutex); in ceph_mdsc_close_sessions()
3569 ceph_put_mds_session(session); in ceph_mdsc_close_sessions()
3582 session = get_session(mdsc->sessions[i]); in ceph_mdsc_close_sessions()
3583 __unregister_session(mdsc, session); in ceph_mdsc_close_sessions()
3585 mutex_lock(&session->s_mutex); in ceph_mdsc_close_sessions()
3586 remove_session_caps(session); in ceph_mdsc_close_sessions()
3587 mutex_unlock(&session->s_mutex); in ceph_mdsc_close_sessions()
3588 ceph_put_mds_session(session); in ceph_mdsc_close_sessions()