xfrm: optimise the use of walk list header in xfrm_policy/state_walk
The walk from input is the list header, and marked as dead, and will be skipped in loop. list_first_entry() can be used to return the true usable value from walk if walk is not empty Signed-off-by: Li RongQing <roy.qing.li@gmail.com> Acked-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
This commit is contained in:
parent
1ee5e6676b
commit
800777026e
|
@ -1004,7 +1004,9 @@ int xfrm_policy_walk(struct net *net, struct xfrm_policy_walk *walk,
|
||||||
if (list_empty(&walk->walk.all))
|
if (list_empty(&walk->walk.all))
|
||||||
x = list_first_entry(&net->xfrm.policy_all, struct xfrm_policy_walk_entry, all);
|
x = list_first_entry(&net->xfrm.policy_all, struct xfrm_policy_walk_entry, all);
|
||||||
else
|
else
|
||||||
x = list_entry(&walk->walk.all, struct xfrm_policy_walk_entry, all);
|
x = list_first_entry(&walk->walk.all,
|
||||||
|
struct xfrm_policy_walk_entry, all);
|
||||||
|
|
||||||
list_for_each_entry_from(x, &net->xfrm.policy_all, all) {
|
list_for_each_entry_from(x, &net->xfrm.policy_all, all) {
|
||||||
if (x->dead)
|
if (x->dead)
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -1626,7 +1626,7 @@ int xfrm_state_walk(struct net *net, struct xfrm_state_walk *walk,
|
||||||
if (list_empty(&walk->all))
|
if (list_empty(&walk->all))
|
||||||
x = list_first_entry(&net->xfrm.state_all, struct xfrm_state_walk, all);
|
x = list_first_entry(&net->xfrm.state_all, struct xfrm_state_walk, all);
|
||||||
else
|
else
|
||||||
x = list_entry(&walk->all, struct xfrm_state_walk, all);
|
x = list_first_entry(&walk->all, struct xfrm_state_walk, all);
|
||||||
list_for_each_entry_from(x, &net->xfrm.state_all, all) {
|
list_for_each_entry_from(x, &net->xfrm.state_all, all) {
|
||||||
if (x->state == XFRM_STATE_DEAD)
|
if (x->state == XFRM_STATE_DEAD)
|
||||||
continue;
|
continue;
|
||||||
|
|
Loading…
Reference in New Issue