]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds/unlink: Referent inode - reverse link management
authorKotresh HR <khiremat@redhat.com>
Tue, 25 Feb 2025 08:05:56 +0000 (13:35 +0530)
committerKotresh HR <khiremat@redhat.com>
Tue, 4 Mar 2025 06:20:47 +0000 (11:50 +0530)
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 <khiremat@redhat.com>
src/mds/Server.cc

index 92535beef4c100dc6d7b8160afa4b3c4edf0d36f..dc497655df0cfc44c2c9cc4b6a32f1f2a63a9c07 100644 (file)
@@ -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);