Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xiphi1978
linux
提交
ade6648b
L
linux
项目概览
xiphi1978
/
linux
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
L
linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
ade6648b
编写于
8月 17, 2005
作者:
L
Linus Torvalds
浏览文件
操作
浏览文件
下载
差异文件
Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
上级
2ad56496
fad87aca
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
27 addition
and
23 deletion
+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
未找到文件。
net/ipv4/tcp_output.c
浏览文件 @
ade6648b
...
...
@@ -861,7 +861,8 @@ static int tso_fragment(struct sock *sk, struct sk_buff *skb, unsigned int len,
u16
flags
;
/* 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
);
if
(
unlikely
(
buff
==
NULL
))
...
...
@@ -974,6 +975,8 @@ static int tcp_write_xmit(struct sock *sk, unsigned int mss_now, int nonagle)
sent_pkts
=
0
;
while
((
skb
=
sk
->
sk_send_head
))
{
unsigned
int
limit
;
tso_segs
=
tcp_init_tso_segs
(
sk
,
skb
,
mss_now
);
BUG_ON
(
!
tso_segs
);
...
...
@@ -994,9 +997,10 @@ static int tcp_write_xmit(struct sock *sk, unsigned int mss_now, int nonagle)
break
;
}
limit
=
mss_now
;
if
(
tso_segs
>
1
)
{
u32
limit
=
tcp_window_allows
(
tp
,
skb
,
mss_now
,
cwnd_quota
);
limit
=
tcp_window_allows
(
tp
,
skb
,
mss_now
,
cwnd_quota
);
if
(
skb
->
len
<
limit
)
{
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)
if
(
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
;
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)
cwnd_quota
=
tcp_snd_test
(
sk
,
skb
,
mss_now
,
TCP_NAGLE_PUSH
);
if
(
likely
(
cwnd_quota
))
{
unsigned
int
limit
;
BUG_ON
(
!
tso_segs
);
limit
=
mss_now
;
if
(
tso_segs
>
1
)
{
u32
limit
=
tcp_window_allows
(
tp
,
skb
,
mss_now
,
cwnd_quota
);
limit
=
tcp_window_allows
(
tp
,
skb
,
mss_now
,
cwnd_quota
);
if
(
skb
->
len
<
limit
)
{
unsigned
int
trim
=
skb
->
len
%
mss_now
;
...
...
@@ -1076,15 +1080,12 @@ void tcp_push_one(struct sock *sk, unsigned int mss_now)
if
(
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. */
TCP_SKB_CB
(
skb
)
->
when
=
tcp_time_stamp
;
...
...
net/ipv6/ip6_input.c
浏览文件 @
ade6648b
...
...
@@ -198,12 +198,13 @@ static inline int ip6_input_finish(struct sk_buff *skb)
if
(
!
raw_sk
)
{
if
(
xfrm6_policy_check
(
NULL
,
XFRM_POLICY_IN
,
skb
))
{
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
);
kfree_skb
(
skb
);
}
kfree_skb
(
skb
);
}
rcu_read_unlock
();
return
0
;
...
...
net/ipv6/raw.c
浏览文件 @
ade6648b
...
...
@@ -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_HW
)
{
skb_postpull_rcsum
(
skb
,
skb
->
nh
.
raw
,
skb
->
h
.
raw
-
skb
->
nh
.
raw
);
skb
->
ip_summed
=
CHECKSUM_UNNECESSARY
;
if
(
csum_ipv6_magic
(
&
skb
->
nh
.
ipv6h
->
saddr
,
&
skb
->
nh
.
ipv6h
->
daddr
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录