On 6/30/20 1:22 AM, Huang, Ying wrote: >> + /* >> + * To avoid cycles in the migration "graph", ensure >> + * that migration sources are not future targets by >> + * setting them in 'used_targets'. >> + * >> + * But, do this only once per pass so that multiple >> + * source nodes can share a target node. > establish_migrate_target() calls find_next_best_node(), which will set > target_node in used_targets. So it seems that the nodes_or() below is > only necessary to initialize used_targets, and multiple source nodes > cannot share one target node in current implementation. Yes, that is true. My focus on this implementation was simplicity and sanity for common configurations. I can certainly imagine scenarios where this is suboptimal. I'm totally open to other ways of doing this.