diff options
Diffstat (limited to 'sys/contrib/openzfs/module/zfs/zio_compress.c')
-rw-r--r-- | sys/contrib/openzfs/module/zfs/zio_compress.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/sys/contrib/openzfs/module/zfs/zio_compress.c b/sys/contrib/openzfs/module/zfs/zio_compress.c index 717395dcf456..c8a10db7483b 100644 --- a/sys/contrib/openzfs/module/zfs/zio_compress.c +++ b/sys/contrib/openzfs/module/zfs/zio_compress.c @@ -6,7 +6,7 @@ * You may not use this file except in compliance with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. + * or https://opensource.org/licenses/CDDL-1.0. * See the License for the specific language governing permissions * and limitations under the License. * @@ -44,12 +44,12 @@ * If nonzero, every 1/X decompression attempts will fail, simulating * an undetected memory error. */ -unsigned long zio_decompress_fail_fraction = 0; +static unsigned long zio_decompress_fail_fraction = 0; /* * Compression vectors. */ -const zio_compress_info_t zio_compress_table[ZIO_COMPRESS_FUNCTIONS] = { +zio_compress_info_t zio_compress_table[ZIO_COMPRESS_FUNCTIONS] = { {"inherit", 0, NULL, NULL, NULL}, {"on", 0, NULL, NULL, NULL}, {"uncompressed", 0, NULL, NULL, NULL}, @@ -125,7 +125,7 @@ zio_compress_zeroed_cb(void *data, size_t len, void *private) } size_t -zio_compress_data(enum zio_compress c, abd_t *src, void *dst, size_t s_len, +zio_compress_data(enum zio_compress c, abd_t *src, void **dst, size_t s_len, uint8_t level) { size_t c_len, d_len; @@ -163,9 +163,12 @@ zio_compress_data(enum zio_compress c, abd_t *src, void *dst, size_t s_len, ASSERT3U(complevel, !=, ZIO_COMPLEVEL_INHERIT); } + if (*dst == NULL) + *dst = zio_buf_alloc(s_len); + /* No compression algorithms can read from ABDs directly */ void *tmp = abd_borrow_buf_copy(src, s_len); - c_len = ci->ci_compress(tmp, dst, s_len, d_len, complevel); + c_len = ci->ci_compress(tmp, *dst, s_len, d_len, complevel); abd_return_buf(src, tmp, s_len); if (c_len > d_len) |