Skip to content

Commit

Permalink
mds: Fix the linkmerge assert check
Browse files Browse the repository at this point in the history
Let's say there is a hardlink created as below.

touch file1
ln file1 hl_file1

In this case 'file1' holds the primary inode and 'hl_file' holds
the remote inode (holds primary inode number and other required info).
Now, if the 'file1' is deleted first, it's moved to a stray directory
and can't be deleted because the hardlink 'hl_file1' still exists
which requires primary inode. So on straydn eval, this primary
inode is linked to 'hl_file1 and remote inode is removed. This is called
the linkmerge/stray reintegration. So in the linkmerge case, the srcdnl
is primary straydn and the destdnl is the remote.

Signed-off-by: Kotresh HR <khiremat@redhat.com>
Fixes: https://tracker.ceph.com/issues/61879
  • Loading branch information
kotreshhr committed Jul 13, 2023
1 parent 1caadd7 commit 85279ac
Showing 1 changed file with 1 addition and 1 deletion.
2 changes: 1 addition & 1 deletion src/mds/Server.cc
Expand Up @@ -9741,7 +9741,7 @@ void Server::_rename_apply(MDRequestRef& mdr, CDentry *srcdn, CDentry *destdn, C
// primary+remote link merge?
bool linkmerge = (srcdnl->get_inode() == oldin);
if (linkmerge)
ceph_assert(srcdnl->is_primary() || destdnl->is_remote());
ceph_assert(srcdnl->is_primary() && destdnl->is_remote());

bool new_in_snaprealm = false;
bool new_oldin_snaprealm = false;
Expand Down

0 comments on commit 85279ac

Please sign in to comment.