Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 6280
b: refs/heads/master
c: 9f1d260
h: refs/heads/master
v: v3
  • Loading branch information
Arnaldo Carvalho de Melo authored and David S. Miller committed Aug 29, 2005
1 parent 1802122 commit 5afe4c0
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 16 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 3f421baa4720b708022f8bcc52a61e5cd6f10bf8
refs/heads/master: 9f1d2604c71498579609b1532fedc5a89276bb00
4 changes: 4 additions & 0 deletions trunk/include/net/inet_connection_sock.h
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,10 @@ static inline struct inet_connection_sock *inet_csk(const struct sock *sk)
return (struct inet_connection_sock *)sk;
}

extern struct sock *inet_csk_clone(struct sock *sk,
const struct request_sock *req,
const unsigned int __nocast priority);

enum inet_csk_ack_state_t {
ICSK_ACK_SCHED = 1,
ICSK_ACK_TIMER = 2,
Expand Down
25 changes: 25 additions & 0 deletions trunk/net/ipv4/inet_connection_sock.c
Original file line number Diff line number Diff line change
Expand Up @@ -399,3 +399,28 @@ void inet_csk_reqsk_queue_hash_add(struct sock *sk, struct request_sock *req,
}

EXPORT_SYMBOL_GPL(inet_csk_reqsk_queue_hash_add);

struct sock *inet_csk_clone(struct sock *sk, const struct request_sock *req,
const unsigned int __nocast priority)
{
struct sock *newsk = sk_clone(sk, priority);

if (newsk != NULL) {
struct inet_connection_sock *newicsk = inet_csk(newsk);

newsk->sk_state = TCP_SYN_RECV;
newicsk->icsk_bind_hash = NULL;

inet_sk(newsk)->dport = inet_rsk(req)->rmt_port;
newsk->sk_write_space = sk_stream_write_space;

newicsk->icsk_retransmits = 0;
newicsk->icsk_backoff = 0;

/* Deinitialize accept_queue to trap illegal accesses. */
memset(&newicsk->icsk_accept_queue, 0, sizeof(newicsk->icsk_accept_queue));
}
return newsk;
}

EXPORT_SYMBOL_GPL(inet_csk_clone);
18 changes: 3 additions & 15 deletions trunk/net/ipv4/tcp_minisocks.c
Original file line number Diff line number Diff line change
Expand Up @@ -600,22 +600,14 @@ void tcp_twcal_tick(unsigned long dummy)
*/
struct sock *tcp_create_openreq_child(struct sock *sk, struct request_sock *req, struct sk_buff *skb)
{
struct sock *newsk = sk_clone(sk, GFP_ATOMIC);
struct sock *newsk = inet_csk_clone(sk, req, GFP_ATOMIC);

if (newsk != NULL) {
struct inet_request_sock *ireq = inet_rsk(req);
const struct inet_request_sock *ireq = inet_rsk(req);
struct tcp_request_sock *treq = tcp_rsk(req);
struct inet_sock *newinet = inet_sk(newsk);
struct inet_connection_sock *newicsk = inet_csk(newsk);
struct inet_connection_sock *newicsk = inet_csk(sk);
struct tcp_sock *newtp;

newsk->sk_state = TCP_SYN_RECV;
newicsk->icsk_bind_hash = NULL;

/* Clone the TCP header template */
newinet->dport = ireq->rmt_port;
newsk->sk_write_space = sk_stream_write_space;

/* Now setup tcp_sock */
newtp = tcp_sk(newsk);
newtp->pred_flags = 0;
Expand All @@ -626,8 +618,6 @@ struct sock *tcp_create_openreq_child(struct sock *sk, struct request_sock *req,

tcp_init_wl(newtp, treq->snt_isn, treq->rcv_isn);

newicsk->icsk_retransmits = 0;
newicsk->icsk_backoff = 0;
newtp->srtt = 0;
newtp->mdev = TCP_TIMEOUT_INIT;
newicsk->icsk_rto = TCP_TIMEOUT_INIT;
Expand Down Expand Up @@ -668,8 +658,6 @@ struct sock *tcp_create_openreq_child(struct sock *sk, struct request_sock *req,
newtp->probes_out = 0;
newtp->rx_opt.num_sacks = 0;
newtp->urg_data = 0;
/* Deinitialize accept_queue to trap illegal accesses. */
memset(&newicsk->icsk_accept_queue, 0, sizeof(newicsk->icsk_accept_queue));

if (sock_flag(newsk, SOCK_KEEPOPEN))
inet_csk_reset_keepalive_timer(newsk,
Expand Down

0 comments on commit 5afe4c0

Please sign in to comment.