diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/sys/dmu_recv.h | 2 | ||||
-rw-r--r-- | include/sys/dsl_crypt.h | 5 | ||||
-rw-r--r-- | include/sys/dsl_dataset.h | 6 | ||||
-rw-r--r-- | include/sys/fs/zfs.h | 4 |
4 files changed, 15 insertions, 2 deletions
diff --git a/include/sys/dmu_recv.h b/include/sys/dmu_recv.h index 4a0d47711..90002026b 100644 --- a/include/sys/dmu_recv.h +++ b/include/sys/dmu_recv.h @@ -51,7 +51,9 @@ typedef struct dmu_recv_cookie { struct avl_tree *drc_guid_to_ds_map; nvlist_t *drc_keynvl; zio_cksum_t drc_cksum; + uint64_t drc_fromsnapobj; uint64_t drc_newsnapobj; + uint64_t drc_ivset_guid; void *drc_owner; cred_t *drc_cred; } dmu_recv_cookie_t; diff --git a/include/sys/dsl_crypt.h b/include/sys/dsl_crypt.h index e01d53527..c2c0a548a 100644 --- a/include/sys/dsl_crypt.h +++ b/include/sys/dsl_crypt.h @@ -189,12 +189,13 @@ void key_mapping_rele(spa_t *spa, dsl_key_mapping_t *km, void *tag); int spa_keystore_lookup_key(spa_t *spa, uint64_t dsobj, void *tag, dsl_crypto_key_t **dck_out); -int dsl_crypto_populate_key_nvlist(struct dsl_dataset *ds, nvlist_t **nvl_out); +int dsl_crypto_populate_key_nvlist(struct dsl_dataset *ds, + uint64_t from_ivset_guid, nvlist_t **nvl_out); int dsl_crypto_recv_raw_key_check(struct dsl_dataset *ds, nvlist_t *nvl, dmu_tx_t *tx); void dsl_crypto_recv_raw_key_sync(struct dsl_dataset *ds, nvlist_t *nvl, dmu_tx_t *tx); -int dsl_crypto_recv_raw(const char *poolname, uint64_t dsobj, +int dsl_crypto_recv_raw(const char *poolname, uint64_t dsobj, uint64_t fromobj, dmu_objset_type_t ostype, nvlist_t *nvl, boolean_t do_key); int spa_keystore_change_key(const char *dsname, dsl_crypto_params_t *dcp); diff --git a/include/sys/dsl_dataset.h b/include/sys/dsl_dataset.h index 47a46f07d..c464c70bd 100644 --- a/include/sys/dsl_dataset.h +++ b/include/sys/dsl_dataset.h @@ -115,6 +115,12 @@ struct dsl_key_mapping; #define DS_FIELD_REMAP_DEADLIST "com.delphix:remap_deadlist" /* + * This field is set to the ivset guid for encrypted snapshots. This is used + * for validating raw receives. + */ +#define DS_FIELD_IVSET_GUID "com.datto:ivset_guid" + +/* * DS_FLAG_CI_DATASET is set if the dataset contains a file system whose * name lookups should be performed case-insensitively. */ diff --git a/include/sys/fs/zfs.h b/include/sys/fs/zfs.h index c4d26eb87..d25e8b5a5 100644 --- a/include/sys/fs/zfs.h +++ b/include/sys/fs/zfs.h @@ -183,6 +183,7 @@ typedef enum { ZFS_PROP_KEYSTATUS, ZFS_PROP_REMAPTXG, /* not exposed to the user */ ZFS_PROP_SPECIAL_SMALL_BLOCKS, + ZFS_PROP_IVSET_GUID, /* not exposed to the user */ ZFS_NUM_PROPS } zfs_prop_t; @@ -975,6 +976,7 @@ typedef enum zpool_errata { ZPOOL_ERRATA_ZOL_2094_SCRUB, ZPOOL_ERRATA_ZOL_2094_ASYNC_DESTROY, ZPOOL_ERRATA_ZOL_6845_ENCRYPTION, + ZPOOL_ERRATA_ZOL_8308_ENCRYPTION, } zpool_errata_t; /* @@ -1264,6 +1266,8 @@ typedef enum { ZFS_ERR_IOC_ARG_REQUIRED, ZFS_ERR_IOC_ARG_BADTYPE, ZFS_ERR_WRONG_PARENT, + ZFS_ERR_FROM_IVSET_GUID_MISSING, + ZFS_ERR_FROM_IVSET_GUID_MISMATCH, } zfs_errno_t; /* |