summaryrefslogtreecommitdiffstats
path: root/module/zfs/dmu_objset.c
diff options
context:
space:
mode:
authorTom Caputi <[email protected]>2018-02-01 15:37:24 -0500
committerBrian Behlendorf <[email protected]>2018-02-02 11:44:53 -0800
commit1b66810bad0a893031c6d49613aa83dc359bf034 (patch)
treeb79f06387969bd389aa8c8053ebf98562f0e2889 /module/zfs/dmu_objset.c
parent047116ac76526d869e3f347afb5d81cc2b156fdf (diff)
Change os->os_next_write_raw to work per txg
Currently, os_next_write_raw is a single boolean used for determining whether or not the next call to dmu_objset_sync() should write out the objset_phys_t as a raw buffer. Since the boolean is not associated with a txg, the work simply happens during the next txg, which is not necessarily the correct one. In the current implementation this issue was misdiagnosed, resulting in a small hack in dmu_objset_sync() which seemed to resolve the problem. This patch changes os_next_write_raw to be an array of booleans, one for each txg in TXG_OFF and removes the hack. Reviewed-by: Jorgen Lundman <[email protected]> Reviewed-by: Brian Behlendorf <[email protected]> Reviewed by: Matthew Ahrens <[email protected]> Signed-off-by: Tom Caputi <[email protected]> Closes #6864
Diffstat (limited to 'module/zfs/dmu_objset.c')
-rw-r--r--module/zfs/dmu_objset.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/module/zfs/dmu_objset.c b/module/zfs/dmu_objset.c
index 2b069b6ce..befce9be6 100644
--- a/module/zfs/dmu_objset.c
+++ b/module/zfs/dmu_objset.c
@@ -1508,9 +1508,9 @@ dmu_objset_sync(objset_t *os, zio_t *pio, dmu_tx_t *tx)
* the os_phys_buf raw. Neither of these actions will effect the MAC
* at this point.
*/
- if (arc_is_unauthenticated(os->os_phys_buf) || os->os_next_write_raw) {
+ if (os->os_next_write_raw[tx->tx_txg & TXG_MASK]) {
ASSERT(os->os_encrypted);
- os->os_next_write_raw = B_FALSE;
+ os->os_next_write_raw[tx->tx_txg & TXG_MASK] = B_FALSE;
arc_convert_to_raw(os->os_phys_buf,
os->os_dsl_dataset->ds_object, ZFS_HOST_BYTEORDER,
DMU_OT_OBJSET, NULL, NULL, NULL);