From c7c4e275cd9a2d7b8d6a28acc92ae0a82bb47e09 Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Mon, 5 Mar 2018 11:32:48 +0800 Subject: [PATCH] os/bluestore: recalc_allocated() when decoding bluefs_fnode_t Fixes: http://tracker.ceph.com/issues/23212 Signed-off-by: Jianpeng Ma Signed-off-by: Kefu Chai (cherry picked from commit 25514e0bbd2d21a0f78ac46bfa857db245952cec) Conflicts: src/os/bluestore/bluefs_types.h: replace C++17 stuff with C++11 counterparts. --- src/os/bluestore/BlueFS.cc | 1 - src/os/bluestore/bluefs_types.h | 19 ++++++++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/os/bluestore/BlueFS.cc b/src/os/bluestore/BlueFS.cc index d2255b407869..bd7bcd69abfa 100644 --- a/src/os/bluestore/BlueFS.cc +++ b/src/os/bluestore/BlueFS.cc @@ -780,7 +780,6 @@ int BlueFS::_replay(bool noop) { 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 (!noop) { diff --git a/src/os/bluestore/bluefs_types.h b/src/os/bluestore/bluefs_types.h index 0cb075f52603..b5bf775cb7b3 100644 --- a/src/os/bluestore/bluefs_types.h +++ b/src/os/bluestore/bluefs_types.h @@ -51,7 +51,24 @@ 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 + friend typename std::enable_if< + boost::is_same::value || + boost::is_same::value>::type + _denc_friend(T& v, P& p) { DENC_START(1, 1, p); denc_varint(v.ino, p); denc_varint(v.size, p); -- 2.47.3