Thread (16 messages) 16 messages, 3 authors, 2022-10-28

Re: [PATCH net-next v7 4/9] devlink: Allow for devlink-rate nodes parent reassignment

From: Wilczynski, Michal <hidden>
Date: 2022-10-28 09:37:28


On 10/28/2022 12:34 AM, Przemek Kitszel wrote:
From:   Michal Wilczynski <redacted>
Date:   Thu, 27 Oct 2022 15:00:44 +0200

[...]
quoted
diff --git a/net/core/devlink.c b/net/core/devlink.c
index 864fa0967b7a..1e0c1b0376bf 100644
--- a/net/core/devlink.c
+++ b/net/core/devlink.c
@@ -1875,10 +1875,9 @@ devlink_nl_rate_parent_node_set(struct devlink_rate *devlink_rate,
  	int err = -EOPNOTSUPP;
  
  	parent = devlink_rate->parent;
-	if (parent && len) {
-		NL_SET_ERR_MSG_MOD(info->extack, "Rate object already has parent.");
-		return -EBUSY;
-	} else if (parent && !len) {
+
+	/* if a parent is already set, just reassign the parent */
+	if (parent && !len) {
Comment that you have added should be placed way below, here it is misleading.
In my mind it made sense, cause we're handling an additional case here that
wasn't handled before. I think I'll just remove the comment then if you
find it misleading.
quoted
  		if (devlink_rate_is_leaf(devlink_rate))
  			err = ops->rate_leaf_parent_set(devlink_rate, NULL,
  							devlink_rate->priv, NULL,
@@ -1892,7 +1891,7 @@ devlink_nl_rate_parent_node_set(struct devlink_rate *devlink_rate,
  
  		refcount_dec(&parent->refcnt);
  		devlink_rate->parent = NULL;
-	} else if (!parent && len) {
+	} else if (len) {
  		parent = devlink_rate_node_get_by_name(devlink, parent_name);
  		if (IS_ERR(parent))
  			return -ENODEV;
@@ -1919,6 +1918,10 @@ devlink_nl_rate_parent_node_set(struct devlink_rate *devlink_rate,
  		if (err)
  			return err;
  
Comment above makes more sense here, likely combined with the one just below.
They would duplicate in my mind, so I'll just remove the upper one.
quoted
+		if (devlink_rate->parent)
+			/* we're reassigning to other parent in this case */
+			refcount_dec(&devlink_rate->parent->refcnt);
+
  		refcount_inc(&parent->refcnt);
  		devlink_rate->parent = parent;
  	}
--
Thanks for splitting this patch out of the other, change itself is easier
to follow now. Code (modulo comments) is correct, you could add my Reviewed-by
after comment fix.

Side note: ops (rate_{leaf|node}_parent_set) lack documentation. There is also
not much usage of them as of now, so maybe we could extend them to actually do
refcount_inc + refcount_dec (if applicable) + set pointers.
I'm not sure I follow you there, those are function pointers, and are 
supposed
to be implemented in the driver.
OTOH: As of now those are more of "on-event" callbacks, not "do-something",
what is further confirmed in name (word "set" on the end, not begining).

--PK
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help