On 2/21/19 11:14 PM, wenxu wrote:
> build_state in the rcu_read_lock and disable the preempt
>
> rcu_read_lock();
> ops = rcu_dereference(lwtun_encaps[encap_type]);
> if (likely(ops && ops->build_state && try_module_get(ops->owner))) {
> found = true;
> ret = ops->build_state(encap, family, cfg, lws, extack);
> if (ret)
> module_put(ops->owner);
> }
> rcu_read_unlock();
>
Missed that.
Once a reference is taken the rcu_read_lock can be dropped before
calling build_state allowing the allocations to be GFP_KERNEL.