diff options
Diffstat (limited to 'net/core/lwtunnel.c')
| -rw-r--r-- | net/core/lwtunnel.c | 16 | 
1 files changed, 8 insertions, 8 deletions
diff --git a/net/core/lwtunnel.c b/net/core/lwtunnel.c index 0b171756453c..19b557bd294b 100644 --- a/net/core/lwtunnel.c +++ b/net/core/lwtunnel.c @@ -122,18 +122,18 @@ int lwtunnel_build_state(u16 encap_type,  	ret = -EOPNOTSUPP;  	rcu_read_lock();  	ops = rcu_dereference(lwtun_encaps[encap_type]); -	if (likely(ops && ops->build_state && try_module_get(ops->owner))) { +	if (likely(ops && ops->build_state && try_module_get(ops->owner)))  		found = true; +	rcu_read_unlock(); + +	if (found) {  		ret = ops->build_state(encap, family, cfg, lws, extack);  		if (ret)  			module_put(ops->owner); -	} -	rcu_read_unlock(); - -	/* don't rely on -EOPNOTSUPP to detect match as build_state -	 * handlers could return it -	 */ -	if (!found) { +	} else { +		/* don't rely on -EOPNOTSUPP to detect match as build_state +		 * handlers could return it +		 */  		NL_SET_ERR_MSG_ATTR(extack, encap,  				    "LWT encapsulation type not supported");  	}  |