Subject: Re: [Patch net] sched, cls: check if we could overwrite actions when changing a filter

From: Jamal Hadi Salim <[email-masked]>
Date: Wed, 23 Apr 2014 07:30:27 -0400

On 04/21/14 19:28, Cong Wang wrote:
> On Sat, Apr 19, 2014 at 4:10 AM, Jamal Hadi Salim <[email-masked]> wrote:
>> On 04/18/14 13:18, Cong Wang wrote:

>> RTNL is one dimension. The other is the datapath processing.
>> You need to make sure that packets still flow correctly during the
>> change over.
>
> Sure, since we grab tcf_tree_lock() before changing actions in
> tcf_exts_change(), I think this is guaranteed too.
>

Maybe - I thought there were recent changes to tcf_tree_lock that
eased the restriction. Youd need to make sure.

>> Well - then go nuts and put out a patch.
>> Replace _all or none_ is a reasonable approach.
>>
>>
>
> Great! We both agree on this.
>
> Looking at the current code, we first initialize a list of actions
> and then replace them as a whole by splicing the lists with
> tcf_tree_lock held, so this is already done. IOW, this patch
> is enough.
>
> Or am I missing anything?
>

I dont see what you are seeing. However, some quick tests will prove it.
Example go from 1->3 actions and backwards 3->1 actions.
I.e create a policy with (handwave) 3 actions and replace it with
another that has only one action. Do this while you are sending a
ping exercising this policy.
I can see how yours with 1->0 and 0->1 will work.

cheers,
jamal