HomeFreeBSD

Always wait for txg sync when umounting dataset

Description

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

Details

Provenance
Tom Caputi <tcaputi@datto.com>Authored on Aug 20 2018, 8:42 PM
Brian Behlendorf <behlendorf1@llnl.gov>Committed on Aug 27 2018, 5:16 PM
Parents
rG8c4fb36a24d4: Small rework of txg_list code
Branches
Unknown
Tags
Unknown

Event Timeline

Brian Behlendorf <behlendorf1@llnl.gov> committed rG47ab01a18f55: Always wait for txg sync when umounting dataset (authored by Tom Caputi <tcaputi@datto.com>).Aug 27 2018, 5:16 PM