• Johannes Berg's avatar
    workqueue: re-add lockdep dependencies for flushing · 13892551
    Johannes Berg authored
    [ Upstream commit 87915adc ]
    
    In flush_work(), we need to create a lockdep dependency so that
    the following scenario is appropriately tagged as a problem:
    
      work_function()
      {
        mutex_lock(&mutex);
        ...
      }
    
      other_function()
      {
        mutex_lock(&mutex);
        flush_work(&work); // or cancel_work_sync(&work);
      }
    
    This is a problem since the work might be running and be blocked
    on trying to acquire the mutex.
    
    Similarly, in flush_workqueue().
    
    These were removed after cross-release partially caught these
    problems, but now cross-release was reverted anyway. IMHO the
    removal was erroneous anyway though, since lockdep should be
    able to catch potential problems, not just actual ones, and
    cross-release would only have caught the problem when actually
    invoking wait_for_completion().
    
    Fixes: fd1a5b04 ("workqueue: Remove now redundant lock acquisitions wrt. workqueue flushes")
    Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Signed-off-by: default avatarSasha Levin <alexander.levin@microsoft.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    13892551
workqueue.c 159 KB