Initial Contribution
msm-2.6.38: tag AU_LINUX_ANDROID_GINGERBREAD.02.03.04.00.142 Signed-off-by: Bryan Huntsman <bryanh@codeaurora.org>
This commit is contained in:
@@ -1955,6 +1955,49 @@ void tcp_v4_destroy_sock(struct sock *sk)
|
||||
}
|
||||
EXPORT_SYMBOL(tcp_v4_destroy_sock);
|
||||
|
||||
/*
|
||||
* tcp_v4_nuke_addr - destroy all sockets on the given local address
|
||||
*/
|
||||
void tcp_v4_nuke_addr(__u32 saddr)
|
||||
{
|
||||
unsigned int bucket;
|
||||
|
||||
for (bucket = 0; bucket < tcp_hashinfo.ehash_mask; bucket++) {
|
||||
struct hlist_nulls_node *node;
|
||||
struct sock *sk;
|
||||
spinlock_t *lock = inet_ehash_lockp(&tcp_hashinfo, bucket);
|
||||
|
||||
restart:
|
||||
spin_lock_bh(lock);
|
||||
sk_nulls_for_each(sk, node, &tcp_hashinfo.ehash[bucket].chain) {
|
||||
struct inet_sock *inet = inet_sk(sk);
|
||||
|
||||
if (inet->inet_rcv_saddr != saddr)
|
||||
continue;
|
||||
if (sysctl_ip_dynaddr && sk->sk_state == TCP_SYN_SENT)
|
||||
continue;
|
||||
if (sock_flag(sk, SOCK_DEAD))
|
||||
continue;
|
||||
|
||||
sock_hold(sk);
|
||||
spin_unlock_bh(lock);
|
||||
|
||||
local_bh_disable();
|
||||
bh_lock_sock(sk);
|
||||
sk->sk_err = ETIMEDOUT;
|
||||
sk->sk_error_report(sk);
|
||||
|
||||
tcp_done(sk);
|
||||
bh_unlock_sock(sk);
|
||||
local_bh_enable();
|
||||
sock_put(sk);
|
||||
|
||||
goto restart;
|
||||
}
|
||||
spin_unlock_bh(lock);
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PROC_FS
|
||||
/* Proc filesystem TCP sock list dumping. */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user