aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv4
diff options
context:
space:
mode:
authorMathias Krause <minipli@googlemail.com>2014-05-09 17:43:42 -0400
committerSteffen Klassert <steffen.klassert@secunet.com>2014-06-26 02:21:57 -0400
commit1990e4f883a6383b04ef37f32bdaa02dc0dbae8d (patch)
tree10df5de557e665e09809dbdf84b0938a68d5a72f /net/ipv4
parente59d82fd33f7670cf67fd69cf684aa589ec8340a (diff)
vti: Simplify error handling in module init and exit
The error handling in the module init and exit functions can be shortened to safe us some code. 1/ Remove the code duplications in the init function, jump straight to the existing cleanup code by adding some labels. Also give the error message some more value by telling the reason why loading the module has failed. Furthermore fix the "IPSec" typo -- it should be "IPsec" instead. 2/ Remove the error handling in the exit function as the only legitimate reason xfrm4_protocol_deregister() might fail is inet_del_protocol() returning -1. That, in turn, means some other protocol handler had been registered for this very protocol in the meantime. But that essentially means we haven't been handling that protocol any more, anyway. What it definitely means not is that we "can't deregister tunnel". Therefore just get rid of that bogus warning. It's plain wrong. Signed-off-by: Mathias Krause <minipli@googlemail.com> Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
Diffstat (limited to 'net/ipv4')
-rw-r--r--net/ipv4/ip_vti.c54
1 files changed, 21 insertions, 33 deletions
diff --git a/net/ipv4/ip_vti.c b/net/ipv4/ip_vti.c
index b8960f3527f3..e453cb724a95 100644
--- a/net/ipv4/ip_vti.c
+++ b/net/ipv4/ip_vti.c
@@ -534,40 +534,28 @@ static struct rtnl_link_ops vti_link_ops __read_mostly = {
534 534
535static int __init vti_init(void) 535static int __init vti_init(void)
536{ 536{
537 const char *msg;
537 int err; 538 int err;
538 539
539 pr_info("IPv4 over IPSec tunneling driver\n"); 540 pr_info("IPv4 over IPsec tunneling driver\n");
540 541
542 msg = "tunnel device";
541 err = register_pernet_device(&vti_net_ops); 543 err = register_pernet_device(&vti_net_ops);
542 if (err < 0) 544 if (err < 0)
543 return err; 545 goto pernet_dev_failed;
544 err = xfrm4_protocol_register(&vti_esp4_protocol, IPPROTO_ESP);
545 if (err < 0) {
546 unregister_pernet_device(&vti_net_ops);
547 pr_info("vti init: can't register tunnel\n");
548
549 return err;
550 }
551 546
547 msg = "tunnel protocols";
548 err = xfrm4_protocol_register(&vti_esp4_protocol, IPPROTO_ESP);
549 if (err < 0)
550 goto xfrm_proto_esp_failed;
552 err = xfrm4_protocol_register(&vti_ah4_protocol, IPPROTO_AH); 551 err = xfrm4_protocol_register(&vti_ah4_protocol, IPPROTO_AH);
553 if (err < 0) { 552 if (err < 0)
554 xfrm4_protocol_deregister(&vti_esp4_protocol, IPPROTO_ESP); 553 goto xfrm_proto_ah_failed;
555 unregister_pernet_device(&vti_net_ops);
556 pr_info("vti init: can't register tunnel\n");
557
558 return err;
559 }
560
561 err = xfrm4_protocol_register(&vti_ipcomp4_protocol, IPPROTO_COMP); 554 err = xfrm4_protocol_register(&vti_ipcomp4_protocol, IPPROTO_COMP);
562 if (err < 0) { 555 if (err < 0)
563 xfrm4_protocol_deregister(&vti_ah4_protocol, IPPROTO_AH); 556 goto xfrm_proto_comp_failed;
564 xfrm4_protocol_deregister(&vti_esp4_protocol, IPPROTO_ESP);
565 unregister_pernet_device(&vti_net_ops);
566 pr_info("vti init: can't register tunnel\n");
567
568 return err;
569 }
570 557
558 msg = "netlink interface";
571 err = rtnl_link_register(&vti_link_ops); 559 err = rtnl_link_register(&vti_link_ops);
572 if (err < 0) 560 if (err < 0)
573 goto rtnl_link_failed; 561 goto rtnl_link_failed;
@@ -576,23 +564,23 @@ static int __init vti_init(void)
576 564
577rtnl_link_failed: 565rtnl_link_failed:
578 xfrm4_protocol_deregister(&vti_ipcomp4_protocol, IPPROTO_COMP); 566 xfrm4_protocol_deregister(&vti_ipcomp4_protocol, IPPROTO_COMP);
567xfrm_proto_comp_failed:
579 xfrm4_protocol_deregister(&vti_ah4_protocol, IPPROTO_AH); 568 xfrm4_protocol_deregister(&vti_ah4_protocol, IPPROTO_AH);
569xfrm_proto_ah_failed:
580 xfrm4_protocol_deregister(&vti_esp4_protocol, IPPROTO_ESP); 570 xfrm4_protocol_deregister(&vti_esp4_protocol, IPPROTO_ESP);
571xfrm_proto_esp_failed:
581 unregister_pernet_device(&vti_net_ops); 572 unregister_pernet_device(&vti_net_ops);
573pernet_dev_failed:
574 pr_err("vti init: failed to register %s\n", msg);
582 return err; 575 return err;
583} 576}
584 577
585static void __exit vti_fini(void) 578static void __exit vti_fini(void)
586{ 579{
587 rtnl_link_unregister(&vti_link_ops); 580 rtnl_link_unregister(&vti_link_ops);
588 if (xfrm4_protocol_deregister(&vti_ipcomp4_protocol, IPPROTO_COMP)) 581 xfrm4_protocol_deregister(&vti_ipcomp4_protocol, IPPROTO_COMP);
589 pr_info("vti close: can't deregister tunnel\n"); 582 xfrm4_protocol_deregister(&vti_ah4_protocol, IPPROTO_AH);
590 if (xfrm4_protocol_deregister(&vti_ah4_protocol, IPPROTO_AH)) 583 xfrm4_protocol_deregister(&vti_esp4_protocol, IPPROTO_ESP);
591 pr_info("vti close: can't deregister tunnel\n");
592 if (xfrm4_protocol_deregister(&vti_esp4_protocol, IPPROTO_ESP))
593 pr_info("vti close: can't deregister tunnel\n");
594
595
596 unregister_pernet_device(&vti_net_ops); 584 unregister_pernet_device(&vti_net_ops);
597} 585}
598 586