From be6b52cd2763b150781a7e9b87659b5445ec2398 Mon Sep 17 00:00:00 2001 From: Tom Caputi Date: Tue, 9 Jan 2018 14:55:15 +0900 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 --- usr/src/uts/common/fs/zfs/zil.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/usr/src/uts/common/fs/zfs/zil.c b/usr/src/uts/common/fs/zfs/zil.c index e783af66d66c..ee0c32670f23 100644 --- a/usr/src/uts/common/fs/zfs/zil.c +++ b/usr/src/uts/common/fs/zfs/zil.c @@ -794,6 +794,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); }