MCPcopy Create free account
hub / github.com/ceph/ceph / remove_cap

Method remove_cap

src/client/Client.cc:4844–4881  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

4842}
4843
4844void Client::remove_cap(Cap *cap, bool queue_release)
4845{
4846 auto &in = cap->inode;
4847 MetaSession *session = cap->session;
4848 mds_rank_t mds = cap->session->mds_num;
4849
4850 ldout(cct, 10) << __func__ << " mds." << mds << " on " << in << dendl;
4851
4852 if (queue_release) {
4853 session->enqueue_cap_release(
4854 in.ino,
4855 cap->cap_id,
4856 cap->issue_seq,
4857 cap->mseq,
4858 cap_epoch_barrier);
4859 } else {
4860 dec_pinned_icaps();
4861 }
4862
4863
4864 if (in.auth_cap == cap) {
4865 if (in.flushing_cap_item.is_on_list()) {
4866 ldout(cct, 10) << " removing myself from flushing_cap list" << dendl;
4867 in.flushing_cap_item.remove_myself();
4868 }
4869 in.auth_cap = NULL;
4870 }
4871 size_t n = in.caps.erase(mds);
4872 ceph_assert(n == 1);
4873 cap = nullptr;
4874
4875 if (!in.is_any_caps()) {
4876 ldout(cct, 15) << __func__ << " last one, closing snaprealm " << in.snaprealm << dendl;
4877 in.snaprealm_item.remove_myself();
4878 put_snap_realm(in.snaprealm);
4879 in.snaprealm = 0;
4880 }
4881}
4882
4883void Client::remove_all_caps(Inode *in)
4884{

Callers

nothing calls this directly

Calls 5

enqueue_cap_releaseMethod · 0.80
is_on_listMethod · 0.45
remove_myselfMethod · 0.45
eraseMethod · 0.45
is_any_capsMethod · 0.45

Tested by

no test coverage detected