• Doug Ledford's avatar
    IPoIB: Make the carrier_on_task race aware · 67d7209e
    Doug Ledford authored
    We blindly assume that we can just take the rtnl lock and that will
    prevent races with downing this interface.  Unfortunately, that's not
    the case.  In ipoib_mcast_stop_thread() we will call flush_workqueue()
    in an attempt to clear out all remaining instances of ipoib_join_task.
    But, since this task is put on the same workqueue as the join task,
    the flush_workqueue waits on this thread too.  But this thread is
    deadlocked on the rtnl lock.  The better thing here is to use trylock
    and loop on that until we either get the lock or we see that
    FLAG_ADMIN_UP has been cleared, in which case we don't need to do
    anything anyway and we just return.
    Signed-off-by: default avatarDoug Ledford <dledford@redhat.com>
    Signed-off-by: default avatarRoland Dreier <roland@purestorage.com>
    67d7209e
ipoib_multicast.c 25.5 KB