Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
ade6648b
Commit
ade6648b
authored
Aug 17, 2005
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
parents
2ad56496
fad87aca
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
27 additions
and
23 deletions
+27
-23
net/ipv4/tcp_output.c
net/ipv4/tcp_output.c
+20
-19
net/ipv6/ip6_input.c
net/ipv6/ip6_input.c
+5
-4
net/ipv6/raw.c
net/ipv6/raw.c
+2
-0
No files found.
net/ipv4/tcp_output.c
View file @
ade6648b
...
@@ -861,7 +861,8 @@ static int tso_fragment(struct sock *sk, struct sk_buff *skb, unsigned int len,
...
@@ -861,7 +861,8 @@ static int tso_fragment(struct sock *sk, struct sk_buff *skb, unsigned int len,
u16
flags
;
u16
flags
;
/* All of a TSO frame must be composed of paged data. */
/* All of a TSO frame must be composed of paged data. */
BUG_ON
(
skb
->
len
!=
skb
->
data_len
);
if
(
skb
->
len
!=
skb
->
data_len
)
return
tcp_fragment
(
sk
,
skb
,
len
,
mss_now
);
buff
=
sk_stream_alloc_pskb
(
sk
,
0
,
0
,
GFP_ATOMIC
);
buff
=
sk_stream_alloc_pskb
(
sk
,
0
,
0
,
GFP_ATOMIC
);
if
(
unlikely
(
buff
==
NULL
))
if
(
unlikely
(
buff
==
NULL
))
...
@@ -974,6 +975,8 @@ static int tcp_write_xmit(struct sock *sk, unsigned int mss_now, int nonagle)
...
@@ -974,6 +975,8 @@ static int tcp_write_xmit(struct sock *sk, unsigned int mss_now, int nonagle)
sent_pkts
=
0
;
sent_pkts
=
0
;
while
((
skb
=
sk
->
sk_send_head
))
{
while
((
skb
=
sk
->
sk_send_head
))
{
unsigned
int
limit
;
tso_segs
=
tcp_init_tso_segs
(
sk
,
skb
,
mss_now
);
tso_segs
=
tcp_init_tso_segs
(
sk
,
skb
,
mss_now
);
BUG_ON
(
!
tso_segs
);
BUG_ON
(
!
tso_segs
);
...
@@ -994,9 +997,10 @@ static int tcp_write_xmit(struct sock *sk, unsigned int mss_now, int nonagle)
...
@@ -994,9 +997,10 @@ static int tcp_write_xmit(struct sock *sk, unsigned int mss_now, int nonagle)
break
;
break
;
}
}
limit
=
mss_now
;
if
(
tso_segs
>
1
)
{
if
(
tso_segs
>
1
)
{
u32
limit
=
tcp_window_allows
(
tp
,
skb
,
limit
=
tcp_window_allows
(
tp
,
skb
,
mss_now
,
cwnd_quota
);
mss_now
,
cwnd_quota
);
if
(
skb
->
len
<
limit
)
{
if
(
skb
->
len
<
limit
)
{
unsigned
int
trim
=
skb
->
len
%
mss_now
;
unsigned
int
trim
=
skb
->
len
%
mss_now
;
...
@@ -1004,15 +1008,12 @@ static int tcp_write_xmit(struct sock *sk, unsigned int mss_now, int nonagle)
...
@@ -1004,15 +1008,12 @@ static int tcp_write_xmit(struct sock *sk, unsigned int mss_now, int nonagle)
if
(
trim
)
if
(
trim
)
limit
=
skb
->
len
-
trim
;
limit
=
skb
->
len
-
trim
;
}
}
if
(
skb
->
len
>
limit
)
{
if
(
tso_fragment
(
sk
,
skb
,
limit
,
mss_now
))
break
;
}
}
else
if
(
unlikely
(
skb
->
len
>
mss_now
))
{
if
(
unlikely
(
tcp_fragment
(
sk
,
skb
,
mss_now
,
mss_now
)))
break
;
}
}
if
(
skb
->
len
>
limit
&&
unlikely
(
tso_fragment
(
sk
,
skb
,
limit
,
mss_now
)))
break
;
TCP_SKB_CB
(
skb
)
->
when
=
tcp_time_stamp
;
TCP_SKB_CB
(
skb
)
->
when
=
tcp_time_stamp
;
if
(
unlikely
(
tcp_transmit_skb
(
sk
,
skb_clone
(
skb
,
GFP_ATOMIC
))))
if
(
unlikely
(
tcp_transmit_skb
(
sk
,
skb_clone
(
skb
,
GFP_ATOMIC
))))
...
@@ -1064,11 +1065,14 @@ void tcp_push_one(struct sock *sk, unsigned int mss_now)
...
@@ -1064,11 +1065,14 @@ void tcp_push_one(struct sock *sk, unsigned int mss_now)
cwnd_quota
=
tcp_snd_test
(
sk
,
skb
,
mss_now
,
TCP_NAGLE_PUSH
);
cwnd_quota
=
tcp_snd_test
(
sk
,
skb
,
mss_now
,
TCP_NAGLE_PUSH
);
if
(
likely
(
cwnd_quota
))
{
if
(
likely
(
cwnd_quota
))
{
unsigned
int
limit
;
BUG_ON
(
!
tso_segs
);
BUG_ON
(
!
tso_segs
);
limit
=
mss_now
;
if
(
tso_segs
>
1
)
{
if
(
tso_segs
>
1
)
{
u32
limit
=
tcp_window_allows
(
tp
,
skb
,
limit
=
tcp_window_allows
(
tp
,
skb
,
mss_now
,
cwnd_quota
);
mss_now
,
cwnd_quota
);
if
(
skb
->
len
<
limit
)
{
if
(
skb
->
len
<
limit
)
{
unsigned
int
trim
=
skb
->
len
%
mss_now
;
unsigned
int
trim
=
skb
->
len
%
mss_now
;
...
@@ -1076,15 +1080,12 @@ void tcp_push_one(struct sock *sk, unsigned int mss_now)
...
@@ -1076,15 +1080,12 @@ void tcp_push_one(struct sock *sk, unsigned int mss_now)
if
(
trim
)
if
(
trim
)
limit
=
skb
->
len
-
trim
;
limit
=
skb
->
len
-
trim
;
}
}
if
(
skb
->
len
>
limit
)
{
if
(
unlikely
(
tso_fragment
(
sk
,
skb
,
limit
,
mss_now
)))
return
;
}
}
else
if
(
unlikely
(
skb
->
len
>
mss_now
))
{
if
(
unlikely
(
tcp_fragment
(
sk
,
skb
,
mss_now
,
mss_now
)))
return
;
}
}
if
(
skb
->
len
>
limit
&&
unlikely
(
tso_fragment
(
sk
,
skb
,
limit
,
mss_now
)))
return
;
/* Send it out now. */
/* Send it out now. */
TCP_SKB_CB
(
skb
)
->
when
=
tcp_time_stamp
;
TCP_SKB_CB
(
skb
)
->
when
=
tcp_time_stamp
;
...
...
net/ipv6/ip6_input.c
View file @
ade6648b
...
@@ -198,12 +198,13 @@ static inline int ip6_input_finish(struct sk_buff *skb)
...
@@ -198,12 +198,13 @@ static inline int ip6_input_finish(struct sk_buff *skb)
if
(
!
raw_sk
)
{
if
(
!
raw_sk
)
{
if
(
xfrm6_policy_check
(
NULL
,
XFRM_POLICY_IN
,
skb
))
{
if
(
xfrm6_policy_check
(
NULL
,
XFRM_POLICY_IN
,
skb
))
{
IP6_INC_STATS_BH
(
IPSTATS_MIB_INUNKNOWNPROTOS
);
IP6_INC_STATS_BH
(
IPSTATS_MIB_INUNKNOWNPROTOS
);
icmpv6_param_prob
(
skb
,
ICMPV6_UNK_NEXTHDR
,
nhoff
);
icmpv6_send
(
skb
,
ICMPV6_PARAMPROB
,
ICMPV6_UNK_NEXTHDR
,
nhoff
,
skb
->
dev
);
}
}
}
else
{
}
else
IP6_INC_STATS_BH
(
IPSTATS_MIB_INDELIVERS
);
IP6_INC_STATS_BH
(
IPSTATS_MIB_INDELIVERS
);
kfree_skb
(
skb
);
kfree_skb
(
skb
);
}
}
}
rcu_read_unlock
();
rcu_read_unlock
();
return
0
;
return
0
;
...
...
net/ipv6/raw.c
View file @
ade6648b
...
@@ -328,6 +328,8 @@ int rawv6_rcv(struct sock *sk, struct sk_buff *skb)
...
@@ -328,6 +328,8 @@ int rawv6_rcv(struct sock *sk, struct sk_buff *skb)
if
(
skb
->
ip_summed
!=
CHECKSUM_UNNECESSARY
)
{
if
(
skb
->
ip_summed
!=
CHECKSUM_UNNECESSARY
)
{
if
(
skb
->
ip_summed
==
CHECKSUM_HW
)
{
if
(
skb
->
ip_summed
==
CHECKSUM_HW
)
{
skb_postpull_rcsum
(
skb
,
skb
->
nh
.
raw
,
skb
->
h
.
raw
-
skb
->
nh
.
raw
);
skb
->
ip_summed
=
CHECKSUM_UNNECESSARY
;
skb
->
ip_summed
=
CHECKSUM_UNNECESSARY
;
if
(
csum_ipv6_magic
(
&
skb
->
nh
.
ipv6h
->
saddr
,
if
(
csum_ipv6_magic
(
&
skb
->
nh
.
ipv6h
->
saddr
,
&
skb
->
nh
.
ipv6h
->
daddr
,
&
skb
->
nh
.
ipv6h
->
daddr
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment