From: Patrick Donnelly Date: Thu, 1 Feb 2024 14:15:37 +0000 (-0500) Subject: mds: ensure snapclient is synced before corruption check X-Git-Tag: v18.2.4~84^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=c0f16ecc21861f3eb8fb5410c55ef93d5009d99c;p=ceph.git mds: ensure snapclient is synced before corruption check During resolve, orphan dirfrags are purged which may result in dentry commits. If the snapclient is not sync'd (which normally happens as the last step of up:resolve), then the snapclient indicates the last sequence is 1 which is always less than a dentry's legitimate "first" value. Fixes: https://tracker.ceph.com/issues/64058 Signed-off-by: Patrick Donnelly (cherry picked from commit caa34c1f6102f88e2c07f58af72bd886cbcc33b3) --- diff --git a/src/mds/CDentry.cc b/src/mds/CDentry.cc index b6d169b9e0f85..6722f0f2a3670 100644 --- a/src/mds/CDentry.cc +++ b/src/mds/CDentry.cc @@ -702,7 +702,7 @@ bool CDentry::check_corruption(bool load) { auto&& snapclient = dir->mdcache->mds->snapclient; auto next_snap = snapclient->get_last_seq()+1; - if (first > last || (snapclient->is_server_ready() && first > next_snap)) { + if (first > last || (snapclient->is_synced() && first > next_snap)) { if (load) { dout(1) << "loaded already corrupt dentry: " << *this << dendl; corrupt_first_loaded = true;