if (session->cap_renew_seq == m->get_seq()) {
session->cap_ttl =
session->last_cap_renew_request + mdsmap->get_session_timeout();
- wake_inode_waiters(session);
+ wake_up_session_caps(session, false);
}
break;
kick_requests(session);
kick_flushing_caps(session);
signal_context_list(session->waiting_for_open);
- kick_maxsize_requests(session);
- wake_inode_waiters(session);
+ wake_up_session_caps(session, true);
}
connect_mds_targets(mds);
} else if (newstate == MDSMap::STATE_NULL &&
}
}
-void Client::wake_inode_waiters(MetaSession *s)
+void Client::wake_up_session_caps(MetaSession *s, bool reconnect)
{
for (const auto &cap : s->caps) {
- signal_cond_list(cap->inode.waitfor_caps);
+ auto &in = cap->inode;
+ if (reconnect) {
+ in.requested_max_size = 0;
+ in.wanted_max_size = 0;
+ }
+ signal_cond_list(in.waitfor_caps);
}
}
}
}
-void Client::kick_maxsize_requests(MetaSession *session)
-{
- for (const auto &cap : session->caps) {
- auto &in = cap->inode;
- in.requested_max_size = 0;
- in.wanted_max_size = 0;
- signal_cond_list(in.waitfor_caps);
- }
-}
-
void SnapRealm::build_snap_context()
{
set<snapid_t> snaps;
void flush_caps(Inode *in, MetaSession *session, bool sync=false);
void kick_flushing_caps(MetaSession *session);
void early_kick_flushing_caps(MetaSession *session);
- void kick_maxsize_requests(MetaSession *session);
int get_caps(Inode *in, int need, int want, int *have, loff_t endoff);
int get_caps_used(Inode *in);
}
// helpers
- void wake_inode_waiters(MetaSession *s);
+ void wake_up_session_caps(MetaSession *s, bool reconnect);
void wait_on_context_list(list<Context*>& ls);
void signal_context_list(list<Context*>& ls);