I believe there is a bug in __tree_walk_internal, where it is spinning on __wt_page_swap when __wt_page_in encounters a locked ref.
If my reading of the code is correct, it means the walk will stall waiting on locked refs even if WT_READ_NO_WAIT is specified, which isn't expected.
The other user of WT_READ_NO_WAIT is the eviction server in __evict_walk_tree, that code has a custom walk function so isn't affected.
Concretely I think we need to change the loop in __tree_walk_internal around __wt_page_swap to handle WT_NOTFOUND differently if WT_READ_NO_WAIT is configured.