Skip to content
  • Tejun Heo's avatar
    async: use ULLONG_MAX for infinity cookie value · c68eee14
    Tejun Heo authored
    
    
    Currently, next_cookie is used as the infinity value.  In most cases,
    this should work fine but it theoretically could bring subtle behavior
    difference between async_synchronize_full() and
    async_synchronize_full_domain().
    
    async_synchronize_full() keeps waiting until there's no registered
    async_entry left regardless of what next_cookie was when the function
    was called.  It guarantees that the queue is completely drained at
    least once before returning.
    
    However, async_synchronize_full_domain() doesn't.  It synchronizes
    upto next_cookie and if further async jobs are queued after the
    next_cookie value to synchronize is decided, they won't be waited for.
    
    For unrelated async jobs, the behavior difference doesn't matter;
    however, if async jobs which are related (nested or otherwise) to the
    executing ones are queued while sychronization is in progress, the
    resulting behavior difference could be problematic.
    
    This can be easily fixed by using ULLONG_MAX as the infinity value
    instead.  Define ASYNC_COOKIE_MAX as ULLONG_MAX and use it as the
    infinity value for synchronization.  This makes
    async_synchronize_full_domain() fully drain the domain at least once
    before returning, making its behavior match async_synchronize_full().
    
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Cc: Arjan van de Ven <arjan@linux.intel.com>
    Cc: Dan Williams <djbw@fb.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    c68eee14