No function actually handles the error returns from __wt_evict_forced_page, let alone distinguishing EBUSY from other returns.

I'd suggest allocating the eviction array when the server thread starts up and ignoring the return from __wt_evict_server_wake, and then __wt_evict_forced_page doesn't need to return any errors at all (which simplifies __wt_merge_tree and the __wt_hazard_clear/__wt_eviction_page_force pair).

I am a little concerned about the second WT_ATOMIC_CAS call in __wt_evict_forced_page.   If that fails, isn't there a pretty big problem in the system, and/or shouldn't we clear the entry we just pushed onto the queue?