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

Method remove_session_caps

src/client/Client.cc:4889–4938  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

4887}
4888
4889void Client::remove_session_caps(MetaSession *s, int err)
4890{
4891 ldout(cct, 10) << __func__ << " mds." << s->mds_num << dendl;
4892
4893 while (s->caps.size()) {
4894 Cap *cap = *s->caps.begin();
4895 InodeRef in(&cap->inode);
4896 bool dirty_caps = false;
4897 if (in->auth_cap == cap) {
4898 dirty_caps = in->dirty_caps | in->flushing_caps;
4899 in->wanted_max_size = 0;
4900 in->requested_max_size = 0;
4901 if (in->has_any_filelocks())
4902 in->flags |= I_ERROR_FILELOCK;
4903 }
4904 auto caps = cap->implemented;
4905 if (cap->wanted | cap->issued)
4906 in->flags |= I_CAP_DROPPED;
4907 remove_cap(cap, false);
4908 in->cap_snaps.clear();
4909 if (dirty_caps) {
4910 lderr(cct) << __func__ << " still has dirty|flushing caps on " << *in << dendl;
4911 if (in->flushing_caps) {
4912 num_flushing_caps--;
4913 in->flushing_cap_tids.clear();
4914 }
4915 in->flushing_caps = 0;
4916 in->mark_caps_clean();
4917 put_inode(in.get());
4918 }
4919 caps &= CEPH_CAP_FILE_CACHE | CEPH_CAP_FILE_BUFFER;
4920 if (caps && !in->caps_issued_mask(caps, true)) {
4921 if (err == -EBLOCKLISTED) {
4922 if (in->oset.dirty_or_tx) {
4923 lderr(cct) << __func__ << " still has dirty data on " << *in << dendl;
4924 in->set_async_err(err);
4925 }
4926 objectcacher->purge_set(&in->oset);
4927 } else {
4928 objectcacher->release_set(&in->oset);
4929 }
4930 _schedule_invalidate_callback(in.get(), 0, 0);
4931 }
4932
4933 ldout(cct, 10) << __func__ << " calling signal_caps_inode" << dendl;
4934 signal_caps_inode(in.get());
4935 }
4936 s->flushing_caps_tids.clear();
4937 sync_cond.notify_all();
4938}
4939
4940std::pair<int, bool> Client::_do_remount(bool retry_on_error)
4941{

Callers

nothing calls this directly

Calls 11

mark_caps_cleanMethod · 0.80
caps_issued_maskMethod · 0.80
set_async_errMethod · 0.80
purge_setMethod · 0.80
release_setMethod · 0.80
sizeMethod · 0.45
beginMethod · 0.45
has_any_filelocksMethod · 0.45
clearMethod · 0.45
getMethod · 0.45
notify_allMethod · 0.45

Tested by

no test coverage detected