Hello Dmitry,

> --- a/net/mac802154/iface.c
> +++ b/net/mac802154/iface.c
> @@ -669,7 +669,7 @@ ieee802154_if_add(struct ieee802154_local *local, const 
> char *name,
>               goto err;
>  
>       mutex_lock(&local->iflist_mtx);
> -     list_add_tail_rcu(&sdata->list, &local->interfaces);
> +     list_add_tail(&sdata->list, &local->interfaces);
>       mutex_unlock(&local->iflist_mtx);
>  
>       return ndev;
> @@ -683,11 +683,13 @@ void ieee802154_if_remove(struct ieee802154_sub_if_data 
> *sdata)
>  {
>       ASSERT_RTNL();
>  
> +     if (test_and_set_bit(SDATA_STATE_REMOVED, &sdata->state))
> +             return;
> +
>       mutex_lock(&sdata->local->iflist_mtx);
> -     list_del_rcu(&sdata->list);
> +     list_del(&sdata->list);
>       mutex_unlock(&sdata->local->iflist_mtx);
>  
> -     synchronize_rcu();
>       unregister_netdevice(sdata->dev);
>  }
>  
> @@ -697,6 +699,8 @@ void ieee802154_remove_interfaces(struct ieee802154_local 
> *local)
>  
>       mutex_lock(&local->iflist_mtx);
>       list_for_each_entry_safe(sdata, tmp, &local->interfaces, list) {
> +             if (test_and_set_bit(SDATA_STATE_REMOVED, &sdata->state))
> +                     continue;
>               list_del(&sdata->list);

Why not just enclose this list_del() within a mutex_lock(iflist_mtx)
like the others? Would probably make more sense and prevent the use of
yet another protection mechanism? Is there anything preventing the use
of this mutex here?

Thanks,
Miquèl

Reply via email to