From: Sage Weil Date: Fri, 21 Oct 2016 19:42:19 +0000 (-0400) Subject: os/bluestore: clear extent map on object removal X-Git-Tag: v11.1.0~546^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=5ab57dfee6372378a5378b6fa9874515d01eb3d6;p=ceph.git 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 --- diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index e1fd1f8b321..8cb34e6ebf6 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 39ddef7a712..fc2f6900d41 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);