@waiting_writers:
number of writers blocked waiting for room
@writers:
number of current writers of this pipe
这个函数有一个大循环做buf的copy_to_user;
如果在311行
- 没有writer等着(因为buffer空间不够的原因)写buffer;
- 而且此时的ret,也就是读到的个数不为0;
- 同时buffer里还没有数据
就在这个317行 break循环;所以read函数退出,实际是没有错误发生;而且ret值和期望的长度不一致
本例发生的原因是由于writer/ksoftirq thread 抢不到CPU,导致在读的时候没有足够的内容在buffer里