mirror of
https://github.com/torvalds/linux.git
synced 2024-11-22 20:22:09 +00:00
xfrm: state: simplify rcu_read_unlock handling in two spots
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>
This commit is contained in:
parent
711059b975
commit
75cda62d9c
@ -231,17 +231,18 @@ retry:
|
||||
return NULL;
|
||||
typemap = afinfo->type_map;
|
||||
|
||||
type = typemap[proto];
|
||||
type = READ_ONCE(typemap[proto]);
|
||||
if (unlikely(type && !try_module_get(type->owner)))
|
||||
type = NULL;
|
||||
|
||||
rcu_read_unlock();
|
||||
|
||||
if (!type && !modload_attempted) {
|
||||
rcu_read_unlock();
|
||||
request_module("xfrm-type-%d-%d", family, proto);
|
||||
modload_attempted = 1;
|
||||
goto retry;
|
||||
}
|
||||
|
||||
rcu_read_unlock();
|
||||
return type;
|
||||
}
|
||||
|
||||
@ -327,17 +328,17 @@ retry:
|
||||
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;
|
||||
|
||||
rcu_read_unlock();
|
||||
if (!mode && !modload_attempted) {
|
||||
rcu_read_unlock();
|
||||
request_module("xfrm-mode-%d-%d", family, encap);
|
||||
modload_attempted = 1;
|
||||
goto retry;
|
||||
}
|
||||
|
||||
rcu_read_unlock();
|
||||
return mode;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user