[NETFILTER]: nf_conntrack_expect: avoid useless list walking
Don't walk the list when unexpecting an expectation, we already have a reference and the timer check is enough to guarantee that it still is on the list. This comment suggests that it was copied there by mistake from expectation eviction: /* choose the oldest expectation to evict */ Signed-off-by: Patrick McHardy <kaber@trash.net> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
d4156e8cd9
Коммит
4e1d4e6c5a
|
@ -165,17 +165,10 @@ static inline int expect_matches(const struct nf_conntrack_expect *a,
|
|||
/* Generally a bad idea to call this: could have matched already. */
|
||||
void nf_ct_unexpect_related(struct nf_conntrack_expect *exp)
|
||||
{
|
||||
struct nf_conntrack_expect *i;
|
||||
|
||||
write_lock_bh(&nf_conntrack_lock);
|
||||
/* choose the oldest expectation to evict */
|
||||
list_for_each_entry_reverse(i, &nf_ct_expect_list, list) {
|
||||
if (expect_matches(i, exp) && del_timer(&i->timeout)) {
|
||||
nf_ct_unlink_expect(i);
|
||||
write_unlock_bh(&nf_conntrack_lock);
|
||||
nf_ct_expect_put(i);
|
||||
return;
|
||||
}
|
||||
if (del_timer(&exp->timeout)) {
|
||||
nf_ct_unlink_expect(exp);
|
||||
nf_ct_expect_put(exp);
|
||||
}
|
||||
write_unlock_bh(&nf_conntrack_lock);
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче