| 4842 | } |
| 4843 | |
| 4844 | void 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 | |
| 4883 | void Client::remove_all_caps(Inode *in) |
| 4884 | { |
nothing calls this directly
no test coverage detected