我无法理解函数local_bh_disable()
的作用,该函数在函数conn_request()
here之前被调用。这是否意味着此时只有一个进程可以访问此部分(某种锁定)?我之所以这样问是因为,我想在调用ehash
之后从conn_request
表中删除一些条目,但是我不知道是否必须在本节中进行操作。
if (th->syn) {
if (th->fin)
goto discard;
/* It is possible that we process SYN packets from backlog,
* so we need to make sure to disable BH right there.
*/
local_bh_disable();
acceptable = icsk->icsk_af_ops->conn_request(sk, skb) >= 0;
local_bh_enable();
if (!acceptable)
return 1;
consume_skb(skb);
return 0;
}
PS:来自Linux内核4.15的源代码