]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
Merge pull request #11517 from ukernel/wip-17562
authorJohn Spray <jspray@redhat.com>
Tue, 25 Oct 2016 11:30:42 +0000 (12:30 +0100)
committerGitHub <noreply@github.com>
Tue, 25 Oct 2016 11:30:42 +0000 (12:30 +0100)
Fix #17562 (backtrace check fails when scrubbing directory created by fsstress)

Reviewed-by: John Spray <john.spray@redhat.com>
Reviewed-by: Greg Farnum <gfarnum@redhat.com>
1  2 
src/mds/CInode.cc

index faded754b712adaa51f14aba4912a9b0c8cfe01d,feb4530c5741c08424668ca02c51d401e54878fe..d6c024c28fc94a7f81fdd8ee5907bef483ef0e21
@@@ -3845,27 -3840,13 +3845,23 @@@ void CInode::validate_disk_state(CInode
        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 (!results->backtrace.passed && in->scrub_infop->header->get_repair()) {
 +        std::string path;
 +        in->make_path_string(path);
 +        in->mdcache->mds->clog->warn() << "bad backtrace on inode " << *in
 +                           << ", rewriting it at " << path;
 +        in->_mark_dirty_parent(in->mdcache->mds->mdlog->get_current_segment(),
 +                           false);
 +      }
 +
        // If the inode's number was free in the InoTable, fix that
        // (#15619)
        {