Message ID | 1491564336-44483-1-git-send-email-gfree.wind@foxmail.com |
---|---|
State | Not Applicable |
Delegated to: | Pablo Neira |
Headers | show |
On Fri, Apr 07, 2017 at 07:25:36PM +0800, gfree.wind@foxmail.com wrote: > From: Gao Feng <fgao@ikuai8.com> > > 1. Return one error when try to delete all timeouts and meet one erorr; > 2. Delete the condition block when fail to delete specified timeout. > It is more clear that it would stop the loop when find one matched timeout. > > Signed-off-by: Gao Feng <fgao@ikuai8.com> > --- > net/netfilter/nfnetlink_cttimeout.c | 15 +++++++++------ > 1 file changed, 9 insertions(+), 6 deletions(-) > > diff --git a/net/netfilter/nfnetlink_cttimeout.c b/net/netfilter/nfnetlink_cttimeout.c > index baa75f3..220847a 100644 > --- a/net/netfilter/nfnetlink_cttimeout.c > +++ b/net/netfilter/nfnetlink_cttimeout.c > @@ -361,11 +361,17 @@ static int cttimeout_del_timeout(struct net *net, struct sock *ctnl, > char *name; > > if (!cda[CTA_TIMEOUT_NAME]) { > + int cur_ret; > + > + ret = 0; > list_for_each_entry_safe(cur, tmp, &net->nfct_timeout_list, > - head) > - ctnl_timeout_try_del(net, cur); This code ignores ctnl_timeout_try_del() on purpose, to implement the flush operation. -- To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/net/netfilter/nfnetlink_cttimeout.c b/net/netfilter/nfnetlink_cttimeout.c index baa75f3..220847a 100644 --- a/net/netfilter/nfnetlink_cttimeout.c +++ b/net/netfilter/nfnetlink_cttimeout.c @@ -361,11 +361,17 @@ static int cttimeout_del_timeout(struct net *net, struct sock *ctnl, char *name; if (!cda[CTA_TIMEOUT_NAME]) { + int cur_ret; + + ret = 0; list_for_each_entry_safe(cur, tmp, &net->nfct_timeout_list, - head) - ctnl_timeout_try_del(net, cur); + head) { + cur_ret = ctnl_timeout_try_del(net, cur); + if (cur_ret && !ret) + ret = cur_ret; + } - return 0; + return ret; } name = nla_data(cda[CTA_TIMEOUT_NAME]); @@ -374,9 +380,6 @@ static int cttimeout_del_timeout(struct net *net, struct sock *ctnl, continue; ret = ctnl_timeout_try_del(net, cur); - if (ret < 0) - return ret; - break; } return ret;