HomeFreeBSD

dnode_sync is careless with range tree

Description

dnode_sync is careless with range tree

Because dnode_sync_free_range() must drop dn_mtx during its processing,
using it as a callback to range_tree_vacate() is not safe. No other
operations (besides destroy) are allowed once range_tree_vacate() has
begun, and dropping dn_mtx would leave a window open for another thread
to observe that invalid (and unsafe) state via dnode_block_freed().

Reviewed-by: Matthew Ahrens <mahrens@delphix.com>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Igor Kozhukhov <igor@dilos.org>
Signed-off-by: Patrick Mooney <pmooney@oxide.computer>
Closes #10708
Closes #10823

Details

Provenance
pmooney_pfmooney.comAuthored on Aug 27 2020, 4:48 AM
GitHub <noreply@github.com>Committed on Aug 27 2020, 4:48 AM
Parents
rG600def792e17: Fix NEWS file
Branches
Unknown
Tags
Unknown