Fix VERIFY(!zil_replaying(zilog, tx)) panic

The zfs_log_clone_range() function is never called from the
zfs_clone_range_replay() function, so I assumed it is safe to assert
that zil_replaying() is never TRUE here. It turns out zil_replaying()
also returns TRUE when the sync property is set to disabled.

Fix the problem by just returning if zil_replaying() returns TRUE.

Reviewed-by: Richard Yao <richard.yao@alumni.stonybrook.edu>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reported by: Florian Smeets
Signed-off-by: Pawel Jakub Dawidek <pawel@dawidek.net>
Closes #14758
This commit is contained in:
Pawel Jakub Dawidek 2023-04-18 08:42:09 +09:00 committed by GitHub
parent ac18dc77f3
commit 3b5af20139
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -905,9 +905,7 @@ zfs_log_clone_range(zilog_t *zilog, dmu_tx_t *tx, int txtype, znode_t *zp,
uint64_t partlen, max_log_data;
size_t i, partnbps;
VERIFY(!zil_replaying(zilog, tx));
if (zp->z_unlinked)
if (zil_replaying(zilog, tx) || zp->z_unlinked)
return;
max_log_data = zil_max_log_data(zilog, sizeof (lr_clone_range_t));