return last_sent;
}
int confirm_receipt(ceph_seq_t seq, unsigned caps);
- // we may get a release racing with revocations, which means our revokes will be ignored
- // by the client. clean them out of our _revokes history so we don't wait on them.
- void clean_revoke_from(ceph_seq_t li) {
- bool changed = false;
- while (!_revokes.empty() && _revokes.front().last_issue <= li) {
- _revokes.pop_front();
- changed = true;
- }
- if (changed) {
- bool was_revoking = (_issued & ~_pending);
- calc_issued();
- if (was_revoking && _issued == _pending) {
- item_revoking_caps.remove_myself();
- item_client_revoking_caps.remove_myself();
- maybe_clear_notable();
- }
- }
- }
ceph_seq_t get_mseq() const { return mseq; }
void inc_mseq() { mseq++; }
new C_Locker_RetryCapRelease(this, client, ino, cap_id, mseq, seq));
return;
}
- if (seq != cap->get_last_issue()) {
- dout(7) << " issue_seq " << seq << " != " << cap->get_last_issue() << dendl;
- // clean out any old revoke history
- cap->clean_revoke_from(seq);
- eval_cap_gather(in);
- return;
- }
remove_client_cap(in, cap);
}