• Jakub Kicinski's avatar
    ethtool: don't drop the rtnl_lock half way thru the ioctl · 1af0a094
    Jakub Kicinski authored
    devlink compat code needs to drop rtnl_lock to take
    devlink->lock to ensure correct lock ordering.
    
    This is problematic because we're not strictly guaranteed
    that the netdev will not disappear after we re-lock.
    It may open a possibility of nested ->begin / ->complete
    calls.
    
    Instead of calling into devlink under rtnl_lock take
    a ref on the devlink instance and make the call after
    we've dropped rtnl_lock.
    
    We (continue to) assume that netdevs have an implicit
    reference on the devlink returned from ndo_get_devlink_port
    
    Note that ndo_get_devlink_port will now get called
    under rtnl_lock. That should be fine since none of
    the drivers seem to be taking serious locks inside
    ndo_get_devlink_port.
    Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    Reviewed-by: default avatarLeon Romanovsky <leonro@nvidia.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    1af0a094
devlink.c 294 KB