]> git.proxmox.com Git - mirror_zfs.git/commit
Always wait for txg sync when umounting dataset
authorTom Caputi <tcaputi@datto.com>
Mon, 20 Aug 2018 20:42:17 +0000 (16:42 -0400)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Mon, 27 Aug 2018 17:16:28 +0000 (10:16 -0700)
commit47ab01a18f55f89be7b3f340b6ec9101bf9e231c
treed76615b0403fdd1ba8439b1d57c2e76a0ff8639b
parent8c4fb36a24d4fd88382e454b13751a5adfea0806
Always wait for txg sync when umounting dataset

Currently, when unmounting a filesystem, ZFS will only wait for
a txg sync if the dataset is dirty and not readonly. However, this
can be problematic in cases where a dataset is remounted readonly
immediately before being unmounted, which often happens when the
system is being shut down. Since encrypted datasets require that
all I/O is completed before the dataset is disowned, this issue
causes problems when write I/Os leak into the txgs after the
dataset is disowned, which can happen when sync=disabled.

While looking into fixes for this issue, it was discovered that
dsl_dataset_is_dirty() does not return B_TRUE when the dataset has
been removed from the txg dirty datasets list, but has not actually
been processed yet. Furthermore, the implementation is comletely
different from dmu_objset_is_dirty(), adding to the confusion.
Rather than relying on this function, this patch forces the umount
code path (and the remount readonly code path) to always perform a
txg sync on read-write datasets and removes the function altogether.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Tom Caputi <tcaputi@datto.com>
Closes #7753
Closes #7795
include/sys/dsl_dataset.h
module/zfs/dsl_dataset.c
module/zfs/zfs_vfsops.c
module/zfs/zvol.c
tests/zfs-tests/tests/functional/cli_root/zfs_mount/zfs_mount_remount.ksh