From 7ff6d03b09e20f58ab392ce85110b11ba357d7b5 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); }