struct fnhe_hash_bucket *hash;
        struct fib_nh_exception *fnhe;
        struct rtable *rt;
+       u32 genid, hval;
        unsigned int i;
        int depth;
-       u32 hval = fnhe_hashfun(daddr);
+
+       genid = fnhe_genid(dev_net(nh->nh_dev));
+       hval = fnhe_hashfun(daddr);
 
        spin_lock_bh(&fnhe_lock);
 
        }
 
        if (fnhe) {
+               if (fnhe->fnhe_genid != genid)
+                       fnhe->fnhe_genid = genid;
                if (gw)
                        fnhe->fnhe_gw = gw;
                if (pmtu)
                        fnhe->fnhe_next = hash->chain;
                        rcu_assign_pointer(hash->chain, fnhe);
                }
-               fnhe->fnhe_genid = fnhe_genid(dev_net(nh->nh_dev));
+               fnhe->fnhe_genid = genid;
                fnhe->fnhe_daddr = daddr;
                fnhe->fnhe_gw = gw;
                fnhe->fnhe_pmtu = pmtu;