From: Yan, Zheng Date: Mon, 17 Oct 2016 07:30:20 +0000 (+0800) Subject: mds: fix false 'bad backtrace' warnings during online scrub X-Git-Tag: v11.1.0~516^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=0996038bff9d0c99164bf2c392298904bfd87670;p=ceph.git mds: fix false 'bad backtrace' warnings during online scrub Only inode's direct parent in backtrace is supposed to be uptodate. The rest back pointers in backtrace are hints, they can be stale. The scrub code prints warning when inode's on-disk backtrace is not equivalent to inode's current path. This check is too strange, it causes lots of false warnings for workload that does directory rename. Fixes: http://tracker.ceph.com/issues/17562 Signed-off-by: Yan, Zheng --- diff --git a/src/mds/CInode.cc b/src/mds/CInode.cc index 5dcdcb1577f2..feb4530c5741 100644 --- a/src/mds/CInode.cc +++ b/src/mds/CInode.cc @@ -3840,15 +3840,11 @@ void CInode::validate_disk_state(CInode::validated_data *results, memory_newer = memory_backtrace.compare(results->backtrace.ondisk_value, &equivalent, &divergent); - if (equivalent) { - results->backtrace.passed = true; + if (divergent || memory_newer < 0) { + // we're divergent, or on-disk version is newer + results->backtrace.error_str << "On-disk backtrace is divergent or newer"; } else { - if (divergent || memory_newer <= 0) { - // we're divergent, or don't have a newer version to write - results->backtrace.error_str << - "On-disk backtrace is divergent or newer"; - goto next; - } + results->backtrace.passed = true; } next: // If the inode's number was free in the InoTable, fix that