Chinaunix首页 | 论坛 | 博客
  • 博客访问: 29696
  • 博文数量: 6
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 70
  • 用 户 组: 普通用户
  • 注册时间: 2013-07-13 13:23
文章分类

全部博文(6)

文章存档

2013年(6)

我的朋友

分类: LINUX

2013-11-01 19:39:52

接着上篇blog,想起了以前的一个嵌套死锁问题。简单记录下:
死锁的位置也是在tcp_v4_rcv中的那个自旋锁。

因为处于项目的需要,需要的本地的核态直接回应上层应用态的数据包,所以,在有一个数据包发往上层,然后上层回应之后,发到netfilter的local_out处,此时,若是直接用netif_receive_skb回应上层的数据,则又会再次去获取上面还未释放的自旋锁,所以造成死锁。
解决的方法,将上层发下来的数据包,缓存到一个队列里面,然后local_out就可以返回,上层的自旋锁就可以释放掉了,然后再令起一个内核线程,将队列里的数据包发往上层,这样就解决了嵌套死锁的问题。。
阅读(1640) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~