lkml.org 
[lkml]   [2020]   [Jan]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.19 438/639] net/af_iucv: always register net_device notifier
    Date
    From: Julian Wiedmann <jwi@linux.ibm.com>

    [ Upstream commit 06996c1d4088a0d5f3e7789d7f96b4653cc947cc ]

    Even when running as VM guest (ie pr_iucv != NULL), af_iucv can still
    open HiperTransport-based connections. For robust operation these
    connections require the af_iucv_netdev_notifier, so register it
    unconditionally.

    Also handle any error that register_netdevice_notifier() returns.

    Fixes: 9fbd87d41392 ("af_iucv: handle netdev events")
    Signed-off-by: Julian Wiedmann <jwi@linux.ibm.com>
    Reviewed-by: Ursula Braun <ubraun@linux.ibm.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    net/iucv/af_iucv.c | 27 ++++++++++++++++++++-------
    1 file changed, 20 insertions(+), 7 deletions(-)

    diff --git a/net/iucv/af_iucv.c b/net/iucv/af_iucv.c
    index e07daee1227c3..23a1002ed86dd 100644
    --- a/net/iucv/af_iucv.c
    +++ b/net/iucv/af_iucv.c
    @@ -2465,6 +2465,13 @@ out:
    return err;
    }

    +static void afiucv_iucv_exit(void)
    +{
    + device_unregister(af_iucv_dev);
    + driver_unregister(&af_iucv_driver);
    + pr_iucv->iucv_unregister(&af_iucv_handler, 0);
    +}
    +
    static int __init afiucv_init(void)
    {
    int err;
    @@ -2498,11 +2505,18 @@ static int __init afiucv_init(void)
    err = afiucv_iucv_init();
    if (err)
    goto out_sock;
    - } else
    - register_netdevice_notifier(&afiucv_netdev_notifier);
    + }
    +
    + err = register_netdevice_notifier(&afiucv_netdev_notifier);
    + if (err)
    + goto out_notifier;
    +
    dev_add_pack(&iucv_packet_type);
    return 0;

    +out_notifier:
    + if (pr_iucv)
    + afiucv_iucv_exit();
    out_sock:
    sock_unregister(PF_IUCV);
    out_proto:
    @@ -2516,12 +2530,11 @@ out:
    static void __exit afiucv_exit(void)
    {
    if (pr_iucv) {
    - device_unregister(af_iucv_dev);
    - driver_unregister(&af_iucv_driver);
    - pr_iucv->iucv_unregister(&af_iucv_handler, 0);
    + afiucv_iucv_exit();
    symbol_put(iucv_if);
    - } else
    - unregister_netdevice_notifier(&afiucv_netdev_notifier);
    + }
    +
    + unregister_netdevice_notifier(&afiucv_netdev_notifier);
    dev_remove_pack(&iucv_packet_type);
    sock_unregister(PF_IUCV);
    proto_unregister(&iucv_proto);
    --
    2.20.1


    \
     
     \ /
      Last update: 2020-01-24 12:25    [W:2.293 / U:0.152 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site