summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTom Caputi <[email protected]>2017-12-04 14:10:31 -0500
committerBrian Behlendorf <[email protected]>2018-02-02 11:39:36 -0800
commitd53bd7f5244a1cd0009d2f90d3ec9df22352fbb3 (patch)
tree472894a60cddd8ea9de2d87533097cc832911905
parentae76f45cda0e0857f99e53959cf71c7a5d66bd8b (diff)
Fix recovery import (-F) with encrypted pool
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. 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 Closes #6916
-rw-r--r--module/zfs/zil.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/module/zfs/zil.c b/module/zfs/zil.c
index 73744ffcf..234ce956a 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);
}