From: Kotresh HR Date: Tue, 25 Feb 2025 08:05:56 +0000 (+0530) Subject: mds/unlink: Referent inode - reverse link management X-Git-Tag: v20.3.0~377^2~24 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=0779064a7c23b68e23bdb7acb1028878497aa958;p=ceph.git mds/unlink: Referent inode - reverse link management Remove referent inode from the referent_inodes list on unlink of secondary hardlink file with referent inode. Fixes: https://tracker.ceph.com/issues/54205 Signed-off-by: Kotresh HR --- diff --git a/src/mds/Server.cc b/src/mds/Server.cc index 92535beef4c1..dc497655df0c 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -8603,6 +8603,13 @@ void Server::_unlink_local(const MDRequestRef& mdr, CDentry *dn, CDentry *strayd if (pi.inode->nlink == 0) in->state_set(CInode::STATE_ORPHAN); + // Remove referent inode from primary link + if (dnl->is_referent_remote()) { + pi.inode->remove_referent_ino(ref_in->ino()); + dout(20) << __func__ << " referent_inodes " << std::hex << pi.inode->get_referent_inodes() + << " referent ino removed " << ref_in->ino() << dendl; + } + if (mdr->more()->desti_srnode) { auto& desti_srnode = mdr->more()->desti_srnode; in->project_snaprealm(desti_srnode);