]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: recalc_allocated() when decoding bluefs_fnode_t 20701/head
authorKefu Chai <kchai@redhat.com>
Mon, 5 Mar 2018 03:32:48 +0000 (11:32 +0800)
committerKefu Chai <kchai@redhat.com>
Mon, 5 Mar 2018 13:47:19 +0000 (21:47 +0800)
Fixes: http://tracker.ceph.com/issues/23212
Signed-off-by: Jianpeng Ma <jianpeng.ma@intel.com>
Signed-off-by: Kefu Chai <kchai@redhat.com>
src/os/bluestore/BlueFS.cc
src/os/bluestore/bluefs_types.h

index 35b4be35b85581c23f658ec4e7b63cba974cf240..fcc4c75da745a7ca1331d26a29664ce3ffe9abba 100644 (file)
@@ -873,7 +873,6 @@ int BlueFS::_replay(bool noop, bool to_stdout)
         {
          bluefs_fnode_t fnode;
          decode(fnode, p);
-         fnode.recalc_allocated();
          dout(20) << __func__ << " 0x" << std::hex << pos << std::dec
                    << ":  op_file_update " << " " << fnode << dendl;
           if (unlikely(to_stdout)) {
index e7585bb176368d3a9f50e4e6ccb84bdd2e749e0e..06cfbdbafdd62395642daaff0781ba16d778304f 100644 (file)
@@ -54,7 +54,22 @@ struct bluefs_fnode_t {
       allocated += p.length;
   }
 
-  DENC(bluefs_fnode_t, v, p) {
+  DENC_HELPERS
+  void bound_encode(size_t& p) const {
+    _denc_friend(*this, p);
+  }
+  void encode(bufferlist::contiguous_appender& p) const {
+    DENC_DUMP_PRE(bluefs_fnode_t);
+    _denc_friend(*this, p);
+    DENC_DUMP_POST(bluefs_fnode_t);
+  }
+  void decode(buffer::ptr::iterator& p) {
+    _denc_friend(*this, p);
+    recalc_allocated();
+  }
+  template<typename T, typename P>
+  friend std::enable_if_t<std::is_same_v<bluefs_fnode_t, std::remove_const_t<T>>>
+  _denc_friend(T& v, P& p) {
     DENC_START(1, 1, p);
     denc_varint(v.ino, p);
     denc_varint(v.size, p);