diff --git a/module/os/freebsd/zfs/zfs_dir.c b/module/os/freebsd/zfs/zfs_dir.c index 184c0a55ff..df0503e5b4 100644 --- a/module/os/freebsd/zfs/zfs_dir.c +++ b/module/os/freebsd/zfs/zfs_dir.c @@ -827,7 +827,7 @@ zfs_make_xattrdir(znode_t *zp, vattr_t *vap, znode_t **xvpp, cred_t *cr) fuid_dirtied = zfsvfs->z_fuid_dirty; if (fuid_dirtied) zfs_fuid_txhold(zfsvfs, tx); - error = dmu_tx_assign(tx, DMU_TX_ASSIGN_WAIT); + error = dmu_tx_assign(tx, DMU_TX_ASSIGN_WAIT | DMU_TX_ASSIGN_CONTINUE); if (error) { zfs_acl_ids_free(&acl_ids); dmu_tx_abort(tx); diff --git a/module/os/freebsd/zfs/zfs_vnops_os.c b/module/os/freebsd/zfs/zfs_vnops_os.c index 8d578515e1..784223e2e1 100644 --- a/module/os/freebsd/zfs/zfs_vnops_os.c +++ b/module/os/freebsd/zfs/zfs_vnops_os.c @@ -1164,7 +1164,7 @@ zfs_create(znode_t *dzp, const char *name, vattr_t *vap, int excl, int mode, dmu_tx_hold_write(tx, DMU_NEW_OBJECT, 0, acl_ids.z_aclp->z_acl_bytes); } - error = dmu_tx_assign(tx, DMU_TX_ASSIGN_WAIT); + error = dmu_tx_assign(tx, DMU_TX_ASSIGN_WAIT | DMU_TX_ASSIGN_CONTINUE); if (error) { zfs_acl_ids_free(&acl_ids); dmu_tx_abort(tx); @@ -1289,7 +1289,7 @@ zfs_remove_(vnode_t *dvp, vnode_t *vp, const char *name, cred_t *cr) */ dmu_tx_mark_netfree(tx); - error = dmu_tx_assign(tx, DMU_TX_ASSIGN_WAIT); + error = dmu_tx_assign(tx, DMU_TX_ASSIGN_WAIT | DMU_TX_ASSIGN_CONTINUE); if (error) { dmu_tx_abort(tx); ZFS_EXIT(zfsvfs); @@ -1504,7 +1504,7 @@ zfs_mkdir(znode_t *dzp, const char *dirname, vattr_t *vap, znode_t **zpp, dmu_tx_hold_sa_create(tx, acl_ids.z_aclp->z_acl_bytes + ZFS_SA_BASE_ATTR_SIZE); - error = dmu_tx_assign(tx, DMU_TX_ASSIGN_WAIT); + error = dmu_tx_assign(tx, DMU_TX_ASSIGN_WAIT | DMU_TX_ASSIGN_CONTINUE); if (error) { zfs_acl_ids_free(&acl_ids); dmu_tx_abort(tx); @@ -1607,7 +1607,7 @@ zfs_rmdir_(vnode_t *dvp, vnode_t *vp, const char *name, cred_t *cr) zfs_sa_upgrade_txholds(tx, zp); zfs_sa_upgrade_txholds(tx, dzp); dmu_tx_mark_netfree(tx); - error = dmu_tx_assign(tx, DMU_TX_ASSIGN_WAIT); + error = dmu_tx_assign(tx, DMU_TX_ASSIGN_WAIT | DMU_TX_ASSIGN_CONTINUE); if (error) { dmu_tx_abort(tx); ZFS_EXIT(zfsvfs); @@ -2696,7 +2696,7 @@ zfs_setattr(znode_t *zp, vattr_t *vap, int flags, cred_t *cr) zfs_sa_upgrade_txholds(tx, zp); - err = dmu_tx_assign(tx, DMU_TX_ASSIGN_WAIT); + err = dmu_tx_assign(tx, DMU_TX_ASSIGN_WAIT | DMU_TX_ASSIGN_CONTINUE); if (err) goto out; @@ -3398,7 +3398,7 @@ zfs_do_rename_impl(vnode_t *sdvp, vnode_t **svpp, struct componentname *scnp, zfs_sa_upgrade_txholds(tx, szp); dmu_tx_hold_zap(tx, zfsvfs->z_unlinkedobj, FALSE, NULL); - error = dmu_tx_assign(tx, DMU_TX_ASSIGN_WAIT); + error = dmu_tx_assign(tx, DMU_TX_ASSIGN_WAIT | DMU_TX_ASSIGN_CONTINUE); if (error) { dmu_tx_abort(tx); goto out_seq; @@ -3594,7 +3594,7 @@ zfs_symlink(znode_t *dzp, const char *name, vattr_t *vap, } if (fuid_dirtied) zfs_fuid_txhold(zfsvfs, tx); - error = dmu_tx_assign(tx, DMU_TX_ASSIGN_WAIT); + error = dmu_tx_assign(tx, DMU_TX_ASSIGN_WAIT | DMU_TX_ASSIGN_CONTINUE); if (error) { zfs_acl_ids_free(&acl_ids); dmu_tx_abort(tx); @@ -3799,7 +3799,7 @@ zfs_link(znode_t *tdzp, znode_t *szp, const char *name, cred_t *cr, dmu_tx_hold_zap(tx, tdzp->z_id, TRUE, name); zfs_sa_upgrade_txholds(tx, szp); zfs_sa_upgrade_txholds(tx, tdzp); - error = dmu_tx_assign(tx, DMU_TX_ASSIGN_WAIT); + error = dmu_tx_assign(tx, DMU_TX_ASSIGN_WAIT | DMU_TX_ASSIGN_CONTINUE); if (error) { dmu_tx_abort(tx); ZFS_EXIT(zfsvfs); diff --git a/module/os/freebsd/zfs/zfs_znode.c b/module/os/freebsd/zfs/zfs_znode.c index bf1e4c63d1..992fd8a93b 100644 --- a/module/os/freebsd/zfs/zfs_znode.c +++ b/module/os/freebsd/zfs/zfs_znode.c @@ -1428,7 +1428,7 @@ zfs_extend(znode_t *zp, uint64_t end) newblksz = 0; } - error = dmu_tx_assign(tx, DMU_TX_ASSIGN_WAIT); + error = dmu_tx_assign(tx, DMU_TX_ASSIGN_WAIT | DMU_TX_ASSIGN_CONTINUE); if (error) { dmu_tx_abort(tx); zfs_rangelock_exit(lr); @@ -1546,7 +1546,7 @@ zfs_trunc(znode_t *zp, uint64_t end) dmu_tx_hold_sa(tx, zp->z_sa_hdl, B_FALSE); zfs_sa_upgrade_txholds(tx, zp); dmu_tx_mark_netfree(tx); - error = dmu_tx_assign(tx, DMU_TX_ASSIGN_WAIT); + error = dmu_tx_assign(tx, DMU_TX_ASSIGN_WAIT | DMU_TX_ASSIGN_CONTINUE); if (error) { dmu_tx_abort(tx); zfs_rangelock_exit(lr); @@ -1627,7 +1627,7 @@ log: tx = dmu_tx_create(zfsvfs->z_os); dmu_tx_hold_sa(tx, zp->z_sa_hdl, B_FALSE); zfs_sa_upgrade_txholds(tx, zp); - error = dmu_tx_assign(tx, DMU_TX_ASSIGN_WAIT); + error = dmu_tx_assign(tx, DMU_TX_ASSIGN_WAIT | DMU_TX_ASSIGN_CONTINUE); if (error) { dmu_tx_abort(tx); return (error); diff --git a/module/os/linux/zfs/zfs_dir.c b/module/os/linux/zfs/zfs_dir.c index 5e6dd8e814..ba99da4d25 100644 --- a/module/os/linux/zfs/zfs_dir.c +++ b/module/os/linux/zfs/zfs_dir.c @@ -1084,7 +1084,7 @@ zfs_make_xattrdir(znode_t *zp, vattr_t *vap, znode_t **xzpp, cred_t *cr) fuid_dirtied = zfsvfs->z_fuid_dirty; if (fuid_dirtied) zfs_fuid_txhold(zfsvfs, tx); - error = dmu_tx_assign(tx, DMU_TX_ASSIGN_WAIT); + error = dmu_tx_assign(tx, DMU_TX_ASSIGN_WAIT | DMU_TX_ASSIGN_CONTINUE); if (error) { zfs_acl_ids_free(&acl_ids); dmu_tx_abort(tx); diff --git a/module/os/linux/zfs/zfs_vnops_os.c b/module/os/linux/zfs/zfs_vnops_os.c index aa826a0fe1..b7a274f45f 100644 --- a/module/os/linux/zfs/zfs_vnops_os.c +++ b/module/os/linux/zfs/zfs_vnops_os.c @@ -2327,7 +2327,7 @@ top: zfs_sa_upgrade_txholds(tx, zp); - err = dmu_tx_assign(tx, DMU_TX_ASSIGN_WAIT); + err = dmu_tx_assign(tx, DMU_TX_ASSIGN_WAIT | DMU_TX_ASSIGN_CONTINUE); if (err) goto out; diff --git a/module/os/linux/zfs/zfs_znode.c b/module/os/linux/zfs/zfs_znode.c index f6123f3522..cc77f5d5a4 100644 --- a/module/os/linux/zfs/zfs_znode.c +++ b/module/os/linux/zfs/zfs_znode.c @@ -1528,7 +1528,7 @@ zfs_extend(znode_t *zp, uint64_t end) newblksz = 0; } - error = dmu_tx_assign(tx, DMU_TX_ASSIGN_WAIT); + error = dmu_tx_assign(tx, DMU_TX_ASSIGN_WAIT | DMU_TX_ASSIGN_CONTINUE); if (error) { dmu_tx_abort(tx); zfs_rangelock_exit(lr); @@ -1714,7 +1714,7 @@ zfs_trunc(znode_t *zp, uint64_t end) dmu_tx_hold_sa(tx, zp->z_sa_hdl, B_FALSE); zfs_sa_upgrade_txholds(tx, zp); dmu_tx_mark_netfree(tx); - error = dmu_tx_assign(tx, DMU_TX_ASSIGN_WAIT); + error = dmu_tx_assign(tx, DMU_TX_ASSIGN_WAIT | DMU_TX_ASSIGN_CONTINUE); if (error) { dmu_tx_abort(tx); zfs_rangelock_exit(lr); @@ -1785,7 +1785,7 @@ log: tx = dmu_tx_create(zfsvfs->z_os); dmu_tx_hold_sa(tx, zp->z_sa_hdl, B_FALSE); zfs_sa_upgrade_txholds(tx, zp); - error = dmu_tx_assign(tx, DMU_TX_ASSIGN_WAIT); + error = dmu_tx_assign(tx, DMU_TX_ASSIGN_WAIT | DMU_TX_ASSIGN_CONTINUE); if (error) { dmu_tx_abort(tx); goto out; diff --git a/module/zfs/zfs_sa.c b/module/zfs/zfs_sa.c index 557020f86a..bad9ea6215 100644 --- a/module/zfs/zfs_sa.c +++ b/module/zfs/zfs_sa.c @@ -248,7 +248,7 @@ zfs_sa_set_xattr(znode_t *zp) dmu_tx_hold_sa_create(tx, size); dmu_tx_hold_sa(tx, zp->z_sa_hdl, B_TRUE); - error = dmu_tx_assign(tx, DMU_TX_ASSIGN_WAIT); + error = dmu_tx_assign(tx, DMU_TX_ASSIGN_WAIT | DMU_TX_ASSIGN_CONTINUE); if (error) { dmu_tx_abort(tx); } else { diff --git a/module/zfs/zfs_vnops.c b/module/zfs/zfs_vnops.c index 329c6891bc..77740e59fb 100644 --- a/module/zfs/zfs_vnops.c +++ b/module/zfs/zfs_vnops.c @@ -556,7 +556,8 @@ zfs_write(znode_t *zp, zfs_uio_t *uio, int ioflag, cred_t *cr) MIN(n, max_blksz)); DB_DNODE_EXIT(db); zfs_sa_upgrade_txholds(tx, zp); - error = dmu_tx_assign(tx, DMU_TX_ASSIGN_WAIT); + error = dmu_tx_assign(tx, + DMU_TX_ASSIGN_WAIT | DMU_TX_ASSIGN_CONTINUE); if (error) { dmu_tx_abort(tx); if (abuf != NULL)