From 7ffa065a03316b67b6b6d48692b4b181f93ddbda Mon Sep 17 00:00:00 2001 From: Patrick Donnelly Date: Wed, 29 Mar 2023 09:05:25 -0400 Subject: [PATCH] mds: add config to decide whether to mark dentry bad So admin can restore access to files if necessary. Signed-off-by: Patrick Donnelly --- src/common/options/mds.yaml.in | 9 +++++++++ src/mds/CDentry.cc | 4 +++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/common/options/mds.yaml.in b/src/common/options/mds.yaml.in index cbbc00e41ed78..ddf2d0860de60 100644 --- a/src/common/options/mds.yaml.in +++ b/src/common/options/mds.yaml.in @@ -959,6 +959,15 @@ options: services: - mds fmt_desc: MDS will abort if dentry is detected newly corrupted. +- name: mds_go_bad_corrupt_dentry + type: bool + level: advanced + default: true + services: + - mds + fmt_desc: MDS will mark a corrupt dentry as bad and isolate + flags: + - runtime - name: mds_inject_rename_corrupt_dentry_first type: float level: dev diff --git a/src/mds/CDentry.cc b/src/mds/CDentry.cc index 8d79f16576887..55f2191346fa5 100644 --- a/src/mds/CDentry.cc +++ b/src/mds/CDentry.cc @@ -709,7 +709,9 @@ bool CDentry::check_corruption(bool load) } else { derr << "newly corrupt dentry to be committed: " << *this << dendl; } - dir->go_bad_dentry(last, get_name()); + if (g_conf().get_val("mds_go_bad_corrupt_dentry")) { + dir->go_bad_dentry(last, get_name()); + } if (!load && g_conf().get_val("mds_abort_on_newly_corrupt_dentry")) { dir->mdcache->mds->clog->error() << "MDS abort because newly corrupt dentry to be committed: " << *this; ceph_abort("detected newly corrupt dentry"); /* avoid writing out newly corrupted dn */ -- 2.39.5