xfrm: policy: xfrm_policy_unregister_afinfo can return void
Nothing checks the return value. Also, the errors returned on unregister are impossible (we only support INET and INET6, so no way xfrm_policy_afinfo[afinfo->family] can be anything other than 'afinfo' itself). Signed-off-by: Florian Westphal <fw@strlen.de> Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
This commit is contained in:
parent
f5e2bb4f5b
commit
2b61997aa0
|
@ -304,7 +304,7 @@ struct xfrm_policy_afinfo {
|
|||
};
|
||||
|
||||
int xfrm_policy_register_afinfo(struct xfrm_policy_afinfo *afinfo);
|
||||
int xfrm_policy_unregister_afinfo(struct xfrm_policy_afinfo *afinfo);
|
||||
void xfrm_policy_unregister_afinfo(struct xfrm_policy_afinfo *afinfo);
|
||||
void km_policy_notify(struct xfrm_policy *xp, int dir,
|
||||
const struct km_event *c);
|
||||
void km_state_notify(struct xfrm_state *x, const struct km_event *c);
|
||||
|
|
|
@ -2883,34 +2883,25 @@ int xfrm_policy_register_afinfo(struct xfrm_policy_afinfo *afinfo)
|
|||
}
|
||||
EXPORT_SYMBOL(xfrm_policy_register_afinfo);
|
||||
|
||||
int xfrm_policy_unregister_afinfo(struct xfrm_policy_afinfo *afinfo)
|
||||
void xfrm_policy_unregister_afinfo(struct xfrm_policy_afinfo *afinfo)
|
||||
{
|
||||
int err = 0;
|
||||
if (unlikely(afinfo == NULL))
|
||||
return -EINVAL;
|
||||
struct dst_ops *dst_ops = afinfo->dst_ops;
|
||||
|
||||
if (unlikely(afinfo->family >= NPROTO))
|
||||
return -EAFNOSUPPORT;
|
||||
spin_lock(&xfrm_policy_afinfo_lock);
|
||||
if (likely(xfrm_policy_afinfo[afinfo->family] != NULL)) {
|
||||
if (unlikely(xfrm_policy_afinfo[afinfo->family] != afinfo))
|
||||
err = -EINVAL;
|
||||
else
|
||||
RCU_INIT_POINTER(xfrm_policy_afinfo[afinfo->family],
|
||||
return;
|
||||
|
||||
if (likely(xfrm_policy_afinfo[afinfo->family] != afinfo)) {
|
||||
RCU_INIT_POINTER(xfrm_policy_afinfo[afinfo->family],
|
||||
NULL);
|
||||
}
|
||||
spin_unlock(&xfrm_policy_afinfo_lock);
|
||||
if (!err) {
|
||||
struct dst_ops *dst_ops = afinfo->dst_ops;
|
||||
|
||||
synchronize_rcu();
|
||||
synchronize_rcu();
|
||||
|
||||
dst_ops->kmem_cachep = NULL;
|
||||
dst_ops->check = NULL;
|
||||
dst_ops->negative_advice = NULL;
|
||||
dst_ops->link_failure = NULL;
|
||||
afinfo->garbage_collect = NULL;
|
||||
}
|
||||
return err;
|
||||
dst_ops->kmem_cachep = NULL;
|
||||
dst_ops->check = NULL;
|
||||
dst_ops->negative_advice = NULL;
|
||||
dst_ops->link_failure = NULL;
|
||||
afinfo->garbage_collect = NULL;
|
||||
}
|
||||
EXPORT_SYMBOL(xfrm_policy_unregister_afinfo);
|
||||
|
||||
|
|
Loading…
Reference in New Issue