Instead of:
if (foo) {
unlock();
return bar();
}
unlock();
do:
unlock();
if (foo)
return bar();
This is ok because rcu protected structure is only dereferenced before
the conditional.
Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
return NULL;
typemap = afinfo->type_map;
return NULL;
typemap = afinfo->type_map;
+ type = READ_ONCE(typemap[proto]);
if (unlikely(type && !try_module_get(type->owner)))
type = NULL;
if (unlikely(type && !try_module_get(type->owner)))
type = NULL;
if (!type && !modload_attempted) {
if (!type && !modload_attempted) {
request_module("xfrm-type-%d-%d", family, proto);
modload_attempted = 1;
goto retry;
}
request_module("xfrm-type-%d-%d", family, proto);
modload_attempted = 1;
goto retry;
}
if (unlikely(afinfo == NULL))
return NULL;
if (unlikely(afinfo == NULL))
return NULL;
- mode = afinfo->mode_map[encap];
+ mode = READ_ONCE(afinfo->mode_map[encap]);
if (unlikely(mode && !try_module_get(mode->owner)))
mode = NULL;
if (unlikely(mode && !try_module_get(mode->owner)))
mode = NULL;
if (!mode && !modload_attempted) {
if (!mode && !modload_attempted) {
request_module("xfrm-mode-%d-%d", family, encap);
modload_attempted = 1;
goto retry;
}
request_module("xfrm-mode-%d-%d", family, encap);
modload_attempted = 1;
goto retry;
}