From: Dmytro Linkin <redacted>
Port functions, like SFs, can be deleted by the user when its leaf rate
object has parent node. In such case node refcnt won't be decreased
which blocks the node from deletion later.
Do simple refcnt decrease, since driver in cleanup stage. This:
1) assumes that driver took proper internal parent unset action;
2) allows to avoid nested callbacks call and deadlock.
Fixes: d75559845078 ("devlink: Allow setting parent node of rate objects")
Signed-off-by: Dmytro Linkin <redacted>
Reviewed-by: Jiri Pirko <redacted>
---
net/core/devlink.c | 2 ++
1 file changed, 2 insertions(+)
From: Dmytro Linkin <redacted>
When eswitch is disabled, querying its current mode results in error.
Due to this when trying to set the eswitch mode for mlx5 devices, it
fails to set the eswitch switchdev mode.
Hence remove such check.
Fixes: a8ecb93ef03d ("devlink: Introduce rate nodes")
Signed-off-by: Dmytro Linkin <redacted>
Reviewed-by: Parav Pandit <redacted>
Reviewed-by: Jiri Pirko <redacted>
---
net/core/devlink.c | 11 -----------
1 file changed, 11 deletions(-)
From: Dmytro Linkin <redacted>
Devlink eswitch set command doesn't hold devlink->lock, which makes
possible race condition between rate list traversing and others devlink
rate KAPI calls, like devlink_rate_nodes_destroy().
Hold devlink lock while traversing the list.
Fixes: a8ecb93ef03d ("devlink: Introduce rate nodes")
Signed-off-by: Dmytro Linkin <redacted>
Reviewed-by: Parav Pandit <redacted>
Reviewed-by: Jiri Pirko <redacted>
---
net/core/devlink.c | 4 ++++
1 file changed, 4 insertions(+)
@@ -2710,11 +2710,15 @@ static int devlink_rate_nodes_check(struct devlink *devlink, u16 mode,{structdevlink_rate*devlink_rate;+/* Take the lock to sync with devlink_rate_nodes_destroy() */+mutex_lock(&devlink->lock);list_for_each_entry(devlink_rate,&devlink->rate_list,list)if(devlink_rate_is_node(devlink_rate)){+mutex_unlock(&devlink->lock);NL_SET_ERR_MSG_MOD(extack,"Rate node(s) exists.");return-EBUSY;}+mutex_unlock(&devlink->lock);return0;}