• Ranko Zivojnovic's avatar
    [NET]: gen_estimator deadlock fix · 0929c2dd
    Ranko Zivojnovic authored
    -Fixes ABBA deadlock noted by Patrick McHardy <kaber@trash.net>:
    
    > There is at least one ABBA deadlock, est_timer() does:
    > read_lock(&est_lock)
    > spin_lock(e->stats_lock) (which is dev->queue_lock)
    >
    > and qdisc_destroy calls htb_destroy under dev->queue_lock, which
    > calls htb_destroy_class, then gen_kill_estimator and this
    > write_locks est_lock.
    
    To fix the ABBA deadlock the rate estimators are now kept on an rcu list.
    
    -The est_lock changes the use from protecting the list to protecting
    the update to the 'bstat' pointer in order to avoid NULL dereferencing.
    
    -The 'interval' member of the gen_estimator structure removed as it is
    not needed.
    Signed-off-by: default avatarRanko Zivojnovic <ranko@spidernet.net>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    0929c2dd
gen_estimator.c 7.05 KB