]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
devlink: refactor devlink_nl_param_value_fill_one()
authorDaniel Zahka <daniel.zahka@gmail.com>
Wed, 19 Nov 2025 02:50:32 +0000 (18:50 -0800)
committerJakub Kicinski <kuba@kernel.org>
Fri, 21 Nov 2025 03:01:22 +0000 (19:01 -0800)
Lift the param type demux and value attr placement into a separate
function. This new function, devlink_nl_param_put(), can be used to
place additional types values in the value array, e.g., default,
current, next values. This commit has no functional change.

Signed-off-by: Daniel Zahka <daniel.zahka@gmail.com>
Link: https://patch.msgid.link/20251119025038.651131-3-daniel.zahka@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/devlink/param.c

index 3dbd023e4c36c25ca04712c146ba7c7d5639a7fd..3aa14ef345f0796c3d4c6ee30fd3ab3519bdd50d 100644 (file)
@@ -193,58 +193,66 @@ static int devlink_param_set(struct devlink *devlink,
 }
 
 static int
-devlink_nl_param_value_fill_one(struct sk_buff *msg,
-                               enum devlink_param_type type,
-                               enum devlink_param_cmode cmode,
-                               union devlink_param_value val)
+devlink_nl_param_value_put(struct sk_buff *msg, enum devlink_param_type type,
+                          int nla_type, union devlink_param_value val)
 {
-       struct nlattr *param_value_attr;
-
-       param_value_attr = nla_nest_start_noflag(msg,
-                                                DEVLINK_ATTR_PARAM_VALUE);
-       if (!param_value_attr)
-               goto nla_put_failure;
-
-       if (nla_put_u8(msg, DEVLINK_ATTR_PARAM_VALUE_CMODE, cmode))
-               goto value_nest_cancel;
-
        switch (type) {
        case DEVLINK_PARAM_TYPE_U8:
-               if (nla_put_u8(msg, DEVLINK_ATTR_PARAM_VALUE_DATA, val.vu8))
-                       goto value_nest_cancel;
+               if (nla_put_u8(msg, nla_type, val.vu8))
+                       return -EMSGSIZE;
                break;
        case DEVLINK_PARAM_TYPE_U16:
-               if (nla_put_u16(msg, DEVLINK_ATTR_PARAM_VALUE_DATA, val.vu16))
-                       goto value_nest_cancel;
+               if (nla_put_u16(msg, nla_type, val.vu16))
+                       return -EMSGSIZE;
                break;
        case DEVLINK_PARAM_TYPE_U32:
-               if (nla_put_u32(msg, DEVLINK_ATTR_PARAM_VALUE_DATA, val.vu32))
-                       goto value_nest_cancel;
+               if (nla_put_u32(msg, nla_type, val.vu32))
+                       return -EMSGSIZE;
                break;
        case DEVLINK_PARAM_TYPE_U64:
-               if (devlink_nl_put_u64(msg, DEVLINK_ATTR_PARAM_VALUE_DATA,
-                                      val.vu64))
-                       goto value_nest_cancel;
+               if (devlink_nl_put_u64(msg, nla_type, val.vu64))
+                       return -EMSGSIZE;
                break;
        case DEVLINK_PARAM_TYPE_STRING:
-               if (nla_put_string(msg, DEVLINK_ATTR_PARAM_VALUE_DATA,
-                                  val.vstr))
-                       goto value_nest_cancel;
+               if (nla_put_string(msg, nla_type, val.vstr))
+                       return -EMSGSIZE;
                break;
        case DEVLINK_PARAM_TYPE_BOOL:
-               if (val.vbool &&
-                   nla_put_flag(msg, DEVLINK_ATTR_PARAM_VALUE_DATA))
-                       goto value_nest_cancel;
+               if (val.vbool && nla_put_flag(msg, nla_type))
+                       return -EMSGSIZE;
                break;
        }
+       return 0;
+}
+
+static int
+devlink_nl_param_value_fill_one(struct sk_buff *msg,
+                               enum devlink_param_type type,
+                               enum devlink_param_cmode cmode,
+                               union devlink_param_value val)
+{
+       struct nlattr *param_value_attr;
+       int err = -EMSGSIZE;
+
+       param_value_attr = nla_nest_start_noflag(msg,
+                                                DEVLINK_ATTR_PARAM_VALUE);
+       if (!param_value_attr)
+               return -EMSGSIZE;
+
+       if (nla_put_u8(msg, DEVLINK_ATTR_PARAM_VALUE_CMODE, cmode))
+               goto value_nest_cancel;
+
+       err = devlink_nl_param_value_put(msg, type,
+                                        DEVLINK_ATTR_PARAM_VALUE_DATA, val);
+       if (err)
+               goto value_nest_cancel;
 
        nla_nest_end(msg, param_value_attr);
        return 0;
 
 value_nest_cancel:
        nla_nest_cancel(msg, param_value_attr);
-nla_put_failure:
-       return -EMSGSIZE;
+       return err;
 }
 
 static int devlink_nl_param_fill(struct sk_buff *msg, struct devlink *devlink,