| 4887 | } |
| 4888 | |
| 4889 | void 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 | |
| 4940 | std::pair<int, bool> Client::_do_remount(bool retry_on_error) |
| 4941 | { |
nothing calls this directly
no test coverage detected