zfs_log_write: only put the callback on the last itx

If a write is split across mutliple itxs, we only want the callback on
the last one, otherwise it will be called for every itx associated with
this single write, which makes it very hard to know what to clean up.

Sponsored-by: Klara, Inc.
Sponsored-by: Wasabi Technology, Inc.
Reviewed-by: Mark Johnston <markj@FreeBSD.org>
Reviewed-by: Alexander Motin <mav@FreeBSD.org>
Signed-off-by: Rob Norris <rob.norris@klarasystems.com>
Closes #17445
This commit is contained in:
Rob Norris 2025-06-10 13:41:27 +10:00 committed by Brian Behlendorf
parent e1dd433a44
commit 9c0f5bc183

View File

@ -693,8 +693,11 @@ zfs_log_write(zilog_t *zilog, dmu_tx_t *tx, int txtype,
itx->itx_sync = (zp->z_sync_cnt != 0);
itx->itx_gen = gen;
itx->itx_callback = callback;
itx->itx_callback_data = callback_data;
if (resid == len) {
itx->itx_callback = callback;
itx->itx_callback_data = callback_data;
}
zil_itx_assign(zilog, itx, tx);
off += len;