From: Dmytro Linkin Date: Wed, 23 Jun 2021 13:43:13 +0000 (+0300) Subject: devlink: Decrease refcnt of parent rate object on leaf destroy X-Git-Tag: v5.14-rc1~119^2~46^2~2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1321ed5e76488cfd7a5d3ee83254be9b7c1cc581;p=thirdparty%2Fkernel%2Flinux.git devlink: Decrease refcnt of parent rate object on leaf destroy 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 Reviewed-by: Jiri Pirko Signed-off-by: David S. Miller --- diff --git a/net/core/devlink.c b/net/core/devlink.c index 566ddd147633f..ba27395d8fb33 100644 --- a/net/core/devlink.c +++ b/net/core/devlink.c @@ -9275,6 +9275,8 @@ void devlink_rate_leaf_destroy(struct devlink_port *devlink_port) mutex_lock(&devlink->lock); devlink_rate_notify(devlink_rate, DEVLINK_CMD_RATE_DEL); + if (devlink_rate->parent) + refcount_dec(&devlink_rate->parent->refcnt); list_del(&devlink_rate->list); devlink_port->devlink_rate = NULL; mutex_unlock(&devlink->lock);