aboutsummaryrefslogtreecommitdiffstats
path: root/module
diff options
context:
space:
mode:
authorAlexander Motin <[email protected]>2023-12-01 18:23:20 -0500
committerBrian Behlendorf <[email protected]>2024-01-08 16:11:39 -0800
commit3b8f2273622318461836dc27fa65e50126caff78 (patch)
tree25158375f85b18b47c30bfc5a43d99fb23a16318 /module
parente48195c816edbea0efeb41436811af353ae26a35 (diff)
ZIL: Remove TX_CLONE_RANGE replay for ZVOLs.
zil_claim_clone_range() takes references on cloned blocks before ZIL replay. Later zil_free_clone_range() drops them after replay or on dataset destroy. The total balance is neutral. It means we do not need to do anything (drop the references) for not implemented yet TX_CLONE_RANGE replay for ZVOLs. This is a logical follow up to #15603. Reviewed-by: Kay Pedersen <[email protected]> Reviewed-by: Brian Behlendorf <[email protected]> Signed-off-by: Alexander Motin <[email protected]> Sponsored by: iXsystems, Inc. Closes #15612
Diffstat (limited to 'module')
-rw-r--r--module/zfs/zvol.c60
1 files changed, 1 insertions, 59 deletions
diff --git a/module/zfs/zvol.c b/module/zfs/zvol.c
index 91b2d9fcb..20ea71f23 100644
--- a/module/zfs/zvol.c
+++ b/module/zfs/zvol.c
@@ -486,64 +486,6 @@ zvol_replay_write(void *arg1, void *arg2, boolean_t byteswap)
return (error);
}
-/*
- * Replay a TX_CLONE_RANGE ZIL transaction that didn't get committed
- * after a system failure.
- *
- * TODO: For now we drop block cloning transations for ZVOLs as they are
- * unsupported, but we still need to inform BRT about that as we
- * claimed them during pool import.
- * This situation can occur when we try to import a pool from a ZFS
- * version supporting block cloning for ZVOLs into a system that
- * has this ZFS version, that doesn't support block cloning for ZVOLs.
- */
-static int
-zvol_replay_clone_range(void *arg1, void *arg2, boolean_t byteswap)
-{
- char name[ZFS_MAX_DATASET_NAME_LEN];
- zvol_state_t *zv = arg1;
- objset_t *os = zv->zv_objset;
- lr_clone_range_t *lr = arg2;
- blkptr_t *bp;
- dmu_tx_t *tx;
- spa_t *spa;
- uint_t ii;
- int error;
-
- ASSERT3U(lr->lr_common.lrc_reclen, >=, sizeof (*lr));
- ASSERT3U(lr->lr_common.lrc_reclen, >=, offsetof(lr_clone_range_t,
- lr_bps[lr->lr_nbps]));
-
- dmu_objset_name(os, name);
- cmn_err(CE_WARN, "ZFS dropping block cloning transaction for %s.",
- name);
-
- if (byteswap)
- byteswap_uint64_array(lr, sizeof (*lr));
-
- tx = dmu_tx_create(os);
- error = dmu_tx_assign(tx, TXG_WAIT);
- if (error) {
- dmu_tx_abort(tx);
- return (error);
- }
-
- spa = os->os_spa;
-
- for (ii = 0; ii < lr->lr_nbps; ii++) {
- bp = &lr->lr_bps[ii];
-
- if (!BP_IS_HOLE(bp)) {
- zio_free(spa, dmu_tx_get_txg(tx), bp);
- }
- }
-
- (void) zil_replaying(zv->zv_zilog, tx);
- dmu_tx_commit(tx);
-
- return (0);
-}
-
static int
zvol_replay_err(void *arg1, void *arg2, boolean_t byteswap)
{
@@ -578,7 +520,7 @@ zil_replay_func_t *const zvol_replay_vector[TX_MAX_TYPE] = {
zvol_replay_err, /* TX_SETSAXATTR */
zvol_replay_err, /* TX_RENAME_EXCHANGE */
zvol_replay_err, /* TX_RENAME_WHITEOUT */
- zvol_replay_clone_range /* TX_CLONE_RANGE */
+ zvol_replay_err, /* TX_CLONE_RANGE */
};
/*