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

inet: inet_twsk_deschedule factorization

inet_twsk_deschedule() calls are followed by inet_twsk_put().

Only particular case is in inet_twsk_purge() but there is no point
to defer the inet_twsk_put() after re-enabling BH.

Lets rename inet_twsk_deschedule() to inet_twsk_deschedule_put()
and move the inet_twsk_put() inside.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Eric Dumazet and committed by
David S. Miller
dbe7faa4 fc01538f

+19 -26
+1 -1
include/net/inet_timewait_sock.h
··· 111 111 struct inet_hashinfo *hashinfo); 112 112 113 113 void inet_twsk_schedule(struct inet_timewait_sock *tw, const int timeo); 114 - void inet_twsk_deschedule(struct inet_timewait_sock *tw); 114 + void inet_twsk_deschedule_put(struct inet_timewait_sock *tw); 115 115 116 116 void inet_twsk_purge(struct inet_hashinfo *hashinfo, 117 117 struct inet_timewait_death_row *twdr, int family);
+3 -6
net/ipv4/inet_hashtables.c
··· 380 380 *twp = tw; 381 381 } else if (tw) { 382 382 /* Silly. Should hash-dance instead... */ 383 - inet_twsk_deschedule(tw); 384 - inet_twsk_put(tw); 383 + inet_twsk_deschedule_put(tw); 385 384 } 386 385 return 0; 387 386 ··· 557 558 inet_twsk_bind_unhash(tw, hinfo); 558 559 spin_unlock(&head->lock); 559 560 560 - if (tw) { 561 - inet_twsk_deschedule(tw); 562 - inet_twsk_put(tw); 563 - } 561 + if (tw) 562 + inet_twsk_deschedule_put(tw); 564 563 565 564 ret = 0; 566 565 goto out;
+8 -5
net/ipv4/inet_timewait_sock.c
··· 205 205 * tcp_input.c to verify this. 206 206 */ 207 207 208 - /* This is for handling early-kills of TIME_WAIT sockets. */ 209 - void inet_twsk_deschedule(struct inet_timewait_sock *tw) 208 + /* This is for handling early-kills of TIME_WAIT sockets. 209 + * Warning : consume reference. 210 + * Caller should not access tw anymore. 211 + */ 212 + void inet_twsk_deschedule_put(struct inet_timewait_sock *tw) 210 213 { 211 214 if (del_timer_sync(&tw->tw_timer)) 212 215 inet_twsk_kill(tw); 216 + inet_twsk_put(tw); 213 217 } 214 - EXPORT_SYMBOL(inet_twsk_deschedule); 218 + EXPORT_SYMBOL(inet_twsk_deschedule_put); 215 219 216 220 void inet_twsk_schedule(struct inet_timewait_sock *tw, const int timeo) 217 221 { ··· 285 281 286 282 rcu_read_unlock(); 287 283 local_bh_disable(); 288 - inet_twsk_deschedule(tw); 284 + inet_twsk_deschedule_put(tw); 289 285 local_bh_enable(); 290 - inet_twsk_put(tw); 291 286 goto restart_rcu; 292 287 } 293 288 /* If the nulls value we got at the end of this lookup is
+1 -2
net/ipv4/tcp_ipv4.c
··· 1683 1683 iph->daddr, th->dest, 1684 1684 inet_iif(skb)); 1685 1685 if (sk2) { 1686 - inet_twsk_deschedule(inet_twsk(sk)); 1687 - inet_twsk_put(inet_twsk(sk)); 1686 + inet_twsk_deschedule_put(inet_twsk(sk)); 1688 1687 sk = sk2; 1689 1688 goto process; 1690 1689 }
+2 -4
net/ipv4/tcp_minisocks.c
··· 147 147 if (!th->fin || 148 148 TCP_SKB_CB(skb)->end_seq != tcptw->tw_rcv_nxt + 1) { 149 149 kill_with_rst: 150 - inet_twsk_deschedule(tw); 151 - inet_twsk_put(tw); 150 + inet_twsk_deschedule_put(tw); 152 151 return TCP_TW_RST; 153 152 } 154 153 ··· 197 198 */ 198 199 if (sysctl_tcp_rfc1337 == 0) { 199 200 kill: 200 - inet_twsk_deschedule(tw); 201 - inet_twsk_put(tw); 201 + inet_twsk_deschedule_put(tw); 202 202 return TCP_TW_SUCCESS; 203 203 } 204 204 }
+1 -2
net/ipv6/inet6_hashtables.c
··· 243 243 *twp = tw; 244 244 } else if (tw) { 245 245 /* Silly. Should hash-dance instead... */ 246 - inet_twsk_deschedule(tw); 247 - inet_twsk_put(tw); 246 + inet_twsk_deschedule_put(tw); 248 247 } 249 248 return 0; 250 249
+1 -2
net/ipv6/tcp_ipv6.c
··· 1481 1481 ntohs(th->dest), tcp_v6_iif(skb)); 1482 1482 if (sk2) { 1483 1483 struct inet_timewait_sock *tw = inet_twsk(sk); 1484 - inet_twsk_deschedule(tw); 1485 - inet_twsk_put(tw); 1484 + inet_twsk_deschedule_put(tw); 1486 1485 sk = sk2; 1487 1486 tcp_v6_restore_cb(skb); 1488 1487 goto process;
+2 -4
net/netfilter/xt_TPROXY.c
··· 272 272 hp->source, lport ? lport : hp->dest, 273 273 skb->dev, NFT_LOOKUP_LISTENER); 274 274 if (sk2) { 275 - inet_twsk_deschedule(inet_twsk(sk)); 276 - inet_twsk_put(inet_twsk(sk)); 275 + inet_twsk_deschedule_put(inet_twsk(sk)); 277 276 sk = sk2; 278 277 } 279 278 } ··· 436 437 tgi->lport ? tgi->lport : hp->dest, 437 438 skb->dev, NFT_LOOKUP_LISTENER); 438 439 if (sk2) { 439 - inet_twsk_deschedule(inet_twsk(sk)); 440 - inet_twsk_put(inet_twsk(sk)); 440 + inet_twsk_deschedule_put(inet_twsk(sk)); 441 441 sk = sk2; 442 442 } 443 443 }