summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mds/Capability.h8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/mds/Capability.h b/src/mds/Capability.h
index fdecb9090b3..fb6b3dc1f16 100644
--- a/src/mds/Capability.h
+++ b/src/mds/Capability.h
@@ -171,14 +171,16 @@ public:
}
void confirm_receipt(ceph_seq_t seq, unsigned caps) {
if (seq == last_sent) {
- _pending = caps;
_revokes.clear();
_issued = caps;
+ // don't add bits
+ _pending &= caps;
} else {
// can i forget any revocations?
- while (!_revokes.empty() &&
- _revokes.front().seq <= seq)
+ while (!_revokes.empty() && _revokes.front().seq < seq)
_revokes.pop_front();
+ if (!_revokes.empty() && _revokes.front().seq == seq)
+ _revokes.begin()->before = caps;
_calc_issued();
}
//check_rdcaps_list();