mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-22 18:40:43 +03:00
Fix zil replay panic when TX_REMOVE followed by TX_CREATE
If TX_REMOVE is followed by TX_CREATE on the same object id, we need to make sure the object removal is completely finished before creation. The current implementation relies on dnode_hold_impl with DNODE_MUST_BE_ALLOCATED returning ENOENT. While this check seems to work fine before, in current version it does not guarantee the object removal is completed. We fix this by checking if DNODE_MUST_BE_FREE returns successful instead. Also add test and remove dead code in dnode_hold_impl. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: Tom Caputi <tcaputi@datto.com> Signed-off-by: Chunwei Chen <david.chen@nutanix.com> Closes #7151 Closes #8910 Closes #9123 Closes #9145
This commit is contained in:
committed by
Brian Behlendorf
parent
9c9dcd6e04
commit
035e96118b
@@ -835,8 +835,8 @@ tags = ['functional', 'scrub_mirror']
|
||||
tests = ['slog_001_pos', 'slog_002_pos', 'slog_003_pos', 'slog_004_pos',
|
||||
'slog_005_pos', 'slog_006_pos', 'slog_007_pos', 'slog_008_neg',
|
||||
'slog_009_neg', 'slog_010_neg', 'slog_011_neg', 'slog_012_neg',
|
||||
'slog_013_pos', 'slog_014_pos', 'slog_015_neg', 'slog_replay_fs',
|
||||
'slog_replay_volume']
|
||||
'slog_013_pos', 'slog_014_pos', 'slog_015_neg', 'slog_replay_fs_001',
|
||||
'slog_replay_fs_002', 'slog_replay_volume']
|
||||
tags = ['functional', 'slog']
|
||||
|
||||
[tests/functional/snapshot]
|
||||
|
||||
Reference in New Issue
Block a user