From a5768193d2fbee16f5ba3327d5a320761602306e Mon Sep 17 00:00:00 2001 From: Tom Caputi Date: Mon, 4 Dec 2017 14:10:31 -0500 Subject: [PATCH] Fix for #6916 When performing zil_claim() at pool import time, it is important that encrypted datasets set os_next_write_raw before writing to the zil_header_t. This prevents the code from attempting to re-authenticate the objset_phys_t when it writes it out, which is unnecessary because the zil_header_t is not protected by either objset MAC and impossible since the keys aren't loaded yet. Unfortunately, one of the code paths did not set this flag, which causes failed ASSERTs during 'zpool import -F'. This patch corrects this issue. Signed-off-by: Tom Caputi --- module/zfs/zil.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/module/zfs/zil.c b/module/zfs/zil.c index 81bc6de412e0..4e0f308957dc 100644 --- a/module/zfs/zil.c +++ b/module/zfs/zil.c @@ -819,6 +819,8 @@ zil_claim(dsl_pool_t *dp, dsl_dataset_t *ds, void *txarg) if (zilog->zl_parse_lr_count || zilog->zl_parse_blk_count > 1) zh->zh_flags |= ZIL_REPLAY_NEEDED; zh->zh_flags |= ZIL_CLAIM_LR_SEQ_VALID; + if (os->os_encrypted) + os->os_next_write_raw = B_TRUE; dsl_dataset_dirty(dmu_objset_ds(os), tx); }