From: Igor Fedotov Date: Tue, 28 Jun 2016 12:49:29 +0000 (+0300) Subject: os/bluestore: extend bluestore_blob_t interface to be able to use external ref_map... X-Git-Tag: ses5-milestone5~268^2~5 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=0bf09760a2340fcc84ddaca0ae1924ef3a8433dc;p=ceph.git os/bluestore: extend bluestore_blob_t interface to be able to use external ref_map for recerence counting Signed-off-by: Igor Fedotov --- diff --git a/src/os/bluestore/bluestore_types.cc b/src/os/bluestore/bluestore_types.cc index 48ff4ec06bbe..33de6d98dffa 100644 --- a/src/os/bluestore/bluestore_types.cc +++ b/src/os/bluestore/bluestore_types.cc @@ -556,13 +556,29 @@ void bluestore_blob_t::get_ref( ref_map.get(offset, length); } -void bluestore_blob_t::put_ref( +bool bluestore_blob_t::put_ref( uint64_t offset, uint64_t length, uint64_t min_release_size, vector *r) { assert(has_refmap()); + return put_ref_external( + ref_map, + offset, + length, + min_release_size, + r); +} + + +bool bluestore_blob_t::put_ref_external( + bluestore_extent_ref_map_t& ref_map, + uint64_t offset, + uint64_t length, + uint64_t min_release_size, + vector *r) +{ vector logical; ref_map.put(offset, length, &logical); @@ -580,12 +596,12 @@ void bluestore_blob_t::put_ref( extents.resize(1); extents[0].offset = bluestore_pextent_t::INVALID_OFFSET; extents[0].length = pos; - return; + return true; } // we cannot do partial deallocation on compressed blobs if (has_flag(FLAG_COMPRESSED)) { - return; + return false; } // we cannot release something smaller than our csum chunk size @@ -675,6 +691,7 @@ void bluestore_blob_t::put_ref( vb.flush(); extents.swap(vb.v); } + return false; } void bluestore_blob_t::calc_csum(uint64_t b_off, const bufferlist& bl) diff --git a/src/os/bluestore/bluestore_types.h b/src/os/bluestore/bluestore_types.h index f2e2ed70eb17..0948e937650f 100644 --- a/src/os/bluestore/bluestore_types.h +++ b/src/os/bluestore/bluestore_types.h @@ -389,8 +389,12 @@ struct bluestore_blob_t { /// get logical references void get_ref(uint64_t offset, uint64_t length); /// put logical references, and get back any released extents - void put_ref(uint64_t offset, uint64_t length, uint64_t min_alloc_size, - vector *r); + bool put_ref(uint64_t offset, uint64_t length, uint64_t min_alloc_size, + vector *r); + /// put logical references using external ref_map, and get back any released extents + bool put_ref_external( bluestore_extent_ref_map_t& ref_map, + uint64_t offset, uint64_t length, uint64_t min_alloc_size, + vector *r); void map(uint64_t x_off, uint64_t x_len, std::function f) const {