Commit 5235d77d authored by Alexey Kuznetsov's avatar Alexey Kuznetsov Committed by Hideaki Yoshifuji

net/ipv4/route.c: Create compare_keys to compare flowi identities.

parent cd51fffd
...@@ -611,6 +611,13 @@ static int rt_garbage_collect(void) ...@@ -611,6 +611,13 @@ static int rt_garbage_collect(void)
out: return 0; out: return 0;
} }
static inline int compare_keys(struct flowi *fl1, struct flowi *fl2)
{
return memcmp(&fl1->nl_u.ip4_u, &fl2->nl_u.ip4_u, sizeof(fl1->nl_u.ip4_u)) == 0 &&
fl1->oif == fl2->oif &&
fl1->iif == fl2->iif;
}
static int rt_intern_hash(unsigned hash, struct rtable *rt, struct rtable **rp) static int rt_intern_hash(unsigned hash, struct rtable *rt, struct rtable **rp)
{ {
struct rtable *rth, **rthp; struct rtable *rth, **rthp;
...@@ -622,7 +629,7 @@ static int rt_intern_hash(unsigned hash, struct rtable *rt, struct rtable **rp) ...@@ -622,7 +629,7 @@ static int rt_intern_hash(unsigned hash, struct rtable *rt, struct rtable **rp)
write_lock_bh(&rt_hash_table[hash].lock); write_lock_bh(&rt_hash_table[hash].lock);
while ((rth = *rthp) != NULL) { while ((rth = *rthp) != NULL) {
if (memcmp(&rth->fl, &rt->fl, sizeof(rt->fl)) == 0) { if (compare_keys(&rth->fl, &rt->fl)) {
/* Put it first */ /* Put it first */
*rthp = rth->u.rt_next; *rthp = rth->u.rt_next;
rth->u.rt_next = rt_hash_table[hash].chain; rth->u.rt_next = rt_hash_table[hash].chain;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment