issue = cap->pending();
cap->set_last_issue();
cap->set_last_issue_stamp(ceph_clock_now(g_ceph_context));
+ cap->clear_new();
e.cap.caps = issue;
e.cap.wanted = cap->wanted();
e.cap.cap_id = cap->get_cap_id();
// new cap
cap = in->add_client_cap(my_client, session, realm);
cap->set_wanted(my_want);
+ cap->mark_new();
cap->inc_suppress(); // suppress file cap messages for new cap (we'll bundle with the open() reply)
is_new = true;
} else {
seq = cap->issue((wanted|likes) & allowed);
int after = cap->pending();
- if (seq > 0) {
+ if (cap->is_new()) {
+ // haven't send caps to client yet
+ if (before & ~after)
+ cap->confirm_receipt(seq, after);
+ } else {
dout(7) << " sending MClientCaps to client." << it->first
<< " seq " << cap->get_last_seq()
<< " new pending " << ccap_string(after) << " was " << ccap_string(before)
if (cap->get_last_seq() == 0) // reconnected cap
cap->inc_last_seq();
cap->set_last_issue();
+ cap->set_last_issue_stamp(ceph_clock_now(g_ceph_context));
+ cap->clear_new();
MClientCaps *reap = new MClientCaps(CEPH_CAP_OP_IMPORT,
in->ino(),
realm->inode->ino(),
assert(session);
Capability *cap = in->get_client_cap(q->first);
assert(cap);
- cap->clear_new();
cap->merge(q->second, true);
mds->mdcache->do_cap_import(session, in, cap, q->second.cap_id, q->second.seq,
q->second.mseq - 1, it->second.peer, CEPH_CAP_FLAG_AUTH);