diff options
author | Brian Behlendorf <[email protected]> | 2021-05-13 10:00:17 -0700 |
---|---|---|
committer | GitHub <[email protected]> | 2021-05-13 10:00:17 -0700 |
commit | 6217656da33c0920cb9f213742fd51dd215bc455 (patch) | |
tree | de19bdc11d08ebfbff6b1ed50dd6ba59d727b09c /module/zfs | |
parent | 618a65cd7a77b0b5a27ccdd3e0ff4f80cd14404f (diff) |
Revert "Fix raw sends on encrypted datasets when copying back snapshots"
Commit d1d4769 takes into account the encryption key version to
decide if the local_mac could be zeroed out. However, this could lead
to failure mounting encrypted datasets created with intermediate
versions of ZFS encryption available in master between major releases.
In order to prevent this situation revert d1d4769 pending a more
comprehensive fix which addresses the mount failure case.
Reviewed-by: George Amanakis <[email protected]>
Signed-off-by: Brian Behlendorf <[email protected]>
Issue #11294
Issue #12025
Issue #12300
Closes #12033
Diffstat (limited to 'module/zfs')
-rw-r--r-- | module/zfs/dsl_crypt.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/module/zfs/dsl_crypt.c b/module/zfs/dsl_crypt.c index e38ec0cae..26d4c2fe7 100644 --- a/module/zfs/dsl_crypt.c +++ b/module/zfs/dsl_crypt.c @@ -2007,6 +2007,14 @@ dsl_crypto_recv_raw_objset_check(dsl_dataset_t *ds, dsl_dataset_t *fromds, if (ret != 0) return (ret); + /* + * Useraccounting is not portable and must be done with the keys loaded. + * Therefore, whenever we do any kind of receive the useraccounting + * must not be present. + */ + ASSERT0(os->os_flags & OBJSET_FLAG_USERACCOUNTING_COMPLETE); + ASSERT0(os->os_flags & OBJSET_FLAG_USEROBJACCOUNTING_COMPLETE); + mdn = DMU_META_DNODE(os); /* @@ -2097,9 +2105,6 @@ dsl_crypto_recv_raw_objset_sync(dsl_dataset_t *ds, dmu_objset_type_t ostype, */ arc_release(os->os_phys_buf, &os->os_phys_buf); bcopy(portable_mac, os->os_phys->os_portable_mac, ZIO_OBJSET_MAC_LEN); - os->os_phys->os_flags &= ~OBJSET_FLAG_USERACCOUNTING_COMPLETE; - os->os_phys->os_flags &= ~OBJSET_FLAG_USEROBJACCOUNTING_COMPLETE; - os->os_flags = os->os_phys->os_flags; bzero(os->os_phys->os_local_mac, ZIO_OBJSET_MAC_LEN); os->os_next_write_raw[tx->tx_txg & TXG_MASK] = B_TRUE; |