]> granicus.if.org Git - zfs/commit
Raw receives must compress metadnode blocks
authorTom Caputi <tcaputi@datto.com>
Wed, 21 Feb 2018 20:28:52 +0000 (15:28 -0500)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Wed, 21 Feb 2018 20:28:52 +0000 (12:28 -0800)
commitb1d217338a51b025b802ebf6a759f45dcd8e3b4c
treed9b8be3fa8ee4123d343a97286834fcb15433d4f
parent5121c4fb0c25a369d2e6f61e5b0a79969f0b75b5
Raw receives must compress metadnode blocks

Currently, the DMU relies on ZIO layer compression to free LO
dnode blocks that no longer have objects in them. However,
raw receives disable all compression, meaning that these blocks
can never be freed. In addition to the obvious space concerns,
this could also cause incremental raw receives to fail to mount
since the MAC of a hole is different from that of a completely
zeroed block.

This patch corrects this issue by adding a special case in
zio_write_compress() which will attempt to compress these blocks
to a hole even if ZIO_FLAG_RAW_ENCRYPT is set. This patch also
removes the zfs_mdcomp_disable tunable, since tuning it could
cause these same issues.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Tom Caputi <tcaputi@datto.com>
Closes #7198
include/sys/dmu.h
man/man5/zfs-module-parameters.5
module/zfs/arc.c
module/zfs/dbuf.c
module/zfs/dmu.c
module/zfs/zio.c
tests/zfs-tests/tests/functional/rsend/send_encrypted_files.ksh