]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
JournalTool: handle corrupt fnodes
authorJohn Spray <john.spray@redhat.com>
Tue, 13 Jan 2015 15:43:14 +0000 (15:43 +0000)
committerJohn Spray <john.spray@redhat.com>
Mon, 19 Jan 2015 14:09:34 +0000 (14:09 +0000)
src/tools/cephfs/JournalTool.cc

index c2343f9c323ef4306af9acf574860f37641d4a39..8f980b34a8e210e8ba912e0680d9c132f8498bc7 100644 (file)
@@ -605,10 +605,15 @@ int JournalTool::scavenge_dentries(
       // Conditionally update existing omap header
       fnode_t old_fnode;
       bufferlist::iterator old_fnode_iter = old_fnode_bl.begin();
-      old_fnode.decode(old_fnode_iter);  // FIXME handle decode error and overwrite
-      dout(4) << "frag " << frag_oid.name << " fnode old v" <<
-        old_fnode.version << " vs new v" << lump.fnode.version << dendl;
-      write_fnode = old_fnode.version < lump.fnode.version;
+      try {
+        old_fnode.decode(old_fnode_iter);
+        dout(4) << "frag " << frag_oid.name << " fnode old v" <<
+          old_fnode.version << " vs new v" << lump.fnode.version << dendl;
+        write_fnode = old_fnode.version < lump.fnode.version;
+      } catch (const buffer::error &err) {
+        dout(1) << "frag " << frag_oid.name << " is corrupt, overwriting" << dendl;
+        write_fnode = true;
+      }
     } else {
       // Unexpected error
       dout(4) << "failed to read OMAP header from directory fragment "