Почему `synchronize_rcu()` не блокируется при вызове внутри блока блокировки чтения?
synchronize_rcu()
используется для ожидания только завершения текущих критических секций на стороне чтения RCU. Если это так, он должен быть заблокирован навсегда при вызове внутри блока чтения. Тем не менее, следующий код хорошо работает на моем ядре Linux, почему?
void port_range_clean( void )
{
struct port_range *p;
redo:
rcu_read_lock();
list_for_each_entry_rcu(p, &port_rt->ports, list) {
list_del_rcu(&p->list);
synchronize_rcu();
rcu_read_unlock();
kfree(p);
goto redo;
}
}