diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-12-28 15:49:40 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-12-28 15:49:40 -0500 |
commit | 0191b625ca5a46206d2fb862bb08f36f2fcb3b31 (patch) | |
tree | 454d1842b1833d976da62abcbd5c47521ebe9bd7 /net/xfrm/xfrm_output.c | |
parent | 54a696bd07c14d3b1192d03ce7269bc59b45209a (diff) | |
parent | eb56092fc168bf5af199d47af50c0d84a96db898 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6: (1429 commits)
net: Allow dependancies of FDDI & Tokenring to be modular.
igb: Fix build warning when DCA is disabled.
net: Fix warning fallout from recent NAPI interface changes.
gro: Fix potential use after free
sfc: If AN is enabled, always read speed/duplex from the AN advertising bits
sfc: When disabling the NIC, close the device rather than unregistering it
sfc: SFT9001: Add cable diagnostics
sfc: Add support for multiple PHY self-tests
sfc: Merge top-level functions for self-tests
sfc: Clean up PHY mode management in loopback self-test
sfc: Fix unreliable link detection in some loopback modes
sfc: Generate unique names for per-NIC workqueues
802.3ad: use standard ethhdr instead of ad_header
802.3ad: generalize out mac address initializer
802.3ad: initialize ports LACPDU from const initializer
802.3ad: remove typedef around ad_system
802.3ad: turn ports is_individual into a bool
802.3ad: turn ports is_enabled into a bool
802.3ad: make ntt bool
ixgbe: Fix set_ringparam in ixgbe to use the same memory pools.
...
Fixed trivial IPv4/6 address printing conflicts in fs/cifs/connect.c due
to the conversion to %pI (in this networking merge) and the addition of
doing IPv6 addresses (from the earlier merge of CIFS).
Diffstat (limited to 'net/xfrm/xfrm_output.c')
-rw-r--r-- | net/xfrm/xfrm_output.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/net/xfrm/xfrm_output.c b/net/xfrm/xfrm_output.c index dc50f1e71f76..c235597ba8dd 100644 --- a/net/xfrm/xfrm_output.c +++ b/net/xfrm/xfrm_output.c | |||
@@ -41,6 +41,7 @@ static int xfrm_output_one(struct sk_buff *skb, int err) | |||
41 | { | 41 | { |
42 | struct dst_entry *dst = skb->dst; | 42 | struct dst_entry *dst = skb->dst; |
43 | struct xfrm_state *x = dst->xfrm; | 43 | struct xfrm_state *x = dst->xfrm; |
44 | struct net *net = xs_net(x); | ||
44 | 45 | ||
45 | if (err <= 0) | 46 | if (err <= 0) |
46 | goto resume; | 47 | goto resume; |
@@ -48,33 +49,33 @@ static int xfrm_output_one(struct sk_buff *skb, int err) | |||
48 | do { | 49 | do { |
49 | err = xfrm_state_check_space(x, skb); | 50 | err = xfrm_state_check_space(x, skb); |
50 | if (err) { | 51 | if (err) { |
51 | XFRM_INC_STATS(LINUX_MIB_XFRMOUTERROR); | 52 | XFRM_INC_STATS(net, LINUX_MIB_XFRMOUTERROR); |
52 | goto error_nolock; | 53 | goto error_nolock; |
53 | } | 54 | } |
54 | 55 | ||
55 | err = x->outer_mode->output(x, skb); | 56 | err = x->outer_mode->output(x, skb); |
56 | if (err) { | 57 | if (err) { |
57 | XFRM_INC_STATS(LINUX_MIB_XFRMOUTSTATEMODEERROR); | 58 | XFRM_INC_STATS(net, LINUX_MIB_XFRMOUTSTATEMODEERROR); |
58 | goto error_nolock; | 59 | goto error_nolock; |
59 | } | 60 | } |
60 | 61 | ||
61 | spin_lock_bh(&x->lock); | 62 | spin_lock_bh(&x->lock); |
62 | err = xfrm_state_check_expire(x); | 63 | err = xfrm_state_check_expire(x); |
63 | if (err) { | 64 | if (err) { |
64 | XFRM_INC_STATS(LINUX_MIB_XFRMOUTSTATEEXPIRED); | 65 | XFRM_INC_STATS(net, LINUX_MIB_XFRMOUTSTATEEXPIRED); |
65 | goto error; | 66 | goto error; |
66 | } | 67 | } |
67 | 68 | ||
68 | if (x->type->flags & XFRM_TYPE_REPLAY_PROT) { | 69 | if (x->type->flags & XFRM_TYPE_REPLAY_PROT) { |
69 | XFRM_SKB_CB(skb)->seq.output = ++x->replay.oseq; | 70 | XFRM_SKB_CB(skb)->seq.output = ++x->replay.oseq; |
70 | if (unlikely(x->replay.oseq == 0)) { | 71 | if (unlikely(x->replay.oseq == 0)) { |
71 | XFRM_INC_STATS(LINUX_MIB_XFRMOUTSTATESEQERROR); | 72 | XFRM_INC_STATS(net, LINUX_MIB_XFRMOUTSTATESEQERROR); |
72 | x->replay.oseq--; | 73 | x->replay.oseq--; |
73 | xfrm_audit_state_replay_overflow(x, skb); | 74 | xfrm_audit_state_replay_overflow(x, skb); |
74 | err = -EOVERFLOW; | 75 | err = -EOVERFLOW; |
75 | goto error; | 76 | goto error; |
76 | } | 77 | } |
77 | if (xfrm_aevent_is_on()) | 78 | if (xfrm_aevent_is_on(net)) |
78 | xfrm_replay_notify(x, XFRM_REPLAY_UPDATE); | 79 | xfrm_replay_notify(x, XFRM_REPLAY_UPDATE); |
79 | } | 80 | } |
80 | 81 | ||
@@ -89,12 +90,12 @@ static int xfrm_output_one(struct sk_buff *skb, int err) | |||
89 | 90 | ||
90 | resume: | 91 | resume: |
91 | if (err) { | 92 | if (err) { |
92 | XFRM_INC_STATS(LINUX_MIB_XFRMOUTSTATEPROTOERROR); | 93 | XFRM_INC_STATS(net, LINUX_MIB_XFRMOUTSTATEPROTOERROR); |
93 | goto error_nolock; | 94 | goto error_nolock; |
94 | } | 95 | } |
95 | 96 | ||
96 | if (!(skb->dst = dst_pop(dst))) { | 97 | if (!(skb->dst = dst_pop(dst))) { |
97 | XFRM_INC_STATS(LINUX_MIB_XFRMOUTERROR); | 98 | XFRM_INC_STATS(net, LINUX_MIB_XFRMOUTERROR); |
98 | err = -EHOSTUNREACH; | 99 | err = -EHOSTUNREACH; |
99 | goto error_nolock; | 100 | goto error_nolock; |
100 | } | 101 | } |
@@ -178,6 +179,7 @@ static int xfrm_output_gso(struct sk_buff *skb) | |||
178 | 179 | ||
179 | int xfrm_output(struct sk_buff *skb) | 180 | int xfrm_output(struct sk_buff *skb) |
180 | { | 181 | { |
182 | struct net *net = dev_net(skb->dst->dev); | ||
181 | int err; | 183 | int err; |
182 | 184 | ||
183 | if (skb_is_gso(skb)) | 185 | if (skb_is_gso(skb)) |
@@ -186,7 +188,7 @@ int xfrm_output(struct sk_buff *skb) | |||
186 | if (skb->ip_summed == CHECKSUM_PARTIAL) { | 188 | if (skb->ip_summed == CHECKSUM_PARTIAL) { |
187 | err = skb_checksum_help(skb); | 189 | err = skb_checksum_help(skb); |
188 | if (err) { | 190 | if (err) { |
189 | XFRM_INC_STATS(LINUX_MIB_XFRMOUTERROR); | 191 | XFRM_INC_STATS(net, LINUX_MIB_XFRMOUTERROR); |
190 | kfree_skb(skb); | 192 | kfree_skb(skb); |
191 | return err; | 193 | return err; |
192 | } | 194 | } |