From: xie xingguo Date: Sat, 3 Sep 2016 09:51:19 +0000 (+0800) Subject: os/bluestore: use global compressor if possible X-Git-Tag: v11.0.1~322^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F10970%2Fhead;p=ceph.git os/bluestore: use global compressor if possible Signed-off-by: xie xingguo --- diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index 565bf0b0a032..90bb7650c3f9 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;