Forum | Documentation | Website | Blog

Skip to content
Snippets Groups Projects
  • Dan Williams's avatar
    [SCSI] async: make async_synchronize_full() flush all work regardless of domain · a4683487
    Dan Williams authored
    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 tim...
    a4683487