aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--net/iucv/af_iucv.c27
1 files changed, 20 insertions, 7 deletions
diff --git a/net/iucv/af_iucv.c b/net/iucv/af_iucv.c
index 5264a182d2c3..09e1694b6d34 100644
--- a/net/iucv/af_iucv.c
+++ b/net/iucv/af_iucv.c
@@ -2440,6 +2440,13 @@ out:
2440 return err; 2440 return err;
2441} 2441}
2442 2442
2443static void afiucv_iucv_exit(void)
2444{
2445 device_unregister(af_iucv_dev);
2446 driver_unregister(&af_iucv_driver);
2447 pr_iucv->iucv_unregister(&af_iucv_handler, 0);
2448}
2449
2443static int __init afiucv_init(void) 2450static int __init afiucv_init(void)
2444{ 2451{
2445 int err; 2452 int err;
@@ -2473,11 +2480,18 @@ static int __init afiucv_init(void)
2473 err = afiucv_iucv_init(); 2480 err = afiucv_iucv_init();
2474 if (err) 2481 if (err)
2475 goto out_sock; 2482 goto out_sock;
2476 } else 2483 }
2477 register_netdevice_notifier(&afiucv_netdev_notifier); 2484
2485 err = register_netdevice_notifier(&afiucv_netdev_notifier);
2486 if (err)
2487 goto out_notifier;
2488
2478 dev_add_pack(&iucv_packet_type); 2489 dev_add_pack(&iucv_packet_type);
2479 return 0; 2490 return 0;
2480 2491
2492out_notifier:
2493 if (pr_iucv)
2494 afiucv_iucv_exit();
2481out_sock: 2495out_sock:
2482 sock_unregister(PF_IUCV); 2496 sock_unregister(PF_IUCV);
2483out_proto: 2497out_proto:
@@ -2491,12 +2505,11 @@ out:
2491static void __exit afiucv_exit(void) 2505static void __exit afiucv_exit(void)
2492{ 2506{
2493 if (pr_iucv) { 2507 if (pr_iucv) {
2494 device_unregister(af_iucv_dev); 2508 afiucv_iucv_exit();
2495 driver_unregister(&af_iucv_driver);
2496 pr_iucv->iucv_unregister(&af_iucv_handler, 0);
2497 symbol_put(iucv_if); 2509 symbol_put(iucv_if);
2498 } else 2510 }
2499 unregister_netdevice_notifier(&afiucv_netdev_notifier); 2511
2512 unregister_netdevice_notifier(&afiucv_netdev_notifier);
2500 dev_remove_pack(&iucv_packet_type); 2513 dev_remove_pack(&iucv_packet_type);
2501 sock_unregister(PF_IUCV); 2514 sock_unregister(PF_IUCV);
2502 proto_unregister(&iucv_proto); 2515 proto_unregister(&iucv_proto);