Our code to determine whether receive functionality will work with
ip6 gre depends on the return of -EEXIST but inet6_add_protocol()
returns a -1 on failure to grab the pointer via a cmpxchg op. Just
set the error return to -EEXIST to help out the vport init function.
Reviewed-by: Yifeng Sun <pkusunyifeng@gmail.com>
Reported-at: https://mail.openvswitch.org/pipermail/ovs-discuss/2019-January/048090.html
Reported-by: Ken Ajiro <ken-ajiro@xr.jp.nec.com>
Signed-off-by: Greg Rose <gvrose8192@gmail.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
if (err < 0) {
pr_info("%s: can't add protocol\n", __func__);
unregister_pernet_device(&ip6gre_net_ops);
+ /*
+ * inet6_add_protocol will return a -1 if it fails
+ * to grab the pointer but the vport initialization
+ * expects a return value of -EEXIST. Set err to
+ * -EEXIST here to ensure proper handling.
+ */
+ err = -EEXIST;
goto ip6_gre_loaded;
}