Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'master' of git://1984.lsi.us.es/nf

+25 -10
+1
include/net/netfilter/nf_conntrack_ecache.h
··· 18 18 u16 ctmask; /* bitmask of ct events to be delivered */ 19 19 u16 expmask; /* bitmask of expect events to be delivered */ 20 20 u32 pid; /* netlink pid of destroyer */ 21 + struct timer_list timeout; 21 22 }; 22 23 23 24 static inline struct nf_conntrack_ecache *
+4 -1
net/ipv4/netfilter/nf_nat_sip.c
··· 502 502 ret = nf_ct_expect_related(rtcp_exp); 503 503 if (ret == 0) 504 504 break; 505 - else if (ret != -EBUSY) { 505 + else if (ret == -EBUSY) { 506 + nf_ct_unexpect_related(rtp_exp); 507 + continue; 508 + } else if (ret < 0) { 506 509 nf_ct_unexpect_related(rtp_exp); 507 510 port = 0; 508 511 break;
+3 -1
net/netfilter/ipvs/ip_vs_ctl.c
··· 1171 1171 goto out_err; 1172 1172 } 1173 1173 svc->stats.cpustats = alloc_percpu(struct ip_vs_cpu_stats); 1174 - if (!svc->stats.cpustats) 1174 + if (!svc->stats.cpustats) { 1175 + ret = -ENOMEM; 1175 1176 goto out_err; 1177 + } 1176 1178 1177 1179 /* I'm the first user of the service */ 1178 1180 atomic_set(&svc->usecnt, 0);
+11 -5
net/netfilter/nf_conntrack_core.c
··· 249 249 { 250 250 struct nf_conn *ct = (void *)ul_conntrack; 251 251 struct net *net = nf_ct_net(ct); 252 + struct nf_conntrack_ecache *ecache = nf_ct_ecache_find(ct); 253 + 254 + BUG_ON(ecache == NULL); 252 255 253 256 if (nf_conntrack_event(IPCT_DESTROY, ct) < 0) { 254 257 /* bad luck, let's retry again */ 255 - ct->timeout.expires = jiffies + 258 + ecache->timeout.expires = jiffies + 256 259 (random32() % net->ct.sysctl_events_retry_timeout); 257 - add_timer(&ct->timeout); 260 + add_timer(&ecache->timeout); 258 261 return; 259 262 } 260 263 /* we've got the event delivered, now it's dying */ ··· 271 268 void nf_ct_insert_dying_list(struct nf_conn *ct) 272 269 { 273 270 struct net *net = nf_ct_net(ct); 271 + struct nf_conntrack_ecache *ecache = nf_ct_ecache_find(ct); 272 + 273 + BUG_ON(ecache == NULL); 274 274 275 275 /* add this conntrack to the dying list */ 276 276 spin_lock_bh(&nf_conntrack_lock); ··· 281 275 &net->ct.dying); 282 276 spin_unlock_bh(&nf_conntrack_lock); 283 277 /* set a new timer to retry event delivery */ 284 - setup_timer(&ct->timeout, death_by_event, (unsigned long)ct); 285 - ct->timeout.expires = jiffies + 278 + setup_timer(&ecache->timeout, death_by_event, (unsigned long)ct); 279 + ecache->timeout.expires = jiffies + 286 280 (random32() % net->ct.sysctl_events_retry_timeout); 287 - add_timer(&ct->timeout); 281 + add_timer(&ecache->timeout); 288 282 } 289 283 EXPORT_SYMBOL_GPL(nf_ct_insert_dying_list); 290 284
+2 -1
net/netfilter/nf_conntrack_netlink.c
··· 2790 2790 goto err_unreg_subsys; 2791 2791 } 2792 2792 2793 - if (register_pernet_subsys(&ctnetlink_net_ops)) { 2793 + ret = register_pernet_subsys(&ctnetlink_net_ops); 2794 + if (ret < 0) { 2794 2795 pr_err("ctnetlink_init: cannot register pernet operations\n"); 2795 2796 goto err_unreg_exp_subsys; 2796 2797 }