From: John Spray Date: Tue, 13 Jan 2015 15:43:14 +0000 (+0000) Subject: JournalTool: handle corrupt fnodes X-Git-Tag: v0.93~251^2~7 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=478659f34a0b4a16ba43c29014e59ae832f77d34;p=ceph.git JournalTool: handle corrupt fnodes --- diff --git a/src/tools/cephfs/JournalTool.cc b/src/tools/cephfs/JournalTool.cc index c2343f9c323e..8f980b34a8e2 100644 --- a/src/tools/cephfs/JournalTool.cc +++ b/src/tools/cephfs/JournalTool.cc @@ -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 "