diff mbox

[COLO-Frame,v10,33/38] netfilter: Introduce an API to delete the timer of all buffer-filters

Message ID 1446551816-15768-34-git-send-email-zhang.zhanghailiang@huawei.com
State New
Headers show

Commit Message

Zhanghailiang Nov. 3, 2015, 11:56 a.m. UTC
Signed-off-by: zhanghailiang <zhang.zhanghailiang@huawei.com>
Cc: Jason Wang <jasowang@redhat.com>
---
v10: new patch
---
 include/net/filter.h |  1 +
 net/filter-buffer.c  | 17 +++++++++++++++++
 2 files changed, 18 insertions(+)

Comments

Yang Hongyang Nov. 3, 2015, 12:41 p.m. UTC | #1
Can you explain why this is needed? Seems that this api hasn't
been used in this series.

On 2015年11月03日 19:56, zhanghailiang wrote:
> Signed-off-by: zhanghailiang <zhang.zhanghailiang@huawei.com>
> Cc: Jason Wang <jasowang@redhat.com>
> ---
> v10: new patch
> ---
>   include/net/filter.h |  1 +
>   net/filter-buffer.c  | 17 +++++++++++++++++
>   2 files changed, 18 insertions(+)
>
> diff --git a/include/net/filter.h b/include/net/filter.h
> index 5a09607..4499d60 100644
> --- a/include/net/filter.h
> +++ b/include/net/filter.h
> @@ -74,5 +74,6 @@ ssize_t qemu_netfilter_pass_to_next(NetClientState *sender,
>                                       int iovcnt,
>                                       void *opaque);
>   void filter_buffer_release_all(void);
> +void  filter_buffer_del_all_timers(void);
>
>   #endif /* QEMU_NET_FILTER_H */
> diff --git a/net/filter-buffer.c b/net/filter-buffer.c
> index b344901..5f0ea70 100644
> --- a/net/filter-buffer.c
> +++ b/net/filter-buffer.c
> @@ -178,6 +178,23 @@ void filter_buffer_release_all(void)
>       qemu_foreach_netfilter(filter_buffer_release_packets, NULL, NULL);
>   }
>
> +static void filter_buffer_del_timer(NetFilterState *nf, void *opaque,
> +                                    Error **errp)
> +{
> +    if (!strcmp(object_get_typename(OBJECT(nf)), TYPE_FILTER_BUFFER)) {
> +        FilterBufferState *s = FILTER_BUFFER(nf);
> +
> +        if (s->interval) {
> +            timer_del(&s->release_timer);
> +        }
> +    }
> +}
> +
> +void filter_buffer_del_all_timers(void)
> +{
> +    qemu_foreach_netfilter(filter_buffer_del_timer, NULL, NULL);
> +}
> +
>   static void filter_buffer_init(Object *obj)
>   {
>       object_property_add(obj, "interval", "int",
>
Zhanghailiang Nov. 3, 2015, 1:07 p.m. UTC | #2
Hi,

On 2015/11/3 20:41, Yang Hongyang wrote:
> Can you explain why this is needed? Seems that this api hasn't
> been used in this series.
>

We will call it in colo_init_filter_buffers() which is introduced in patch 37,
We should remove the timers of filter-buffers which are configured by users.
Or there will be two places to release packets when we enable colo ft, one in timer callback,
the other one in COLO when we do checkpoint.


Thanks,
zhanghailiang

> On 2015年11月03日 19:56, zhanghailiang wrote:
>> Signed-off-by: zhanghailiang <zhang.zhanghailiang@huawei.com>
>> Cc: Jason Wang <jasowang@redhat.com>
>> ---
>> v10: new patch
>> ---
>>   include/net/filter.h |  1 +
>>   net/filter-buffer.c  | 17 +++++++++++++++++
>>   2 files changed, 18 insertions(+)
>>
>> diff --git a/include/net/filter.h b/include/net/filter.h
>> index 5a09607..4499d60 100644
>> --- a/include/net/filter.h
>> +++ b/include/net/filter.h
>> @@ -74,5 +74,6 @@ ssize_t qemu_netfilter_pass_to_next(NetClientState *sender,
>>                                       int iovcnt,
>>                                       void *opaque);
>>   void filter_buffer_release_all(void);
>> +void  filter_buffer_del_all_timers(void);
>>
>>   #endif /* QEMU_NET_FILTER_H */
>> diff --git a/net/filter-buffer.c b/net/filter-buffer.c
>> index b344901..5f0ea70 100644
>> --- a/net/filter-buffer.c
>> +++ b/net/filter-buffer.c
>> @@ -178,6 +178,23 @@ void filter_buffer_release_all(void)
>>       qemu_foreach_netfilter(filter_buffer_release_packets, NULL, NULL);
>>   }
>>
>> +static void filter_buffer_del_timer(NetFilterState *nf, void *opaque,
>> +                                    Error **errp)
>> +{
>> +    if (!strcmp(object_get_typename(OBJECT(nf)), TYPE_FILTER_BUFFER)) {
>> +        FilterBufferState *s = FILTER_BUFFER(nf);
>> +
>> +        if (s->interval) {
>> +            timer_del(&s->release_timer);
>> +        }
>> +    }
>> +}
>> +
>> +void filter_buffer_del_all_timers(void)
>> +{
>> +    qemu_foreach_netfilter(filter_buffer_del_timer, NULL, NULL);
>> +}
>> +
>>   static void filter_buffer_init(Object *obj)
>>   {
>>       object_property_add(obj, "interval", "int",
>>
>
Jason Wang Nov. 4, 2015, 2:51 a.m. UTC | #3
On 11/03/2015 09:07 PM, zhanghailiang wrote:
> Hi,
>
> On 2015/11/3 20:41, Yang Hongyang wrote:
>> Can you explain why this is needed? Seems that this api hasn't
>> been used in this series.
>>
>
> We will call it in colo_init_filter_buffers() which is introduced in
> patch 37,
> We should remove the timers of filter-buffers which are configured by
> users.
> Or there will be two places to release packets when we enable colo ft,
> one in timer callback,
> the other one in COLO when we do checkpoint.
>
>
> Thanks,
> zhanghailiang

Hi:

Then you'd better explain this in commit log.

Thanks
>
>> On 2015年11月03日 19:56, zhanghailiang wrote:
>>> Signed-off-by: zhanghailiang <zhang.zhanghailiang@huawei.com>
>>> Cc: Jason Wang <jasowang@redhat.com>
>>> ---
>>> v10: new patch
>>> ---
>>>   include/net/filter.h |  1 +
>>>   net/filter-buffer.c  | 17 +++++++++++++++++
>>>   2 files changed, 18 insertions(+)
>>>
>>> diff --git a/include/net/filter.h b/include/net/filter.h
>>> index 5a09607..4499d60 100644
>>> --- a/include/net/filter.h
>>> +++ b/include/net/filter.h
>>> @@ -74,5 +74,6 @@ ssize_t qemu_netfilter_pass_to_next(NetClientState
>>> *sender,
>>>                                       int iovcnt,
>>>                                       void *opaque);
>>>   void filter_buffer_release_all(void);
>>> +void  filter_buffer_del_all_timers(void);
>>>
>>>   #endif /* QEMU_NET_FILTER_H */
>>> diff --git a/net/filter-buffer.c b/net/filter-buffer.c
>>> index b344901..5f0ea70 100644
>>> --- a/net/filter-buffer.c
>>> +++ b/net/filter-buffer.c
>>> @@ -178,6 +178,23 @@ void filter_buffer_release_all(void)
>>>       qemu_foreach_netfilter(filter_buffer_release_packets, NULL,
>>> NULL);
>>>   }
>>>
>>> +static void filter_buffer_del_timer(NetFilterState *nf, void *opaque,
>>> +                                    Error **errp)
>>> +{
>>> +    if (!strcmp(object_get_typename(OBJECT(nf)),
>>> TYPE_FILTER_BUFFER)) {
>>> +        FilterBufferState *s = FILTER_BUFFER(nf);
>>> +
>>> +        if (s->interval) {
>>> +            timer_del(&s->release_timer);
>>> +        }
>>> +    }
>>> +}
>>> +
>>> +void filter_buffer_del_all_timers(void)
>>> +{
>>> +    qemu_foreach_netfilter(filter_buffer_del_timer, NULL, NULL);
>>> +}
>>> +
>>>   static void filter_buffer_init(Object *obj)
>>>   {
>>>       object_property_add(obj, "interval", "int",
>>>
>>
>
>
Zhanghailiang Nov. 4, 2015, 3:08 a.m. UTC | #4
On 2015/11/4 10:51, Jason Wang wrote:
>
>
> On 11/03/2015 09:07 PM, zhanghailiang wrote:
>> Hi,
>>
>> On 2015/11/3 20:41, Yang Hongyang wrote:
>>> Can you explain why this is needed? Seems that this api hasn't
>>> been used in this series.
>>>
>>
>> We will call it in colo_init_filter_buffers() which is introduced in
>> patch 37,
>> We should remove the timers of filter-buffers which are configured by
>> users.
>> Or there will be two places to release packets when we enable colo ft,
>> one in timer callback,
>> the other one in COLO when we do checkpoint.
>>
>>
>> Thanks,
>> zhanghailiang
>
> Hi:
>
> Then you'd better explain this in commit log.
>

OK, will fix in next version, thanks.

> Thanks
>>
>>> On 2015年11月03日 19:56, zhanghailiang wrote:
>>>> Signed-off-by: zhanghailiang <zhang.zhanghailiang@huawei.com>
>>>> Cc: Jason Wang <jasowang@redhat.com>
>>>> ---
>>>> v10: new patch
>>>> ---
>>>>    include/net/filter.h |  1 +
>>>>    net/filter-buffer.c  | 17 +++++++++++++++++
>>>>    2 files changed, 18 insertions(+)
>>>>
>>>> diff --git a/include/net/filter.h b/include/net/filter.h
>>>> index 5a09607..4499d60 100644
>>>> --- a/include/net/filter.h
>>>> +++ b/include/net/filter.h
>>>> @@ -74,5 +74,6 @@ ssize_t qemu_netfilter_pass_to_next(NetClientState
>>>> *sender,
>>>>                                        int iovcnt,
>>>>                                        void *opaque);
>>>>    void filter_buffer_release_all(void);
>>>> +void  filter_buffer_del_all_timers(void);
>>>>
>>>>    #endif /* QEMU_NET_FILTER_H */
>>>> diff --git a/net/filter-buffer.c b/net/filter-buffer.c
>>>> index b344901..5f0ea70 100644
>>>> --- a/net/filter-buffer.c
>>>> +++ b/net/filter-buffer.c
>>>> @@ -178,6 +178,23 @@ void filter_buffer_release_all(void)
>>>>        qemu_foreach_netfilter(filter_buffer_release_packets, NULL,
>>>> NULL);
>>>>    }
>>>>
>>>> +static void filter_buffer_del_timer(NetFilterState *nf, void *opaque,
>>>> +                                    Error **errp)
>>>> +{
>>>> +    if (!strcmp(object_get_typename(OBJECT(nf)),
>>>> TYPE_FILTER_BUFFER)) {
>>>> +        FilterBufferState *s = FILTER_BUFFER(nf);
>>>> +
>>>> +        if (s->interval) {
>>>> +            timer_del(&s->release_timer);
>>>> +        }
>>>> +    }
>>>> +}
>>>> +
>>>> +void filter_buffer_del_all_timers(void)
>>>> +{
>>>> +    qemu_foreach_netfilter(filter_buffer_del_timer, NULL, NULL);
>>>> +}
>>>> +
>>>>    static void filter_buffer_init(Object *obj)
>>>>    {
>>>>        object_property_add(obj, "interval", "int",
>>>>
>>>
>>
>>
>
>
> .
>
diff mbox

Patch

diff --git a/include/net/filter.h b/include/net/filter.h
index 5a09607..4499d60 100644
--- a/include/net/filter.h
+++ b/include/net/filter.h
@@ -74,5 +74,6 @@  ssize_t qemu_netfilter_pass_to_next(NetClientState *sender,
                                     int iovcnt,
                                     void *opaque);
 void filter_buffer_release_all(void);
+void  filter_buffer_del_all_timers(void);
 
 #endif /* QEMU_NET_FILTER_H */
diff --git a/net/filter-buffer.c b/net/filter-buffer.c
index b344901..5f0ea70 100644
--- a/net/filter-buffer.c
+++ b/net/filter-buffer.c
@@ -178,6 +178,23 @@  void filter_buffer_release_all(void)
     qemu_foreach_netfilter(filter_buffer_release_packets, NULL, NULL);
 }
 
+static void filter_buffer_del_timer(NetFilterState *nf, void *opaque,
+                                    Error **errp)
+{
+    if (!strcmp(object_get_typename(OBJECT(nf)), TYPE_FILTER_BUFFER)) {
+        FilterBufferState *s = FILTER_BUFFER(nf);
+
+        if (s->interval) {
+            timer_del(&s->release_timer);
+        }
+    }
+}
+
+void filter_buffer_del_all_timers(void)
+{
+    qemu_foreach_netfilter(filter_buffer_del_timer, NULL, NULL);
+}
+
 static void filter_buffer_init(Object *obj)
 {
     object_property_add(obj, "interval", "int",