return;
}
+void ScrubStack::identify_remote_link_damage(CDentry *dn) {
+
+ CDentry::linkage_t *dnl = dn->get_linkage();
+ CInode *remote_inode = mdcache->get_inode(dnl->get_remote_ino());
+ if (!remote_inode) {
+ if (mdcache->mds->damage_table.is_remote_damaged(dnl->get_remote_ino())) {
+ dout(4) << "scrub: remote dentry points to damaged ino " << *dn << dendl;
+ return;
+ }
+ mdcache->open_remote_dentry(dn, true, new C_MDSInternalNoop());
+ }
+}
+
void ScrubStack::scrub_dirfrag(CDir *dir, bool *done)
{
ceph_assert(dir != NULL);
if (dnl->is_primary()) {
_enqueue(dnl->get_inode(), header, false);
} else if (dnl->is_remote() || dnl->is_referent_remote()) {
- // TODO: check remote linkage
+ identify_remote_link_damage(dn);
}
}
}
*/
void scrub_file_inode(CInode *in);
+ /**
+ * Scrub a file inode.
+ * @param dn The remote dentry to identify
+ */
+ void identify_remote_link_damage(CDentry *dn);
+
/**
* Callback from completion of CInode::validate_disk_state
* @param in The inode we were validating