跟Andrey Vagin学习写内核patch
来源:互联网 发布:centos怎么退出vi 编辑:程序博客网 时间:2024/05/22 14:11
本文原创为freas_1990,转载请标明出处:http://blog.csdn.net/freas_1990/article/details/19424109
在2013年11月19日, Andrey Vagin提交了一个patch,该patch修复了 snd_nxt做update的逻辑。
这个patch其实逻辑很简单,也正是因为简单,所以适合给初学者学习。
kernel的oops信息如下:
[ 103.043194] BUG: unable to handle kernel NULL pointer dereference at 0000000000000048[ 103.044025] IP: [<ffffffff815aaaaf>] tcp_rearm_rto+0xcf/0x150...[ 146.301158] Call Trace:[ 146.301158] [<ffffffff815ab7f0>] tcp_ack+0xcc0/0x12c0
在出现本oops之前,Linux正把sk强制转换为tcp_sk:
void tcp_send_window_probe(struct sock *sk)
{ if (sk->sk_state == TCP_ESTABLISHED) { tcp_sk(sk)->snd_wl1 = tcp_sk(sk)->rcv_nxt - 1; tcp_sk(sk)->snd_nxt = tcp_sk(sk)->write_seq; tcp_xmit_probe_skb(sk, 0); } }
转换之前,数据结构关系如下:
snd_una snd_nxt write_seq |_________|________| |
转换之后,数据结构关系如下:
snd_una snd_nxt, write_seq |_________ ________| | sk_send_headsnd_nxt与sk_send_head已经错开了。
事实上,如下一行代码是不需要的。
tcp_sk(sk)->snd_nxt = tcp_sk(sk)->write_seq;
童鞋们,从这篇文章你学习到了什么呢?
0 0
- 跟Andrey Vagin学习写内核patch
- 跟我一起写makefile 学习笔记
- patch学习
- at91rm9200 内核patch 下载
- 关于PCM的内核PATCH
- 给Linux内核打patch
- Makefile学习教程: 跟我一起写 Makefile
- Makefile学习教程: 跟我一起写 Makefile
- Makefile学习教程: 跟我一起写 Makefile
- Makefile学习教程: 跟我一起写 Makefile
- Makefile学习教程: 跟我一起写 Makefile
- Makefile学习教程: 跟我一起写 Makefile
- Makefile学习教程: 跟我一起写 Makefile
- Makefile学习教程: 跟我一起写 Makefile
- Makefile学习教程: 跟我一起写 Makefile (1)
- Makefile学习教程: 跟我一起写 Makefile (2)
- 《跟我一起写makefile》个人学习摘录(一)
- Makefile学习教程: 跟我一起写 Makefile
- 为IntelliJ IDEA安装MySQL驱动
- 线程
- Vivado AXI Reference Guide 阅读笔记
- poj2104 K-th Number
- 3Sum closet | LeetCode
- 跟Andrey Vagin学习写内核patch
- 永远的无所畏惧
- 向量
- 数据类型是浮云
- java.lang.NoClassDefFoundError: org/apache/log4j/Level
- poj3481 Double Queue
- Linux内核源代码解析之——欲三次握手,先构造传输控制块!
- 为什么程序员喜欢深更半夜写代码
- 一张图让你了解安卓事件处理流程的走向