Lines Matching refs:session

54 	struct ceph_mds_session *session;  member
1149 mds = cap->session->s_mds; in __choose_mds()
1375 struct ceph_mds_session *session) in __open_session() argument
1379 int mds = session->s_mds; in __open_session()
1385 session->s_state = CEPH_MDS_SESSION_OPENING; in __open_session()
1386 session->s_renew_requested = jiffies; in __open_session()
1389 msg = create_session_open_msg(mdsc, session->s_seq); in __open_session()
1392 ceph_con_send(&session->s_con, msg); in __open_session()
1404 struct ceph_mds_session *session; in __open_export_target_session() local
1407 session = __ceph_lookup_mds_session(mdsc, target); in __open_export_target_session()
1408 if (!session) { in __open_export_target_session()
1409 session = register_session(mdsc, target); in __open_export_target_session()
1410 if (IS_ERR(session)) in __open_export_target_session()
1411 return session; in __open_export_target_session()
1413 if (session->s_state == CEPH_MDS_SESSION_NEW || in __open_export_target_session()
1414 session->s_state == CEPH_MDS_SESSION_CLOSING) { in __open_export_target_session()
1415 ret = __open_session(mdsc, session); in __open_export_target_session()
1420 return session; in __open_export_target_session()
1426 struct ceph_mds_session *session; in ceph_mdsc_open_export_target_session() local
1431 session = __open_export_target_session(mdsc, target); in ceph_mdsc_open_export_target_session()
1434 return session; in ceph_mdsc_open_export_target_session()
1438 struct ceph_mds_session *session) in __open_export_target_sessions() argument
1442 int i, mds = session->s_mds; in __open_export_target_sessions()
1449 session->s_mds, mi->num_export_targets); in __open_export_target_sessions()
1458 struct ceph_mds_session *session) in ceph_mdsc_open_export_target_sessions() argument
1461 __open_export_target_sessions(mdsc, session); in ceph_mdsc_open_export_target_sessions()
1469 static void detach_cap_releases(struct ceph_mds_session *session, in detach_cap_releases() argument
1472 lockdep_assert_held(&session->s_cap_lock); in detach_cap_releases()
1474 list_splice_init(&session->s_cap_releases, target); in detach_cap_releases()
1475 session->s_num_cap_releases = 0; in detach_cap_releases()
1476 dout("dispose_cap_releases mds%d\n", session->s_mds); in detach_cap_releases()
1492 struct ceph_mds_session *session) in cleanup_session_requests() argument
1497 dout("cleanup_session_requests mds%d\n", session->s_mds); in cleanup_session_requests()
1499 while (!list_empty(&session->s_unsafe)) { in cleanup_session_requests()
1500 req = list_first_entry(&session->s_unsafe, in cleanup_session_requests()
1516 req->r_session->s_mds == session->s_mds) in cleanup_session_requests()
1528 int ceph_iterate_session_caps(struct ceph_mds_session *session, in ceph_iterate_session_caps() argument
1538 dout("iterate_session_caps %p mds%d\n", session, session->s_mds); in ceph_iterate_session_caps()
1539 spin_lock(&session->s_cap_lock); in ceph_iterate_session_caps()
1540 p = session->s_caps.next; in ceph_iterate_session_caps()
1541 while (p != &session->s_caps) { in ceph_iterate_session_caps()
1548 session->s_cap_iterator = cap; in ceph_iterate_session_caps()
1549 spin_unlock(&session->s_cap_lock); in ceph_iterate_session_caps()
1556 ceph_put_cap(session->s_mdsc, old_cap); in ceph_iterate_session_caps()
1563 spin_lock(&session->s_cap_lock); in ceph_iterate_session_caps()
1568 BUG_ON(cap->session != session); in ceph_iterate_session_caps()
1569 cap->session = NULL; in ceph_iterate_session_caps()
1571 session->s_nr_caps--; in ceph_iterate_session_caps()
1572 atomic64_dec(&session->s_mdsc->metric.total_caps); in ceph_iterate_session_caps()
1574 __ceph_queue_cap_release(session, cap); in ceph_iterate_session_caps()
1583 session->s_cap_iterator = NULL; in ceph_iterate_session_caps()
1584 spin_unlock(&session->s_cap_lock); in ceph_iterate_session_caps()
1588 ceph_put_cap(session->s_mdsc, old_cap); in ceph_iterate_session_caps()
1617 static void remove_session_caps(struct ceph_mds_session *session) in remove_session_caps() argument
1619 struct ceph_fs_client *fsc = session->s_mdsc->fsc; in remove_session_caps()
1623 dout("remove_session_caps on %p\n", session); in remove_session_caps()
1624 ceph_iterate_session_caps(session, remove_session_caps_cb, fsc); in remove_session_caps()
1628 spin_lock(&session->s_cap_lock); in remove_session_caps()
1629 if (session->s_nr_caps > 0) { in remove_session_caps()
1640 while (!list_empty(&session->s_caps)) { in remove_session_caps()
1641 cap = list_entry(session->s_caps.next, in remove_session_caps()
1647 spin_unlock(&session->s_cap_lock); in remove_session_caps()
1652 spin_lock(&session->s_cap_lock); in remove_session_caps()
1657 detach_cap_releases(session, &dispose); in remove_session_caps()
1659 BUG_ON(session->s_nr_caps > 0); in remove_session_caps()
1660 BUG_ON(!list_empty(&session->s_cap_flushing)); in remove_session_caps()
1661 spin_unlock(&session->s_cap_lock); in remove_session_caps()
1662 dispose_cap_releases(session->s_mdsc, &dispose); in remove_session_caps()
1689 if (cap->cap_gen < atomic_read(&cap->session->s_cap_gen)) { in wake_up_session_cb()
1701 static void wake_up_session_caps(struct ceph_mds_session *session, int ev) in wake_up_session_caps() argument
1703 dout("wake_up_session_caps %p mds%d\n", session, session->s_mds); in wake_up_session_caps()
1704 ceph_iterate_session_caps(session, wake_up_session_cb, in wake_up_session_caps()
1715 struct ceph_mds_session *session) in send_renew_caps() argument
1720 if (time_after_eq(jiffies, session->s_cap_ttl) && in send_renew_caps()
1721 time_after_eq(session->s_cap_ttl, session->s_renew_requested)) in send_renew_caps()
1722 pr_info("mds%d caps stale\n", session->s_mds); in send_renew_caps()
1723 session->s_renew_requested = jiffies; in send_renew_caps()
1727 state = ceph_mdsmap_get_state(mdsc->mdsmap, session->s_mds); in send_renew_caps()
1730 session->s_mds, ceph_mds_state_name(state)); in send_renew_caps()
1734 dout("send_renew_caps to mds%d (%s)\n", session->s_mds, in send_renew_caps()
1737 ++session->s_renew_seq); in send_renew_caps()
1740 ceph_con_send(&session->s_con, msg); in send_renew_caps()
1745 struct ceph_mds_session *session, u64 seq) in send_flushmsg_ack() argument
1750 session->s_mds, ceph_session_state_name(session->s_state), seq); in send_flushmsg_ack()
1754 ceph_con_send(&session->s_con, msg); in send_flushmsg_ack()
1765 struct ceph_mds_session *session, int is_renew) in renewed_caps() argument
1770 spin_lock(&session->s_cap_lock); in renewed_caps()
1771 was_stale = is_renew && time_after_eq(jiffies, session->s_cap_ttl); in renewed_caps()
1773 session->s_cap_ttl = session->s_renew_requested + in renewed_caps()
1777 if (time_before(jiffies, session->s_cap_ttl)) { in renewed_caps()
1778 pr_info("mds%d caps renewed\n", session->s_mds); in renewed_caps()
1781 pr_info("mds%d caps still stale\n", session->s_mds); in renewed_caps()
1785 session->s_mds, session->s_cap_ttl, was_stale ? "stale" : "fresh", in renewed_caps()
1786 time_before(jiffies, session->s_cap_ttl) ? "stale" : "fresh"); in renewed_caps()
1787 spin_unlock(&session->s_cap_lock); in renewed_caps()
1790 wake_up_session_caps(session, RENEWCAPS); in renewed_caps()
1796 static int request_close_session(struct ceph_mds_session *session) in request_close_session() argument
1801 session->s_mds, ceph_session_state_name(session->s_state), in request_close_session()
1802 session->s_seq); in request_close_session()
1804 session->s_seq); in request_close_session()
1807 ceph_con_send(&session->s_con, msg); in request_close_session()
1815 struct ceph_mds_session *session) in __close_session() argument
1817 if (session->s_state >= CEPH_MDS_SESSION_CLOSING) in __close_session()
1819 session->s_state = CEPH_MDS_SESSION_CLOSING; in __close_session()
1820 return request_close_session(session); in __close_session()
1930 struct ceph_mds_session *session, in ceph_trim_caps() argument
1933 int trim_caps = session->s_nr_caps - max_caps; in ceph_trim_caps()
1936 session->s_mds, session->s_nr_caps, max_caps, trim_caps); in ceph_trim_caps()
1940 ceph_iterate_session_caps(session, trim_caps_cb, &remaining); in ceph_trim_caps()
1942 session->s_mds, session->s_nr_caps, max_caps, in ceph_trim_caps()
1946 ceph_flush_cap_releases(mdsc, session); in ceph_trim_caps()
1990 struct ceph_mds_session *session) in ceph_send_cap_releases() argument
2005 spin_lock(&session->s_cap_lock); in ceph_send_cap_releases()
2007 list_splice_init(&session->s_cap_releases, &tmp_list); in ceph_send_cap_releases()
2008 num_cap_releases = session->s_num_cap_releases; in ceph_send_cap_releases()
2009 session->s_num_cap_releases = 0; in ceph_send_cap_releases()
2010 spin_unlock(&session->s_cap_lock); in ceph_send_cap_releases()
2050 dout("send_cap_releases mds%d %p\n", session->s_mds, msg); in ceph_send_cap_releases()
2051 ceph_con_send(&session->s_con, msg); in ceph_send_cap_releases()
2058 spin_lock(&session->s_cap_lock); in ceph_send_cap_releases()
2059 if (!list_empty(&session->s_cap_releases)) in ceph_send_cap_releases()
2061 spin_unlock(&session->s_cap_lock); in ceph_send_cap_releases()
2070 dout("send_cap_releases mds%d %p\n", session->s_mds, msg); in ceph_send_cap_releases()
2071 ceph_con_send(&session->s_con, msg); in ceph_send_cap_releases()
2076 session->s_mds); in ceph_send_cap_releases()
2077 spin_lock(&session->s_cap_lock); in ceph_send_cap_releases()
2078 list_splice(&tmp_list, &session->s_cap_releases); in ceph_send_cap_releases()
2079 session->s_num_cap_releases += num_cap_releases; in ceph_send_cap_releases()
2080 spin_unlock(&session->s_cap_lock); in ceph_send_cap_releases()
2085 struct ceph_mds_session *session = in ceph_cap_release_work() local
2088 mutex_lock(&session->s_mutex); in ceph_cap_release_work()
2089 if (session->s_state == CEPH_MDS_SESSION_OPEN || in ceph_cap_release_work()
2090 session->s_state == CEPH_MDS_SESSION_HUNG) in ceph_cap_release_work()
2091 ceph_send_cap_releases(session->s_mdsc, session); in ceph_cap_release_work()
2092 mutex_unlock(&session->s_mutex); in ceph_cap_release_work()
2093 ceph_put_mds_session(session); in ceph_cap_release_work()
2097 struct ceph_mds_session *session) in ceph_flush_cap_releases() argument
2102 ceph_get_mds_session(session); in ceph_flush_cap_releases()
2104 &session->s_cap_release_work)) { in ceph_flush_cap_releases()
2107 ceph_put_mds_session(session); in ceph_flush_cap_releases()
2115 void __ceph_queue_cap_release(struct ceph_mds_session *session, in __ceph_queue_cap_release() argument
2118 list_add_tail(&cap->session_caps, &session->s_cap_releases); in __ceph_queue_cap_release()
2119 session->s_num_cap_releases++; in __ceph_queue_cap_release()
2121 if (!(session->s_num_cap_releases % CEPH_CAPS_PER_RELEASE)) in __ceph_queue_cap_release()
2122 ceph_flush_cap_releases(session->s_mdsc, session); in __ceph_queue_cap_release()
2437 static struct ceph_msg *create_request_message(struct ceph_mds_session *session, in create_request_message() argument
2441 int mds = session->s_mds; in create_request_message()
2442 struct ceph_mds_client *mdsc = session->s_mdsc; in create_request_message()
2454 bool legacy = !(session->s_con.peer_features & CEPH_FEATURE_FS_BTIME); in create_request_message()
2621 static int __prepare_send_request(struct ceph_mds_session *session, in __prepare_send_request() argument
2625 int mds = session->s_mds; in __prepare_send_request()
2626 struct ceph_mds_client *mdsc = session->s_mdsc; in __prepare_send_request()
2655 session->s_con.peer_features); in __prepare_send_request()
2681 msg = create_request_message(session, req, drop_cap_releases); in __prepare_send_request()
2689 session->s_con.peer_features); in __prepare_send_request()
2708 static int __send_request(struct ceph_mds_session *session, in __send_request() argument
2714 err = __prepare_send_request(session, req, drop_cap_releases); in __send_request()
2717 ceph_con_send(&session->s_con, req->r_request); in __send_request()
2729 struct ceph_mds_session *session = NULL; in __do_request() local
2785 session = __ceph_lookup_mds_session(mdsc, mds); in __do_request()
2786 if (!session) { in __do_request()
2787 session = register_session(mdsc, mds); in __do_request()
2788 if (IS_ERR(session)) { in __do_request()
2789 err = PTR_ERR(session); in __do_request()
2793 req->r_session = ceph_get_mds_session(session); in __do_request()
2795 dout("do_request mds%d session %p state %s\n", mds, session, in __do_request()
2796 ceph_session_state_name(session->s_state)); in __do_request()
2797 if (session->s_state != CEPH_MDS_SESSION_OPEN && in __do_request()
2798 session->s_state != CEPH_MDS_SESSION_HUNG) { in __do_request()
2814 if (session->s_state == CEPH_MDS_SESSION_REJECTED) { in __do_request()
2822 if (session->s_state == CEPH_MDS_SESSION_NEW || in __do_request()
2823 session->s_state == CEPH_MDS_SESSION_CLOSING) { in __do_request()
2824 err = __open_session(mdsc, session); in __do_request()
2831 list_add(&req->r_wait, &session->s_waiting); in __do_request()
2841 err = __send_request(session, req, false); in __do_request()
2844 ceph_put_mds_session(session); in __do_request()
3046 static void handle_reply(struct ceph_mds_session *session, struct ceph_msg *msg) in handle_reply() argument
3048 struct ceph_mds_client *mdsc = session->s_mdsc; in handle_reply()
3055 int mds = session->s_mds; in handle_reply()
3075 if (req->r_session != session) { in handle_reply()
3077 " not mds%d\n", tid, session->s_mds, in handle_reply()
3157 if (test_bit(CEPHFS_FEATURE_REPLY_ENCODING, &session->s_features)) in handle_reply()
3158 err = parse_reply_info(session, msg, rinfo, (u64)-1); in handle_reply()
3160 err = parse_reply_info(session, msg, rinfo, session->s_con.peer_features); in handle_reply()
3174 mutex_lock(&session->s_mutex); in handle_reply()
3180 mutex_lock(&session->s_mutex); in handle_reply()
3243 mutex_unlock(&session->s_mutex); in handle_reply()
3261 struct ceph_mds_session *session, in handle_forward() argument
3340 static void handle_session(struct ceph_mds_session *session, in handle_session() argument
3343 struct ceph_mds_client *mdsc = session->s_mdsc; in handle_session()
3344 int mds = session->s_mds; in handle_session()
3387 pr_warn("mds%d session blocklisted\n", session->s_mds); in handle_session()
3394 ceph_get_mds_session(session); in handle_session()
3395 __unregister_session(mdsc, session); in handle_session()
3398 session->s_ttl = jiffies + HZ*mdsc->mdsmap->m_session_autoclose; in handle_session()
3401 mutex_lock(&session->s_mutex); in handle_session()
3404 mds, ceph_session_op_name(op), session, in handle_session()
3405 ceph_session_state_name(session->s_state), seq); in handle_session()
3407 if (session->s_state == CEPH_MDS_SESSION_HUNG) { in handle_session()
3408 session->s_state = CEPH_MDS_SESSION_OPEN; in handle_session()
3409 pr_info("mds%d came back\n", session->s_mds); in handle_session()
3414 if (session->s_state == CEPH_MDS_SESSION_RECONNECTING) in handle_session()
3415 pr_info("mds%d reconnect success\n", session->s_mds); in handle_session()
3416 session->s_state = CEPH_MDS_SESSION_OPEN; in handle_session()
3417 session->s_features = features; in handle_session()
3418 renewed_caps(mdsc, session, 0); in handle_session()
3419 if (test_bit(CEPHFS_FEATURE_METRIC_COLLECT, &session->s_features)) in handle_session()
3423 __close_session(mdsc, session); in handle_session()
3427 if (session->s_renew_seq == seq) in handle_session()
3428 renewed_caps(mdsc, session, 1); in handle_session()
3432 if (session->s_state == CEPH_MDS_SESSION_RECONNECTING) in handle_session()
3433 pr_info("mds%d reconnect denied\n", session->s_mds); in handle_session()
3434 session->s_state = CEPH_MDS_SESSION_CLOSED; in handle_session()
3435 cleanup_session_requests(mdsc, session); in handle_session()
3436 remove_session_caps(session); in handle_session()
3443 session->s_mds); in handle_session()
3444 atomic_inc(&session->s_cap_gen); in handle_session()
3445 session->s_cap_ttl = jiffies - 1; in handle_session()
3446 send_renew_caps(mdsc, session); in handle_session()
3450 ceph_trim_caps(mdsc, session, le32_to_cpu(h->max_caps)); in handle_session()
3454 send_flushmsg_ack(mdsc, session, seq); in handle_session()
3458 dout("force_session_readonly %p\n", session); in handle_session()
3459 spin_lock(&session->s_cap_lock); in handle_session()
3460 session->s_readonly = true; in handle_session()
3461 spin_unlock(&session->s_cap_lock); in handle_session()
3462 wake_up_session_caps(session, FORCE_RO); in handle_session()
3466 WARN_ON(session->s_state != CEPH_MDS_SESSION_OPENING); in handle_session()
3467 pr_info("mds%d rejected session\n", session->s_mds); in handle_session()
3468 session->s_state = CEPH_MDS_SESSION_REJECTED; in handle_session()
3469 cleanup_session_requests(mdsc, session); in handle_session()
3470 remove_session_caps(session); in handle_session()
3481 mutex_unlock(&session->s_mutex); in handle_session()
3484 __wake_requests(mdsc, &session->s_waiting); in handle_session()
3490 ceph_put_mds_session(session); in handle_session()
3527 struct ceph_mds_session *session) in replay_unsafe_requests() argument
3532 dout("replay_unsafe_requests mds%d\n", session->s_mds); in replay_unsafe_requests()
3535 list_for_each_entry_safe(req, nreq, &session->s_unsafe, r_unsafe_item) in replay_unsafe_requests()
3536 __send_request(session, req, true); in replay_unsafe_requests()
3552 if (req->r_session->s_mds != session->s_mds) in replay_unsafe_requests()
3557 __send_request(session, req, true); in replay_unsafe_requests()
3623 ceph_con_send(&recon_state->session->s_con, reply); in send_reconnect_partial()
3713 cap->cap_gen = atomic_read(&cap->session->s_cap_gen); in reconnect_caps_cb()
3924 struct ceph_mds_session *session) in send_mds_reconnect() argument
3927 int mds = session->s_mds; in send_mds_reconnect()
3930 .session = session, in send_mds_reconnect()
3944 xa_destroy(&session->s_delegated_inos); in send_mds_reconnect()
3946 mutex_lock(&session->s_mutex); in send_mds_reconnect()
3947 session->s_state = CEPH_MDS_SESSION_RECONNECTING; in send_mds_reconnect()
3948 session->s_seq = 0; in send_mds_reconnect()
3950 dout("session %p state %s\n", session, in send_mds_reconnect()
3951 ceph_session_state_name(session->s_state)); in send_mds_reconnect()
3953 atomic_inc(&session->s_cap_gen); in send_mds_reconnect()
3955 spin_lock(&session->s_cap_lock); in send_mds_reconnect()
3957 session->s_readonly = 0; in send_mds_reconnect()
3963 session->s_cap_reconnect = 1; in send_mds_reconnect()
3965 detach_cap_releases(session, &dispose); in send_mds_reconnect()
3966 spin_unlock(&session->s_cap_lock); in send_mds_reconnect()
3973 ceph_con_close(&session->s_con); in send_mds_reconnect()
3974 ceph_con_open(&session->s_con, in send_mds_reconnect()
3979 replay_unsafe_requests(mdsc, session); in send_mds_reconnect()
3981 ceph_early_kick_flushing_caps(mdsc, session); in send_mds_reconnect()
3990 if (test_bit(CEPHFS_FEATURE_MULTI_RECONNECT, &session->s_features)) { in send_mds_reconnect()
3993 } else if (session->s_con.peer_features & CEPH_FEATURE_MDSENC) { in send_mds_reconnect()
3999 err = ceph_iterate_session_caps(session, reconnect_caps_cb, &recon_state); in send_mds_reconnect()
4001 spin_lock(&session->s_cap_lock); in send_mds_reconnect()
4002 session->s_cap_reconnect = 0; in send_mds_reconnect()
4003 spin_unlock(&session->s_cap_lock); in send_mds_reconnect()
4066 ceph_con_send(&session->s_con, reply); in send_mds_reconnect()
4068 mutex_unlock(&session->s_mutex); in send_mds_reconnect()
4071 __wake_requests(mdsc, &session->s_waiting); in send_mds_reconnect()
4081 mutex_unlock(&session->s_mutex); in send_mds_reconnect()
4270 struct ceph_mds_session *session, in handle_lease() argument
4277 int mds = session->s_mds; in handle_lease()
4303 mutex_lock(&session->s_mutex); in handle_lease()
4304 inc_session_sequence(session); in handle_lease()
4328 if (di->lease_session == session) { in handle_lease()
4337 if (di->lease_session == session && in handle_lease()
4338 di->lease_gen == atomic_read(&session->s_cap_gen) && in handle_lease()
4362 ceph_con_send(&session->s_con, msg); in handle_lease()
4365 mutex_unlock(&session->s_mutex); in handle_lease()
4374 void ceph_mdsc_lease_send_msg(struct ceph_mds_session *session, in ceph_mdsc_lease_send_msg() argument
4384 dentry, ceph_lease_op_name(action), session->s_mds); in ceph_mdsc_lease_send_msg()
4409 ceph_con_send(&session->s_con, msg); in ceph_mdsc_lease_send_msg()
4799 struct ceph_mds_session *session; in ceph_mdsc_close_sessions() local
4808 session = __ceph_lookup_mds_session(mdsc, i); in ceph_mdsc_close_sessions()
4809 if (!session) in ceph_mdsc_close_sessions()
4812 mutex_lock(&session->s_mutex); in ceph_mdsc_close_sessions()
4813 if (__close_session(mdsc, session) <= 0) in ceph_mdsc_close_sessions()
4815 mutex_unlock(&session->s_mutex); in ceph_mdsc_close_sessions()
4816 ceph_put_mds_session(session); in ceph_mdsc_close_sessions()
4830 session = ceph_get_mds_session(mdsc->sessions[i]); in ceph_mdsc_close_sessions()
4831 __unregister_session(mdsc, session); in ceph_mdsc_close_sessions()
4833 mutex_lock(&session->s_mutex); in ceph_mdsc_close_sessions()
4834 remove_session_caps(session); in ceph_mdsc_close_sessions()
4835 mutex_unlock(&session->s_mutex); in ceph_mdsc_close_sessions()
4836 ceph_put_mds_session(session); in ceph_mdsc_close_sessions()
4854 struct ceph_mds_session *session; in ceph_mdsc_force_umount() local
4861 session = __ceph_lookup_mds_session(mdsc, mds); in ceph_mdsc_force_umount()
4862 if (!session) in ceph_mdsc_force_umount()
4865 if (session->s_state == CEPH_MDS_SESSION_REJECTED) in ceph_mdsc_force_umount()
4866 __unregister_session(mdsc, session); in ceph_mdsc_force_umount()
4867 __wake_requests(mdsc, &session->s_waiting); in ceph_mdsc_force_umount()
4870 mutex_lock(&session->s_mutex); in ceph_mdsc_force_umount()
4871 __close_session(mdsc, session); in ceph_mdsc_force_umount()
4872 if (session->s_state == CEPH_MDS_SESSION_CLOSING) { in ceph_mdsc_force_umount()
4873 cleanup_session_requests(mdsc, session); in ceph_mdsc_force_umount()
4874 remove_session_caps(session); in ceph_mdsc_force_umount()
4876 mutex_unlock(&session->s_mutex); in ceph_mdsc_force_umount()
4877 ceph_put_mds_session(session); in ceph_mdsc_force_umount()