[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20210120134025.GD3565223@nanopsycho.orion>
Date: Wed, 20 Jan 2021 14:40:25 +0100
From: Jiri Pirko <jiri@...nulli.us>
To: Ivan Vecera <ivecera@...hat.com>
Cc: netdev@...r.kernel.org, saeed@...nel.org
Subject: Re: [PATCH net] team: postpone features update to avoid deadlock
Wed, Jan 20, 2021 at 01:23:54PM CET, ivecera@...hat.com wrote:
>Team driver protects port list traversal by its team->lock mutex
>in functions like team_change_mtu(), team_set_rx_mode(),
>team_vlan_rx_{add,del}_vid() etc.
>These functions call appropriate callbacks of all enslaved
>devices. Some drivers need to update their features under
>certain conditions (e.g. TSO is broken for jumbo frames etc.) so
>they call netdev_update_features(). This causes a deadlock because
>netdev_update_features() calls netdevice notifiers and one of them
>is team_device_event() that in case of NETDEV_FEAT_CHANGE tries lock
>team->lock mutex again.
>
>Example (r8169 case):
>...
>[ 6391.348202] __mutex_lock.isra.6+0x2d0/0x4a0
>[ 6391.358602] team_device_event+0x9d/0x160 [team]
>[ 6391.363756] notifier_call_chain+0x47/0x70
>[ 6391.368329] netdev_update_features+0x56/0x60
>[ 6391.373207] rtl8169_change_mtu+0x14/0x50 [r8169]
>[ 6391.378457] dev_set_mtu_ext+0xe1/0x1d0
>[ 6391.387022] dev_set_mtu+0x52/0x90
>[ 6391.390820] team_change_mtu+0x64/0xf0 [team]
>[ 6391.395683] dev_set_mtu_ext+0xe1/0x1d0
>[ 6391.399963] do_setlink+0x231/0xf50
>...
>
>To fix the problem __team_compute_features() needs to be postponed
>for these cases.
>
>Fixes: 3d249d4ca7d0 ("net: introduce ethernet teaming device")
>Cc: Jiri Pirko <jiri@...nulli.us>
>Signed-off-by: Ivan Vecera <ivecera@...hat.com>
Reviewed-by: Jiri Pirko <jiri@...dia.com>
Powered by blists - more mailing lists