Le 12/02/2019 à 04:12, Callum Sinclair a écrit :
[snip]
>       /* Wipe the cache */
> -     list_for_each_entry_safe(c, tmp, &mrt->mfc_cache_list, list) {
> -             if (!all && (c->mfc_flags & MFC_STATIC))
> -                     continue;
> -             rhltable_remove(&mrt->mfc_hash, &c->mnode, ipmr_rht_params);
> -             list_del_rcu(&c->list);
> -             cache = (struct mfc_cache *)c;
> -             call_ipmr_mfc_entry_notifiers(net, FIB_EVENT_ENTRY_DEL, cache,
> -                                           mrt->id);
> -             mroute_netlink_event(mrt, cache, RTM_DELROUTE);
> -             mr_cache_put(c);
> -     }
> -
> -     if (atomic_read(&mrt->cache_resolve_queue_len) != 0) {
> -             spin_lock_bh(&mfc_unres_lock);
> -             list_for_each_entry_safe(c, tmp, &mrt->mfc_unres_queue, list) {
> -                     list_del(&c->list);
> +     if (flags & (MRT_FLUSH_MFC | MRT_FLUSH_MFC_STATIC)) {
> +             list_for_each_entry_safe(c, tmp, &mrt->mfc_cache_list, list) {
> +                     if (((c->mfc_flags & MFC_STATIC) && !(flags & 
> MRT_FLUSH_MFC_STATIC)) ||
> +                         (!(c->mfc_flags & MFC_STATIC) && !(flags & 
> MRT_FLUSH_MFC)))
> +                             continue;
> +                     rhltable_remove(&mrt->mfc_hash, &c->mnode, 
> ipmr_rht_params);
> +                     list_del_rcu(&c->list);
>                       cache = (struct mfc_cache *)c;
> +                     call_ipmr_mfc_entry_notifiers(net, FIB_EVENT_ENTRY_DEL, 
> cache,
> +                                                   mrt->id);
>                       mroute_netlink_event(mrt, cache, RTM_DELROUTE);
> -                     ipmr_destroy_unres(mrt, cache);
> +                     mr_cache_put(c);
> +             }
> +
> +             if (atomic_read(&mrt->cache_resolve_queue_len) != 0) {
I wonder if the mfc_unres_queue must be cleaned up when only
MRT_FLUSH_MFC_STATIC is provided. My first intuition would be to do it only with
MRT_FLUSH_MFC.
Any opinion?


Regards,
Nicolas

Reply via email to