X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=net%2Fipv6%2Fxfrm6_state.c;h=d98b92d15ea6a8f53788c967c2a291d09185ad4e;hb=9bf4aaab3e101692164d49b7ca357651eb691cb6;hp=c00c8ef25d83e44ae8d48ebf99869f908938fd5c;hpb=5273a3df6485dc2ad6aa7ddd441b9a21970f003b;p=linux-2.6.git diff --git a/net/ipv6/xfrm6_state.c b/net/ipv6/xfrm6_state.c index c00c8ef25..d98b92d15 100644 --- a/net/ipv6/xfrm6_state.c +++ b/net/ipv6/xfrm6_state.c @@ -16,7 +16,7 @@ #include #include -extern struct xfrm_state_afinfo xfrm6_state_afinfo; +static struct xfrm_state_afinfo xfrm6_state_afinfo; static void __xfrm6_init_tempsel(struct xfrm_state *x, struct flowi *fl, @@ -81,18 +81,13 @@ __xfrm6_find_acq(u8 mode, u32 reqid, u8 proto, proto == x->id.proto && !ipv6_addr_cmp((struct in6_addr *)saddr, (struct in6_addr *)x->props.saddr.a6) && reqid == x->props.reqid && - x->km.state == XFRM_STATE_ACQ) { - if (!x0) - x0 = x; - if (x->id.spi) - continue; + x->km.state == XFRM_STATE_ACQ && + !x->id.spi) { x0 = x; break; } } - if (x0) { - xfrm_state_hold(x0); - } else if (create && (x0 = xfrm_state_alloc()) != NULL) { + if (!x0 && create && (x0 = xfrm_state_alloc()) != NULL) { ipv6_addr_copy((struct in6_addr *)x0->sel.daddr.a6, (struct in6_addr *)daddr); ipv6_addr_copy((struct in6_addr *)x0->sel.saddr.a6, @@ -110,11 +105,14 @@ __xfrm6_find_acq(u8 mode, u32 reqid, u8 proto, x0->props.reqid = reqid; x0->lft.hard_add_expires_seconds = XFRM_ACQ_EXPIRES; xfrm_state_hold(x0); - mod_timer(&x0->timer, jiffies + XFRM_ACQ_EXPIRES*HZ); + x0->timer.expires = jiffies + XFRM_ACQ_EXPIRES*HZ; + add_timer(&x0->timer); xfrm_state_hold(x0); list_add_tail(&x0->bydst, xfrm6_state_afinfo.state_bydst+h); wake_up(&km_waitq); } + if (x0) + xfrm_state_hold(x0); return x0; }