}
bool _start(int rval) {
+ ceph_assert(in->can_auth_pin());
+ in->auth_pin(this);
+
if (in->is_dirty()) {
MDCache *mdcache = in->mdcache; // For the benefit of dout
auto ino = [this]() { return in->ino(); }; // For the benefit of dout
in->scrub_infop->header->set_repaired();
if (fin)
fin->complete(get_rval());
+
+ in->auth_unpin(this);
}
};
void MDCache::repair_inode_stats(CInode *diri)
{
MDRequestRef mdr = request_start_internal(CEPH_MDS_OP_REPAIR_INODESTATS);
- mdr->pin(diri);
+ mdr->auth_pin(diri); // already auth pinned by CInode::validate_disk_state()
mdr->internal_op_private = diri;
mdr->internal_op_finish = new C_MDSInternalNoop;
repair_inode_stats_work(mdr);
void MDCache::rdlock_dirfrags_stats(CInode *diri, MDSInternalContext* fin)
{
MDRequestRef mdr = request_start_internal(CEPH_MDS_OP_RDLOCK_FRAGSSTATS);
- mdr->pin(diri);
+ mdr->auth_pin(diri); // already auth pinned by CInode::validate_disk_state()
mdr->internal_op_private = diri;
mdr->internal_op_finish = fin;
return rdlock_dirfrags_stats_work(mdr);