• Bob Copeland's avatar
    mac80211: remove ignore_plink_timer flag · 2b470c39
    Bob Copeland authored
    The mesh_plink code is doing some interesting things with the
    ignore_plink_timer flag.  It seems the original intent was to
    handle this race:
    
    cpu 0                           cpu 1
    -----                           -----
                                    start timer handler for state X
    acquire sta_lock
    change state from X to Y
    mod_timer() / del_timer()
    release sta_lock
                                    acquire sta_lock
                                    execute state Y timer too soon
    
    However, using the mod_timer()/del_timer() return values to
    detect these cases is broken.  As a result, timers get ignored
    unnecessarily, and stations can get stuck in the peering state
    machine.
    
    Instead, we can detect the case by looking at the timer expiration.
    In the case of del_timer, just ignore the timers in the following
    (LISTEN/ESTAB) states since they won't have timers anyway.
    Signed-off-by: default avatarBob Copeland <me@bobcopeland.com>
    Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
    2b470c39
mesh_plink.c 28.9 KB