From patchwork Wed Mar 31 10:17:03 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Timo Teras X-Patchwork-Id: 49118 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 B1CC6B7E76 for ; Wed, 31 Mar 2010 21:17:33 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933201Ab0CaKR1 (ORCPT ); Wed, 31 Mar 2010 06:17:27 -0400 Received: from mail-ew0-f220.google.com ([209.85.219.220]:57950 "EHLO mail-ew0-f220.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933195Ab0CaKRZ (ORCPT ); Wed, 31 Mar 2010 06:17:25 -0400 Received: by mail-ew0-f220.google.com with SMTP id 20so1817145ewy.1 for ; Wed, 31 Mar 2010 03:17:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:sender:from:to:cc:subject :date:message-id:x-mailer:in-reply-to:references; bh=DN+nyU9MSBEeNZbGDnYGaua4zUNHh4Gv5PmLNaryb9Y=; b=XvAFqT+0h6NdpEoxRv59zfZ2ixjq1FADenmszTmY1iadGpQ0xPdx5gqW1TvO6PC1Jx q3z1+C/gL+/+Y3JuQcg+N0xThGA7E50u9TP45vhY1josxSlmvaq9kpW+h0uG3LhwAdEd Qqqi6cTtKLTJ9y0UDS55xbhH4jA5wd7JCR7Z8= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=sender:from:to:cc:subject:date:message-id:x-mailer:in-reply-to :references; b=b+UgDXk2NzBI2sH+AWs0YyS8JxrptzNa/s7rLjDYo8c90/FHoGb2lXXikzKwIBFs+g UyiPni0K7fieZ+1IITfRFcS1s4K9YD8GaqpBcRmxCFwhH5IXxx9DLG3snX5v+L+Ej4ll HF3x1rTdalkWNK48mklvMaZCT+19EeMQlRx20= Received: by 10.213.65.11 with SMTP id g11mr4331791ebi.17.1270030644808; Wed, 31 Mar 2010 03:17:24 -0700 (PDT) Received: from localhost.localdomain (letku109.adsl.netsonic.fi [194.29.195.109]) by mx.google.com with ESMTPS id 16sm3592282ewy.11.2010.03.31.03.17.20 (version=SSLv3 cipher=RC4-MD5); Wed, 31 Mar 2010 03:17:23 -0700 (PDT) From: Timo Teras To: netdev@vger.kernel.org Cc: Herbert Xu , Timo Teras Subject: [PATCH 1/4] xfrm: increment genid before bumping state genids Date: Wed, 31 Mar 2010 13:17:03 +0300 Message-Id: <1270030626-16687-3-git-send-email-timo.teras@iki.fi> X-Mailer: git-send-email 1.6.3.3 In-Reply-To: <1270030626-16687-1-git-send-email-timo.teras@iki.fi> References: <1270030626-16687-1-git-send-email-timo.teras@iki.fi> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org __xfrm_state_bump_genids() is used to update the genid of all matching xfrm_state's, so any bundle using the state would get refreshed with the newly inserted state. However, since __xfrm_state_bump_genids() is called before the __xfrm_state_insert() which actually bumps the genid counter, it is possible that the genid was not updated at all (if there was no state inserts previously). This is fixed by moving the genid incrementation to __xfrm_state_bump_genids() so the older states are guaranteed to get different genid. Signed-off-by: Timo Teras --- net/xfrm/xfrm_state.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-) diff --git a/net/xfrm/xfrm_state.c b/net/xfrm/xfrm_state.c index 17d5b96..b4efc28 100644 --- a/net/xfrm/xfrm_state.c +++ b/net/xfrm/xfrm_state.c @@ -923,7 +923,7 @@ static void __xfrm_state_insert(struct xfrm_state *x) struct net *net = xs_net(x); unsigned int h; - x->genid = ++xfrm_state_genid; + x->genid = xfrm_state_genid; list_add(&x->km.all, &net->xfrm.state_all); @@ -963,6 +963,7 @@ static void __xfrm_state_bump_genids(struct xfrm_state *xnew) unsigned int h; u32 mark = xnew->mark.v & xnew->mark.m; + xfrm_state_genid++; h = xfrm_dst_hash(net, &xnew->id.daddr, &xnew->props.saddr, reqid, family); hlist_for_each_entry(x, entry, net->xfrm.state_bydst+h, bydst) { if (x->props.family == family &&