|
@@ -384,8 +384,8 @@ static int fib_nl_newrule(struct sk_buff *skb, struct nlmsghdr* nlh, void *arg)
|
|
|
*/
|
|
|
list_for_each_entry(r, &ops->rules_list, list) {
|
|
|
if (r->action == FR_ACT_GOTO &&
|
|
|
- r->target == rule->pref) {
|
|
|
- BUG_ON(rtnl_dereference(r->ctarget) != NULL);
|
|
|
+ r->target == rule->pref &&
|
|
|
+ rtnl_dereference(r->ctarget) == NULL) {
|
|
|
rcu_assign_pointer(r->ctarget, rule);
|
|
|
if (--ops->unresolved_rules == 0)
|
|
|
break;
|