Reapply "xfrm: policy: remove remaining use of inexact list"
This reverts commit 8f3ee7fd7d.
Reason of revert: Android platform has been updated to reolve this
issue - aosp/3303667
Bug: 367633876
Change-Id: I05908cf3c9ff7c6427ff4da3ec5d8de9f58d5a54
Signed-off-by: Terence Tritton <ttritton@google.com>
This commit is contained in:
committed by
Terence Tritton (xWF)
parent
82bcea9459
commit
c783e8acd1
@@ -585,7 +585,6 @@ struct xfrm_policy {
|
||||
u16 family;
|
||||
struct xfrm_sec_ctx *security;
|
||||
struct xfrm_tmpl xfrm_vec[XFRM_MAX_DEPTH];
|
||||
struct hlist_node bydst_inexact_list;
|
||||
struct rcu_head rcu;
|
||||
|
||||
struct xfrm_dev_offload xdo;
|
||||
|
||||
@@ -201,8 +201,6 @@ xfrm_policy_inexact_lookup_rcu(struct net *net,
|
||||
static struct xfrm_policy *
|
||||
xfrm_policy_insert_list(struct hlist_head *chain, struct xfrm_policy *policy,
|
||||
bool excl);
|
||||
static void xfrm_policy_insert_inexact_list(struct hlist_head *chain,
|
||||
struct xfrm_policy *policy);
|
||||
|
||||
static bool
|
||||
xfrm_policy_find_inexact_candidates(struct xfrm_pol_inexact_candidates *cand,
|
||||
@@ -415,7 +413,6 @@ struct xfrm_policy *xfrm_policy_alloc(struct net *net, gfp_t gfp)
|
||||
if (policy) {
|
||||
write_pnet(&policy->xp_net, net);
|
||||
INIT_LIST_HEAD(&policy->walk.all);
|
||||
INIT_HLIST_NODE(&policy->bydst_inexact_list);
|
||||
INIT_HLIST_NODE(&policy->bydst);
|
||||
INIT_HLIST_NODE(&policy->byidx);
|
||||
rwlock_init(&policy->lock);
|
||||
@@ -1233,9 +1230,6 @@ xfrm_policy_inexact_insert(struct xfrm_policy *policy, u8 dir, int excl)
|
||||
return ERR_PTR(-EEXIST);
|
||||
}
|
||||
|
||||
chain = &net->xfrm.policy_inexact[dir];
|
||||
xfrm_policy_insert_inexact_list(chain, policy);
|
||||
|
||||
if (delpol)
|
||||
__xfrm_policy_inexact_prune_bin(bin, false);
|
||||
|
||||
@@ -1343,7 +1337,6 @@ static void xfrm_hash_rebuild(struct work_struct *work)
|
||||
continue;
|
||||
|
||||
hlist_del_rcu(&policy->bydst);
|
||||
hlist_del_init(&policy->bydst_inexact_list);
|
||||
|
||||
newpos = NULL;
|
||||
dir = xfrm_policy_id2dir(policy->index);
|
||||
@@ -1513,36 +1506,6 @@ static const struct rhashtable_params xfrm_pol_inexact_params = {
|
||||
.automatic_shrinking = true,
|
||||
};
|
||||
|
||||
static void xfrm_policy_insert_inexact_list(struct hlist_head *chain,
|
||||
struct xfrm_policy *policy)
|
||||
{
|
||||
struct xfrm_policy *pol, *delpol = NULL;
|
||||
struct hlist_node *newpos = NULL;
|
||||
|
||||
hlist_for_each_entry(pol, chain, bydst_inexact_list) {
|
||||
if (pol->type == policy->type &&
|
||||
pol->if_id == policy->if_id &&
|
||||
!selector_cmp(&pol->selector, &policy->selector) &&
|
||||
xfrm_policy_mark_match(&policy->mark, pol) &&
|
||||
xfrm_sec_ctx_match(pol->security, policy->security) &&
|
||||
!WARN_ON(delpol)) {
|
||||
delpol = pol;
|
||||
if (policy->priority > pol->priority)
|
||||
continue;
|
||||
} else if (policy->priority >= pol->priority) {
|
||||
newpos = &pol->bydst_inexact_list;
|
||||
continue;
|
||||
}
|
||||
if (delpol)
|
||||
break;
|
||||
}
|
||||
|
||||
if (newpos && policy->xdo.type != XFRM_DEV_OFFLOAD_PACKET)
|
||||
hlist_add_behind_rcu(&policy->bydst_inexact_list, newpos);
|
||||
else
|
||||
hlist_add_head_rcu(&policy->bydst_inexact_list, chain);
|
||||
}
|
||||
|
||||
static struct xfrm_policy *xfrm_policy_insert_list(struct hlist_head *chain,
|
||||
struct xfrm_policy *policy,
|
||||
bool excl)
|
||||
@@ -2344,7 +2307,6 @@ static struct xfrm_policy *__xfrm_policy_unlink(struct xfrm_policy *pol,
|
||||
/* Socket policies are not hashed. */
|
||||
if (!hlist_unhashed(&pol->bydst)) {
|
||||
hlist_del_rcu(&pol->bydst);
|
||||
hlist_del_init(&pol->bydst_inexact_list);
|
||||
hlist_del(&pol->byidx);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user