Files
mirror_zfs/module/zfs
Tim Chase d7881a6dca Handle compressed buffers in __dbuf_hold_impl()
In __dbuf_hold_impl(), if a buffer is currently syncing and is still
referenced from db_data, a copy is made in case it is dirtied again in
the txg.  Previously, the buffer for the copy was simply allocated with
arc_alloc_buf() which doesn't handle compressed or encrypted buffers
(which are a special case of a compressed buffer).  The result was
typically an invalid memory access because the newly-allocated buffer
was of the uncompressed size.

This commit fixes the problem by handling the 2 compressed cases,
encrypted and unencrypted, respectively, with arc_alloc_raw_buf() and
arc_alloc_compressed_buf().

Although using the proper allocation functions fixes the invalid memory
access by allocating a buffer of the compressed size, another unrelated
issue made it impossible to properly detect compressed buffers in the
first place.  The header's compression flag was set to ZIO_COMPRESS_OFF
in arc_write() when it was possible that an attached buffer was actually
compressed.  This commit adds logic to only set ZIO_COMPRESS_OFF in
the non-ZIO_RAW case which wil handle both cases of compressed buffers
(encrypted or unencrypted).

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Tim Chase <tim@chase2k.com>
Closes #5742
Closes #6797
2017-11-21 13:01:30 -06:00
..
2017-05-02 10:06:18 -07:00
2015-01-16 14:41:26 -08:00
2017-05-26 11:42:10 -07:00
2017-06-26 14:36:49 -07:00
2015-01-16 14:41:26 -08:00
2016-11-02 12:14:45 -07:00
2017-09-20 10:25:54 -07:00
2017-08-21 16:46:54 -07:00
2017-07-13 13:54:00 -04:00
2016-12-12 10:46:26 -08:00
2015-01-16 14:41:26 -08:00
2017-07-13 13:54:00 -04:00
2016-04-21 09:49:25 -07:00
2017-01-03 11:31:18 -06:00
2010-08-31 13:41:58 -07:00
2017-07-13 13:54:00 -04:00
2017-07-13 13:54:00 -04:00
2017-07-13 13:54:00 -04:00
2017-07-25 13:22:28 -04:00
2017-07-13 13:54:00 -04:00
2017-06-27 10:09:16 -07:00
2016-11-29 14:34:33 -08:00
2017-08-08 10:17:33 -07:00
2017-05-04 19:26:28 -04:00
2017-03-10 09:51:33 -08:00
2010-08-31 13:41:58 -07:00
2017-03-10 09:51:33 -08:00
2017-03-10 09:51:33 -08:00
2017-03-10 09:51:33 -08:00
2017-01-03 11:31:18 -06:00
2017-10-16 10:57:55 -07:00
2017-08-08 10:17:33 -07:00
2017-03-29 12:24:51 -07:00
2017-03-10 09:51:33 -08:00
2017-03-10 09:51:41 -08:00
2017-01-23 10:35:58 -08:00