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 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);