Go to file
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
.github Correct cppcheck errors (#6662) 2017-09-20 12:59:21 -07:00
cmd arcstat: flush stdout / outfile after each line 2017-11-20 16:19:23 -06:00
config Support integration with new QAT products 2017-11-20 16:19:23 -06:00
contrib Initramfs fixes 2017-11-20 16:23:33 -06:00
etc systemd zfs-import.target and documentation 2017-11-20 16:20:08 -06:00
include Typo in dsl_dataset.h 2017-10-17 16:49:03 -07:00
lib Fix function documentation to correctly mirror code 2017-10-17 16:49:14 -07:00
man systemd zfs-import.target and documentation 2017-11-20 16:20:08 -06:00
module Handle compressed buffers in __dbuf_hold_impl() 2017-11-21 13:01:30 -06:00
rpm Fix undefined %{systemd_svcs} in RPM scriptlets 2017-11-20 16:48:26 -06:00
scripts Increase default zloop.sh vdev size 2017-10-17 16:49:08 -07:00
tests Correct flake8 errors after STYLE builder update 2017-11-20 16:19:23 -06:00
udev Fix spelling 2017-01-03 11:31:18 -06:00
.gitignore Improve gitignore 2017-05-25 10:14:13 -07:00
.gitmodules Add zimport.sh compatibility test script 2014-02-21 12:10:31 -08:00
AUTHORS Add a missing > to AUTHORS 2014-09-02 14:18:53 -07:00
autogen.sh build: do not call boilerplate ourself 2013-04-02 10:55:20 -07:00
configure.ac Add zgenhostid utility script 2017-07-25 13:22:03 -04:00
copy-builtin Allow c99 when building ZFS in the kernel tree 2017-03-27 12:31:15 -07:00
COPYRIGHT Update ZED copyright boilerplate 2015-05-11 15:07:00 -07:00
DISCLAIMER Fix minor typos and update marketing copy. 2013-03-21 12:51:06 -07:00
Makefile.am Add DKMS package on Debian-based distributions 2017-10-17 16:49:19 -07:00
META Tag zfs-0.7.3 2017-10-18 11:00:26 -07:00
OPENSOLARIS.LICENSE Add CDDL license file 2008-12-01 14:49:34 -08:00
README.markdown Add CONTRIBUTING information and templates 2016-12-09 12:48:12 -07:00
TEST Retire filebench testing 2017-06-01 06:24:28 -07:00
zfs-script-config.sh.in zpool iostat/status -c improvements 2017-06-05 10:52:15 -07:00
zfs.release.in Move zfs.release generation to configure step 2012-07-12 12:22:51 -07:00

ZFS is an advanced file system and volume manager which was originally developed for Solaris and is now maintained by the Illumos community.

ZFS on Linux, which is also known as ZoL, is currently feature complete. It includes fully functional and stable SPA, DMU, ZVOL, and ZPL layers. And it's native!

Official Resources

Installation

Full documentation for installing ZoL on your favorite Linux distribution can be found at our site.

Contribute & Develop

We have a separate document with contribution guidelines.