//check_rdcaps_list();
}
+ void inc_last_seq() { last_sent++; };
ceph_seq_t get_last_seq() { return last_sent; }
ceph_seq_t get_last_issue() { return last_issue; }
set<CInode*> need_issue;
drop_locks(mut, &need_issue);
- mut->cleanup();
- delete mut;
if (!in->is_head() && !in->client_snap_caps.empty()) {
dout(10) << " client_snap_caps " << in->client_snap_caps << dendl;
share_inode_max_size(in);
}
issue_caps_set(need_issue);
+
+ // auth unpin after issuing caps
+ mut->cleanup();
+ delete mut;
}
Capability* Locker::issue_new_caps(CInode *in,
continue;
if (cap->pending() & (CEPH_CAP_FILE_WR|CEPH_CAP_FILE_BUFFER)) {
dout(10) << "share_inode_max_size with client." << client << dendl;
+ cap->inc_last_seq();
MClientCaps *m = new MClientCaps(CEPH_CAP_OP_GRANT,
in->ino(),
in->find_snaprealm()->inode->ino(),
SnapRealm *realm = in->find_snaprealm();
if (realm->have_past_parents_open()) {
dout(10) << "do_cap_import " << session->info.inst.name << " mseq " << cap->get_mseq() << " on " << *in << dendl;
- if (cap->get_last_seq() == 0)
- cap->issue_norevoke(cap->issued()); // reconnected cap
+ if (cap->get_last_seq() == 0) // reconnected cap
+ cap->inc_last_seq();
cap->set_last_issue();
MClientCaps *reap = new MClientCaps(CEPH_CAP_OP_IMPORT,
in->ino(),