From 22eb2bdce31fa0f5688f48cbfcdd4edbf3c795ee Mon Sep 17 00:00:00 2001 From: Alexander Motin Date: Tue, 10 Jun 2025 12:30:06 -0400 Subject: [PATCH] Make TX abort after assign safer It is not right, but there are few examples when TX is aborted after being assigned in case of error. To handle it better on production systems add extra cleanup steps. While here, replace couple dmu_tx_abort() in simple cases. Reviewed-by: Rob Norris Reviewed-by: Brian Behlendorf Reviewed-by: Igor Kozhukhov Signed-off-by: Alexander Motin Sponsored by: iXsystems, Inc. Closes #17438 --- module/zfs/zfs_vnops.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module/zfs/zfs_vnops.c b/module/zfs/zfs_vnops.c index a419e144c..948989070 100644 --- a/module/zfs/zfs_vnops.c +++ b/module/zfs/zfs_vnops.c @@ -1163,7 +1163,7 @@ zfs_rewrite(znode_t *zp, uint64_t off, uint64_t len, uint64_t flags, error = dmu_buf_hold_array_by_dnode(dn, off, n, TRUE, FTAG, &numbufs, &dbp, DMU_READ_PREFETCH); if (error) { - dmu_tx_abort(tx); + dmu_tx_commit(tx); break; } for (int i = 0; i < numbufs; i++) {