From 0beda28c3ad02d22a375b7ebd90a86cf77b2315e Mon Sep 17 00:00:00 2001 From: Dmitry Popov Date: Thu, 29 Jul 2010 01:59:36 +0000 Subject: [PATCH] --- yaml --- r: 204032 b: refs/heads/master c: a3bdb549e30e7a263f7a589747c40e9c50110315 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/net/ipv4/tcp.c | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index f26cd488e641..75946a2773bf 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: eeaf61d8891f9c9ed12c1a667e72bf83f0857954 +refs/heads/master: a3bdb549e30e7a263f7a589747c40e9c50110315 diff --git a/trunk/net/ipv4/tcp.c b/trunk/net/ipv4/tcp.c index 65afeaec15b7..c259714c5596 100644 --- a/trunk/net/ipv4/tcp.c +++ b/trunk/net/ipv4/tcp.c @@ -2176,6 +2176,8 @@ static int do_tcp_setsockopt(struct sock *sk, int level, GFP_KERNEL); if (cvp == NULL) return -ENOMEM; + + kref_init(&cvp->kref); } lock_sock(sk); tp->rx_opt.cookie_in_always = @@ -2190,12 +2192,11 @@ static int do_tcp_setsockopt(struct sock *sk, int level, */ kref_put(&tp->cookie_values->kref, tcp_cookie_values_release); - kref_init(&cvp->kref); - tp->cookie_values = cvp; } else { cvp = tp->cookie_values; } } + if (cvp != NULL) { cvp->cookie_desired = ctd.tcpct_cookie_desired; @@ -2209,6 +2210,8 @@ static int do_tcp_setsockopt(struct sock *sk, int level, cvp->s_data_desired = ctd.tcpct_s_data_desired; cvp->s_data_constant = 0; /* false */ } + + tp->cookie_values = cvp; } release_sock(sk); return err;