From f6bea31b79ff6329acd47a0ad25afc443e05c961 Mon Sep 17 00:00:00 2001 From: xie xingguo Date: Sat, 3 Sep 2016 17:51:19 +0800 Subject: [PATCH] os/bluestore: use global compressor if possible Signed-off-by: xie xingguo --- src/os/bluestore/BlueStore.cc | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index 565bf0b0a0325..90bb7650c3f97 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -3998,14 +3998,17 @@ int BlueStore::_decompress(bufferlist& source, bufferlist* result) bluestore_compression_header_t chdr; ::decode(chdr, i); string name = bluestore_blob_t::get_comp_alg_name(chdr.type); - CompressorRef compressor = Compressor::create(cct, name); - if (!compressor.get()) { + CompressorRef cp = compressor; + if (!cp || cp->get_type() != name) + cp = Compressor::create(cct, name); + + if (!cp.get()) { // if compressor isn't available - error, because cannot return // decompressed data? derr << __func__ << " can't load decompressor " << chdr.type << dendl; r = -EIO; } else { - r = compressor->decompress(i, chdr.length, *result); + r = cp->decompress(i, chdr.length, *result); if (r < 0) { derr << __func__ << " decompression failed with exit code " << r << dendl; r = -EIO; -- 2.39.5