From 5ab57dfee6372378a5378b6fa9874515d01eb3d6 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Fri, 21 Oct 2016 15:42:19 -0400 Subject: [PATCH] os/bluestore: clear extent map on object removal Clear ExtentMap (esp shards, etc.) when an object is removed. Otherwise if we recreate it we will have stale state (like the shards vector or inline_bl) that are bogus. Signed-off-by: Sage Weil --- src/os/bluestore/BlueStore.cc | 1 + src/os/bluestore/BlueStore.h | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index e1fd1f8b3211..8cb34e6ebf6e 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -8122,6 +8122,7 @@ int BlueStore::_do_remove( txc->t->rmkey(PREFIX_OBJ, s.key); } txc->t->rmkey(PREFIX_OBJ, o->key); + o->extent_map.clear(); _debug_obj_on_delete(o->oid); return 0; } diff --git a/src/os/bluestore/BlueStore.h b/src/os/bluestore/BlueStore.h index 39ddef7a7124..fc2f6900d41f 100644 --- a/src/os/bluestore/BlueStore.h +++ b/src/os/bluestore/BlueStore.h @@ -604,6 +604,14 @@ public: extent_map.clear_and_dispose([&](Extent *e) { delete e; }); } + void clear() { + extent_map.clear(); + extent_map.clear_and_dispose([&](Extent *e) { delete e; }); + shards.clear(); + inline_bl.clear(); + needs_reshard = false; + } + bool encode_some(uint32_t offset, uint32_t length, bufferlist& bl, unsigned *pn); void decode_some(bufferlist& bl); -- 2.47.3