fib6: install fib6 ops in the last step
authorWANG Cong <xiyou.wangcong@gmail.com>
Wed, 25 Mar 2015 21:45:02 +0000 (14:45 -0700)
committerDavid S. Miller <davem@davemloft.net>
Sun, 29 Mar 2015 19:12:37 +0000 (12:12 -0700)
We should not commit the new ops until we finish
all the setup, otherwise we have to NULL it on failure.

Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv6/fib6_rules.c

index 27ca796..273eb26 100644 (file)
@@ -299,19 +299,16 @@ static int __net_init fib6_rules_net_init(struct net *net)
        ops = fib_rules_register(&fib6_rules_ops_template, net);
        if (IS_ERR(ops))
                return PTR_ERR(ops);
-       net->ipv6.fib6_rules_ops = ops;
-
 
-       err = fib_default_rule_add(net->ipv6.fib6_rules_ops, 0,
-                                  RT6_TABLE_LOCAL, 0);
+       err = fib_default_rule_add(ops, 0, RT6_TABLE_LOCAL, 0);
        if (err)
                goto out_fib6_rules_ops;
 
-       err = fib_default_rule_add(net->ipv6.fib6_rules_ops,
-                                  0x7FFE, RT6_TABLE_MAIN, 0);
+       err = fib_default_rule_add(ops, 0x7FFE, RT6_TABLE_MAIN, 0);
        if (err)
                goto out_fib6_rules_ops;
 
+       net->ipv6.fib6_rules_ops = ops;
 out:
        return err;