From 36c8cb5f60483066d7b6a2f6d7be809bc63307ed Mon Sep 17 00:00:00 2001 From: Venky Shankar Date: Wed, 5 Mar 2025 06:23:21 +0000 Subject: [PATCH] mds: include deleted file dentry in snapdiff readdir result Fixes: http://tracker.ceph.com/issues/70287 Signed-off-by: Venky Shankar (cherry picked from commit 33c6f232069f1cb77447495657ab584e5d52f594) --- src/mds/Server.cc | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/src/mds/Server.cc b/src/mds/Server.cc index 23cf5a9f39c05..f019b7b9ea063 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -12083,19 +12083,30 @@ bool Server::build_snap_diff( continue; } else { if (before.dn && dn->get_name() == name_before) { - if (mtime == before.mtime) { - dout(30) << __func__ << " timestamp not changed " << dn->get_name() << " " - << dn->first << "/" << dn->last - << " " << mtime - << dendl; + if (before.in->ino() != in->ino()) { + dout(30) << __func__ << " inode changed " << dn->get_name() << " " + << dn->first << "/" << dn->last + << " " << before.mtime << " vs. " << mtime + << dendl; + if (!insert_deleted(before)) { + break; + } before.reset(); - continue; } else { - dout(30) << __func__ << " timestamp changed " << dn->get_name() << " " - << dn->first << "/" << dn->last - << " " << before.mtime << " vs. " << mtime - << dendl; - before.reset(); + if (mtime == before.mtime) { + dout(30) << __func__ << " timestamp not changed " << dn->get_name() << " " + << dn->first << "/" << dn->last + << " " << mtime + << dendl; + before.reset(); + continue; + } else { + dout(30) << __func__ << " timestamp changed " << dn->get_name() << " " + << dn->first << "/" << dn->last + << " " << before.mtime << " vs. " << mtime + << dendl; + before.reset(); + } } } dout(20) << __func__ << " new file " << dn->get_name() << " " -- 2.39.5