Please sign in to comment.
[SCSI] async: make async_synchronize_full() flush all work regardless…
… of domain In response to an async related regression James noted: "My theory is that this is an init problem: The assumption in a lot of our code is that async_synchronize_full() waits for everything ... even the domain specific async schedules, which isn't true." ...so make this assumption true. Each domain, including the default one, registers itself on a global domain list when work is scheduled. Once all entries complete it exits that list. Waiting for the list to be empty syncs all in-flight work across all domains. Domains can opt-out of global syncing if they are declared as exclusive ASYNC_DOMAIN_EXCLUSIVE(). All stack-based domains have been declared exclusive since the domain may go out of scope as soon as the last work item completes. Statically declared domains are mostly ok, but async_unregister_domain() is there to close any theoretical races with pending async_synchronize_full waiters at module removal time. Signed-off-by: Dan Williams <email@example.com> Acked-by: Arjan van de Ven <firstname.lastname@example.org> Reported-by: Meelis Roos <email@example.com> Reported-by: Eldad Zack <firstname.lastname@example.org> Tested-by: Eldad Zack <email@example.com> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
- Loading branch information...
Showing with 43 additions and 2 deletions.