From: Sage Weil Date: Thu, 19 May 2016 16:00:08 +0000 (-0400) Subject: os/bluestore: release partial extents X-Git-Tag: v11.0.0~359^2~51 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=a806af54b8671e770a62a5ca17382fc3e76aaef1;p=ceph.git os/bluestore: release partial extents Use the blob put_ref helper so that we can deallocate blobs partially (instead of always waiting until they are completely unused). Signed-off-by: Sage Weil --- diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index 1fe1970e462f..d7b673e8ab39 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -5656,13 +5656,14 @@ void BlueStore::_wctx_finish( dout(10) << __func__ << " lex_old " << wctx->lex_old << dendl; for (auto &l : wctx->lex_old) { bluestore_blob_t *b = c->get_blob_ptr(o, l.blob); - // fixme: handle partial deallocation - b->ref_map.put(l.offset, l.length, NULL); + vector r; + b->put_ref(l.offset, l.length, min_alloc_size, &r); + for (auto e : r) { + dout(20) << __func__ << " release " << e << dendl; + txc->released.insert(e.offset, e.length); + } if (b->ref_map.empty()) { dout(20) << __func__ << " rm blob " << *b << dendl; - for (auto p : b->extents) { - txc->released.insert(p.offset, p.length); - } if (l.blob >= 0) { o->onode.blob_map.erase(l.blob); } else {