<< " op " << ceph_cap_op_name(m->get_op()) << dendl;
if (!mds->is_clientreplay() && !mds->is_active() && !mds->is_stopping()) {
+ if (!session) {
+ dout(5) << " no session, dropping " << *m << dendl;
+ m->put();
+ return;
+ }
+ if (session->is_closed() ||
+ session->is_closing() ||
+ session->is_killing()) {
+ dout(7) << " session closed|closing|killing, dropping " << *m << dendl;
+ m->put();
+ return;
+ }
if (mds->is_reconnect() &&
m->get_dirty() && m->get_client_tid() > 0 &&
!session->have_completed_flush(m->get_client_tid())) {
return;
}
- if (m->get_client_tid() > 0 &&
+ if (m->get_client_tid() > 0 && session &&
session->have_completed_flush(m->get_client_tid())) {
dout(7) << "handle_client_caps already flushed tid " << m->get_client_tid()
<< " for client." << client << dendl;
}
// "oldest flush tid" > 0 means client uses unique TID for each flush
- if (m->get_oldest_flush_tid() > 0) {
+ if (m->get_oldest_flush_tid() > 0 && session) {
if (session->trim_completed_flushes(m->get_oldest_flush_tid())) {
mds->mdlog->get_current_segment()->touched_sessions.insert(session->info.inst.name);