From patchwork Tue Jan 5 23:06:30 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Octavian Purdila X-Patchwork-Id: 42222 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id C62CBB6EF2 for ; Wed, 6 Jan 2010 10:10:01 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754655Ab0AEXJz (ORCPT ); Tue, 5 Jan 2010 18:09:55 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1754683Ab0AEXJz (ORCPT ); Tue, 5 Jan 2010 18:09:55 -0500 Received: from ixro-out-rtc.ixiacom.com ([92.87.192.98]:14437 "EHLO ixro-ex1.ixiacom.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1754255Ab0AEXJy (ORCPT ); Tue, 5 Jan 2010 18:09:54 -0500 Received: from localhost.localdomain ([10.205.15.12]) by ixro-ex1.ixiacom.com with Microsoft SMTPSVC(6.0.3790.3959); Wed, 6 Jan 2010 01:09:52 +0200 From: Octavian Purdila To: David Miller Cc: netdev@vger.kernel.org, Octavian Purdila Subject: [PATCH] tcp: update the netstamp_needed counter when cloning sockets Date: Wed, 6 Jan 2010 01:06:30 +0200 Message-Id: <1262732790-16053-1-git-send-email-opurdila@ixiacom.com> X-Mailer: git-send-email 1.5.6.5 X-OriginalArrivalTime: 05 Jan 2010 23:09:52.0877 (UTC) FILETIME=[301C31D0:01CA8E5C] Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This fixes a netstamp_needed accounting issue when the listen socket has SO_TIMESTAMP set: s = socket(AF_INET, SOCK_STREAM, 0); setsockopt(s, SOL_SOCKET, SO_TIMESTAMP, 1); -> netstamp_needed = 1 bind(s, ...); listen(s, ...); s2 = accept(s, ...); -> netstamp_needed = 1 close(s2); -> netstamp_needed = 0 close(s); -> netstamp_needed = -1 Signed-off-by: Octavian Purdila --- net/core/sock.c | 4 ++++ 1 files changed, 4 insertions(+), 0 deletions(-) diff --git a/net/core/sock.c b/net/core/sock.c index 76ff58d..e1f6f22 100644 --- a/net/core/sock.c +++ b/net/core/sock.c @@ -1205,6 +1205,10 @@ struct sock *sk_clone(const struct sock *sk, const gfp_t priority) if (newsk->sk_prot->sockets_allocated) percpu_counter_inc(newsk->sk_prot->sockets_allocated); + + if (sock_flag(newsk, SOCK_TIMESTAMP) || + sock_flag(newsk, SOCK_TIMESTAMPING_RX_SOFTWARE)) + net_enable_timestamp(); } out: return newsk;