devlink: convert most of devlink_fmsg_*() to return void

Since struct devlink_fmsg retains error by now (see 1st patch of this
series), there is no longer need to keep returning it in each call.

This is a separate commit to allow per-driver conversion to stop using
those return values.

Reviewed-by: Jiri Pirko <jiri@nvidia.com>
Signed-off-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Przemek Kitszel 2023-10-18 22:26:47 +02:00 committed by David S. Miller
parent 3465915e99
commit 0050629cd3
2 changed files with 110 additions and 130 deletions

View file

@ -1854,36 +1854,36 @@ int devlink_info_version_running_put_ext(struct devlink_info_req *req,
const char *version_value, const char *version_value,
enum devlink_info_version_type version_type); enum devlink_info_version_type version_type);
int devlink_fmsg_obj_nest_start(struct devlink_fmsg *fmsg); void devlink_fmsg_obj_nest_start(struct devlink_fmsg *fmsg);
int devlink_fmsg_obj_nest_end(struct devlink_fmsg *fmsg); void devlink_fmsg_obj_nest_end(struct devlink_fmsg *fmsg);
int devlink_fmsg_pair_nest_start(struct devlink_fmsg *fmsg, const char *name); void devlink_fmsg_pair_nest_start(struct devlink_fmsg *fmsg, const char *name);
int devlink_fmsg_pair_nest_end(struct devlink_fmsg *fmsg); void devlink_fmsg_pair_nest_end(struct devlink_fmsg *fmsg);
int devlink_fmsg_arr_pair_nest_start(struct devlink_fmsg *fmsg, void devlink_fmsg_arr_pair_nest_start(struct devlink_fmsg *fmsg,
const char *name); const char *name);
int devlink_fmsg_arr_pair_nest_end(struct devlink_fmsg *fmsg); void devlink_fmsg_arr_pair_nest_end(struct devlink_fmsg *fmsg);
int devlink_fmsg_binary_pair_nest_start(struct devlink_fmsg *fmsg, void devlink_fmsg_binary_pair_nest_start(struct devlink_fmsg *fmsg,
const char *name); const char *name);
int devlink_fmsg_binary_pair_nest_end(struct devlink_fmsg *fmsg); void devlink_fmsg_binary_pair_nest_end(struct devlink_fmsg *fmsg);
int devlink_fmsg_u32_put(struct devlink_fmsg *fmsg, u32 value); void devlink_fmsg_u32_put(struct devlink_fmsg *fmsg, u32 value);
int devlink_fmsg_string_put(struct devlink_fmsg *fmsg, const char *value); void devlink_fmsg_string_put(struct devlink_fmsg *fmsg, const char *value);
int devlink_fmsg_binary_put(struct devlink_fmsg *fmsg, const void *value, void devlink_fmsg_binary_put(struct devlink_fmsg *fmsg, const void *value,
u16 value_len); u16 value_len);
int devlink_fmsg_bool_pair_put(struct devlink_fmsg *fmsg, const char *name, void devlink_fmsg_bool_pair_put(struct devlink_fmsg *fmsg, const char *name,
bool value); bool value);
int devlink_fmsg_u8_pair_put(struct devlink_fmsg *fmsg, const char *name, void devlink_fmsg_u8_pair_put(struct devlink_fmsg *fmsg, const char *name,
u8 value); u8 value);
int devlink_fmsg_u32_pair_put(struct devlink_fmsg *fmsg, const char *name, void devlink_fmsg_u32_pair_put(struct devlink_fmsg *fmsg, const char *name,
u32 value); u32 value);
int devlink_fmsg_u64_pair_put(struct devlink_fmsg *fmsg, const char *name, void devlink_fmsg_u64_pair_put(struct devlink_fmsg *fmsg, const char *name,
u64 value); u64 value);
int devlink_fmsg_string_pair_put(struct devlink_fmsg *fmsg, const char *name, void devlink_fmsg_string_pair_put(struct devlink_fmsg *fmsg, const char *name,
const char *value); const char *value);
int devlink_fmsg_binary_pair_put(struct devlink_fmsg *fmsg, const char *name, void devlink_fmsg_binary_pair_put(struct devlink_fmsg *fmsg, const char *name,
const void *value, u32 value_len); const void *value, u32 value_len);
struct devlink_health_reporter * struct devlink_health_reporter *
devl_port_health_reporter_create(struct devlink_port *port, devl_port_health_reporter_create(struct devlink_port *port,

View file

@ -566,16 +566,15 @@ static int devlink_health_do_dump(struct devlink_health_reporter *reporter,
if (!reporter->dump_fmsg) if (!reporter->dump_fmsg)
return -ENOMEM; return -ENOMEM;
err = devlink_fmsg_obj_nest_start(reporter->dump_fmsg); devlink_fmsg_obj_nest_start(reporter->dump_fmsg);
if (err)
goto dump_err;
err = reporter->ops->dump(reporter, reporter->dump_fmsg, err = reporter->ops->dump(reporter, reporter->dump_fmsg,
priv_ctx, extack); priv_ctx, extack);
if (err) if (err)
goto dump_err; goto dump_err;
err = devlink_fmsg_obj_nest_end(reporter->dump_fmsg); devlink_fmsg_obj_nest_end(reporter->dump_fmsg);
err = reporter->dump_fmsg->err;
if (err) if (err)
goto dump_err; goto dump_err;
@ -675,63 +674,61 @@ static void devlink_fmsg_err_if_binary(struct devlink_fmsg *fmsg)
fmsg->err = -EINVAL; fmsg->err = -EINVAL;
} }
static int devlink_fmsg_nest_common(struct devlink_fmsg *fmsg, int attrtype) static void devlink_fmsg_nest_common(struct devlink_fmsg *fmsg, int attrtype)
{ {
struct devlink_fmsg_item *item; struct devlink_fmsg_item *item;
if (fmsg->err) if (fmsg->err)
return fmsg->err; return;
item = kzalloc(sizeof(*item), GFP_KERNEL); item = kzalloc(sizeof(*item), GFP_KERNEL);
if (!item) { if (!item) {
fmsg->err = -ENOMEM; fmsg->err = -ENOMEM;
return fmsg->err; return;
} }
item->attrtype = attrtype; item->attrtype = attrtype;
list_add_tail(&item->list, &fmsg->item_list); list_add_tail(&item->list, &fmsg->item_list);
return 0;
} }
int devlink_fmsg_obj_nest_start(struct devlink_fmsg *fmsg) void devlink_fmsg_obj_nest_start(struct devlink_fmsg *fmsg)
{ {
devlink_fmsg_err_if_binary(fmsg); devlink_fmsg_err_if_binary(fmsg);
return devlink_fmsg_nest_common(fmsg, DEVLINK_ATTR_FMSG_OBJ_NEST_START); devlink_fmsg_nest_common(fmsg, DEVLINK_ATTR_FMSG_OBJ_NEST_START);
} }
EXPORT_SYMBOL_GPL(devlink_fmsg_obj_nest_start); EXPORT_SYMBOL_GPL(devlink_fmsg_obj_nest_start);
static int devlink_fmsg_nest_end(struct devlink_fmsg *fmsg) static void devlink_fmsg_nest_end(struct devlink_fmsg *fmsg)
{ {
devlink_fmsg_err_if_binary(fmsg); devlink_fmsg_err_if_binary(fmsg);
return devlink_fmsg_nest_common(fmsg, DEVLINK_ATTR_FMSG_NEST_END); devlink_fmsg_nest_common(fmsg, DEVLINK_ATTR_FMSG_NEST_END);
} }
int devlink_fmsg_obj_nest_end(struct devlink_fmsg *fmsg) void devlink_fmsg_obj_nest_end(struct devlink_fmsg *fmsg)
{ {
return devlink_fmsg_nest_end(fmsg); devlink_fmsg_nest_end(fmsg);
} }
EXPORT_SYMBOL_GPL(devlink_fmsg_obj_nest_end); EXPORT_SYMBOL_GPL(devlink_fmsg_obj_nest_end);
#define DEVLINK_FMSG_MAX_SIZE (GENLMSG_DEFAULT_SIZE - GENL_HDRLEN - NLA_HDRLEN) #define DEVLINK_FMSG_MAX_SIZE (GENLMSG_DEFAULT_SIZE - GENL_HDRLEN - NLA_HDRLEN)
static int devlink_fmsg_put_name(struct devlink_fmsg *fmsg, const char *name) static void devlink_fmsg_put_name(struct devlink_fmsg *fmsg, const char *name)
{ {
struct devlink_fmsg_item *item; struct devlink_fmsg_item *item;
devlink_fmsg_err_if_binary(fmsg); devlink_fmsg_err_if_binary(fmsg);
if (fmsg->err) if (fmsg->err)
return fmsg->err; return;
if (strlen(name) + 1 > DEVLINK_FMSG_MAX_SIZE) { if (strlen(name) + 1 > DEVLINK_FMSG_MAX_SIZE) {
fmsg->err = -EMSGSIZE; fmsg->err = -EMSGSIZE;
return fmsg->err; return;
} }
item = kzalloc(sizeof(*item) + strlen(name) + 1, GFP_KERNEL); item = kzalloc(sizeof(*item) + strlen(name) + 1, GFP_KERNEL);
if (!item) { if (!item) {
fmsg->err = -ENOMEM; fmsg->err = -ENOMEM;
return fmsg->err; return;
} }
item->nla_type = NLA_NUL_STRING; item->nla_type = NLA_NUL_STRING;
@ -739,83 +736,76 @@ static int devlink_fmsg_put_name(struct devlink_fmsg *fmsg, const char *name)
item->attrtype = DEVLINK_ATTR_FMSG_OBJ_NAME; item->attrtype = DEVLINK_ATTR_FMSG_OBJ_NAME;
memcpy(&item->value, name, item->len); memcpy(&item->value, name, item->len);
list_add_tail(&item->list, &fmsg->item_list); list_add_tail(&item->list, &fmsg->item_list);
return 0;
} }
int devlink_fmsg_pair_nest_start(struct devlink_fmsg *fmsg, const char *name) void devlink_fmsg_pair_nest_start(struct devlink_fmsg *fmsg, const char *name)
{ {
devlink_fmsg_err_if_binary(fmsg); devlink_fmsg_err_if_binary(fmsg);
devlink_fmsg_nest_common(fmsg, DEVLINK_ATTR_FMSG_PAIR_NEST_START); devlink_fmsg_nest_common(fmsg, DEVLINK_ATTR_FMSG_PAIR_NEST_START);
return devlink_fmsg_put_name(fmsg, name); devlink_fmsg_put_name(fmsg, name);
} }
EXPORT_SYMBOL_GPL(devlink_fmsg_pair_nest_start); EXPORT_SYMBOL_GPL(devlink_fmsg_pair_nest_start);
int devlink_fmsg_pair_nest_end(struct devlink_fmsg *fmsg) void devlink_fmsg_pair_nest_end(struct devlink_fmsg *fmsg)
{ {
return devlink_fmsg_nest_end(fmsg); devlink_fmsg_nest_end(fmsg);
} }
EXPORT_SYMBOL_GPL(devlink_fmsg_pair_nest_end); EXPORT_SYMBOL_GPL(devlink_fmsg_pair_nest_end);
int devlink_fmsg_arr_pair_nest_start(struct devlink_fmsg *fmsg, void devlink_fmsg_arr_pair_nest_start(struct devlink_fmsg *fmsg,
const char *name) const char *name)
{ {
devlink_fmsg_pair_nest_start(fmsg, name); devlink_fmsg_pair_nest_start(fmsg, name);
return devlink_fmsg_nest_common(fmsg, DEVLINK_ATTR_FMSG_ARR_NEST_START); devlink_fmsg_nest_common(fmsg, DEVLINK_ATTR_FMSG_ARR_NEST_START);
} }
EXPORT_SYMBOL_GPL(devlink_fmsg_arr_pair_nest_start); EXPORT_SYMBOL_GPL(devlink_fmsg_arr_pair_nest_start);
int devlink_fmsg_arr_pair_nest_end(struct devlink_fmsg *fmsg) void devlink_fmsg_arr_pair_nest_end(struct devlink_fmsg *fmsg)
{ {
devlink_fmsg_nest_end(fmsg); devlink_fmsg_nest_end(fmsg);
return devlink_fmsg_nest_end(fmsg); devlink_fmsg_nest_end(fmsg);
} }
EXPORT_SYMBOL_GPL(devlink_fmsg_arr_pair_nest_end); EXPORT_SYMBOL_GPL(devlink_fmsg_arr_pair_nest_end);
int devlink_fmsg_binary_pair_nest_start(struct devlink_fmsg *fmsg, void devlink_fmsg_binary_pair_nest_start(struct devlink_fmsg *fmsg,
const char *name) const char *name)
{ {
int err; devlink_fmsg_arr_pair_nest_start(fmsg, name);
err = devlink_fmsg_arr_pair_nest_start(fmsg, name);
if (err)
return err;
fmsg->putting_binary = true; fmsg->putting_binary = true;
return 0;
} }
EXPORT_SYMBOL_GPL(devlink_fmsg_binary_pair_nest_start); EXPORT_SYMBOL_GPL(devlink_fmsg_binary_pair_nest_start);
int devlink_fmsg_binary_pair_nest_end(struct devlink_fmsg *fmsg) void devlink_fmsg_binary_pair_nest_end(struct devlink_fmsg *fmsg)
{ {
if (fmsg->err) if (fmsg->err)
return fmsg->err; return;
if (!fmsg->putting_binary) { if (!fmsg->putting_binary)
fmsg->err = -EINVAL; fmsg->err = -EINVAL;
return fmsg->err;
}
fmsg->putting_binary = false; fmsg->putting_binary = false;
return devlink_fmsg_arr_pair_nest_end(fmsg); devlink_fmsg_arr_pair_nest_end(fmsg);
} }
EXPORT_SYMBOL_GPL(devlink_fmsg_binary_pair_nest_end); EXPORT_SYMBOL_GPL(devlink_fmsg_binary_pair_nest_end);
static int devlink_fmsg_put_value(struct devlink_fmsg *fmsg, static void devlink_fmsg_put_value(struct devlink_fmsg *fmsg,
const void *value, u16 value_len, const void *value, u16 value_len,
u8 value_nla_type) u8 value_nla_type)
{ {
struct devlink_fmsg_item *item; struct devlink_fmsg_item *item;
if (fmsg->err)
return;
if (value_len > DEVLINK_FMSG_MAX_SIZE) { if (value_len > DEVLINK_FMSG_MAX_SIZE) {
fmsg->err = -EMSGSIZE; fmsg->err = -EMSGSIZE;
return fmsg->err; return;
} }
item = kzalloc(sizeof(*item) + value_len, GFP_KERNEL); item = kzalloc(sizeof(*item) + value_len, GFP_KERNEL);
if (!item) { if (!item) {
fmsg->err = -ENOMEM; fmsg->err = -ENOMEM;
return fmsg->err; return;
} }
item->nla_type = value_nla_type; item->nla_type = value_nla_type;
@ -823,125 +813,113 @@ static int devlink_fmsg_put_value(struct devlink_fmsg *fmsg,
item->attrtype = DEVLINK_ATTR_FMSG_OBJ_VALUE_DATA; item->attrtype = DEVLINK_ATTR_FMSG_OBJ_VALUE_DATA;
memcpy(&item->value, value, item->len); memcpy(&item->value, value, item->len);
list_add_tail(&item->list, &fmsg->item_list); list_add_tail(&item->list, &fmsg->item_list);
return 0;
} }
static int devlink_fmsg_bool_put(struct devlink_fmsg *fmsg, bool value) static void devlink_fmsg_bool_put(struct devlink_fmsg *fmsg, bool value)
{ {
devlink_fmsg_err_if_binary(fmsg); devlink_fmsg_err_if_binary(fmsg);
return devlink_fmsg_put_value(fmsg, &value, sizeof(value), NLA_FLAG); devlink_fmsg_put_value(fmsg, &value, sizeof(value), NLA_FLAG);
} }
static int devlink_fmsg_u8_put(struct devlink_fmsg *fmsg, u8 value) static void devlink_fmsg_u8_put(struct devlink_fmsg *fmsg, u8 value)
{ {
devlink_fmsg_err_if_binary(fmsg); devlink_fmsg_err_if_binary(fmsg);
return devlink_fmsg_put_value(fmsg, &value, sizeof(value), NLA_U8); devlink_fmsg_put_value(fmsg, &value, sizeof(value), NLA_U8);
} }
int devlink_fmsg_u32_put(struct devlink_fmsg *fmsg, u32 value) void devlink_fmsg_u32_put(struct devlink_fmsg *fmsg, u32 value)
{ {
devlink_fmsg_err_if_binary(fmsg); devlink_fmsg_err_if_binary(fmsg);
return devlink_fmsg_put_value(fmsg, &value, sizeof(value), NLA_U32); devlink_fmsg_put_value(fmsg, &value, sizeof(value), NLA_U32);
} }
EXPORT_SYMBOL_GPL(devlink_fmsg_u32_put); EXPORT_SYMBOL_GPL(devlink_fmsg_u32_put);
static int devlink_fmsg_u64_put(struct devlink_fmsg *fmsg, u64 value) static void devlink_fmsg_u64_put(struct devlink_fmsg *fmsg, u64 value)
{ {
devlink_fmsg_err_if_binary(fmsg); devlink_fmsg_err_if_binary(fmsg);
return devlink_fmsg_put_value(fmsg, &value, sizeof(value), NLA_U64); devlink_fmsg_put_value(fmsg, &value, sizeof(value), NLA_U64);
} }
int devlink_fmsg_string_put(struct devlink_fmsg *fmsg, const char *value) void devlink_fmsg_string_put(struct devlink_fmsg *fmsg, const char *value)
{ {
devlink_fmsg_err_if_binary(fmsg); devlink_fmsg_err_if_binary(fmsg);
return devlink_fmsg_put_value(fmsg, value, strlen(value) + 1, devlink_fmsg_put_value(fmsg, value, strlen(value) + 1, NLA_NUL_STRING);
NLA_NUL_STRING);
} }
EXPORT_SYMBOL_GPL(devlink_fmsg_string_put); EXPORT_SYMBOL_GPL(devlink_fmsg_string_put);
int devlink_fmsg_binary_put(struct devlink_fmsg *fmsg, const void *value, void devlink_fmsg_binary_put(struct devlink_fmsg *fmsg, const void *value,
u16 value_len) u16 value_len)
{ {
if (!fmsg->putting_binary) if (!fmsg->err && !fmsg->putting_binary)
return -EINVAL; fmsg->err = -EINVAL;
return devlink_fmsg_put_value(fmsg, value, value_len, NLA_BINARY); devlink_fmsg_put_value(fmsg, value, value_len, NLA_BINARY);
} }
EXPORT_SYMBOL_GPL(devlink_fmsg_binary_put); EXPORT_SYMBOL_GPL(devlink_fmsg_binary_put);
int devlink_fmsg_bool_pair_put(struct devlink_fmsg *fmsg, const char *name, void devlink_fmsg_bool_pair_put(struct devlink_fmsg *fmsg, const char *name,
bool value) bool value)
{ {
devlink_fmsg_pair_nest_start(fmsg, name); devlink_fmsg_pair_nest_start(fmsg, name);
devlink_fmsg_bool_put(fmsg, value); devlink_fmsg_bool_put(fmsg, value);
return devlink_fmsg_pair_nest_end(fmsg); devlink_fmsg_pair_nest_end(fmsg);
} }
EXPORT_SYMBOL_GPL(devlink_fmsg_bool_pair_put); EXPORT_SYMBOL_GPL(devlink_fmsg_bool_pair_put);
int devlink_fmsg_u8_pair_put(struct devlink_fmsg *fmsg, const char *name, void devlink_fmsg_u8_pair_put(struct devlink_fmsg *fmsg, const char *name,
u8 value) u8 value)
{ {
devlink_fmsg_pair_nest_start(fmsg, name); devlink_fmsg_pair_nest_start(fmsg, name);
devlink_fmsg_u8_put(fmsg, value); devlink_fmsg_u8_put(fmsg, value);
return devlink_fmsg_pair_nest_end(fmsg); devlink_fmsg_pair_nest_end(fmsg);
} }
EXPORT_SYMBOL_GPL(devlink_fmsg_u8_pair_put); EXPORT_SYMBOL_GPL(devlink_fmsg_u8_pair_put);
int devlink_fmsg_u32_pair_put(struct devlink_fmsg *fmsg, const char *name, void devlink_fmsg_u32_pair_put(struct devlink_fmsg *fmsg, const char *name,
u32 value) u32 value)
{ {
devlink_fmsg_pair_nest_start(fmsg, name); devlink_fmsg_pair_nest_start(fmsg, name);
devlink_fmsg_u32_put(fmsg, value); devlink_fmsg_u32_put(fmsg, value);
return devlink_fmsg_pair_nest_end(fmsg); devlink_fmsg_pair_nest_end(fmsg);
} }
EXPORT_SYMBOL_GPL(devlink_fmsg_u32_pair_put); EXPORT_SYMBOL_GPL(devlink_fmsg_u32_pair_put);
int devlink_fmsg_u64_pair_put(struct devlink_fmsg *fmsg, const char *name, void devlink_fmsg_u64_pair_put(struct devlink_fmsg *fmsg, const char *name,
u64 value) u64 value)
{ {
devlink_fmsg_pair_nest_start(fmsg, name); devlink_fmsg_pair_nest_start(fmsg, name);
devlink_fmsg_u64_put(fmsg, value); devlink_fmsg_u64_put(fmsg, value);
return devlink_fmsg_pair_nest_end(fmsg); devlink_fmsg_pair_nest_end(fmsg);
} }
EXPORT_SYMBOL_GPL(devlink_fmsg_u64_pair_put); EXPORT_SYMBOL_GPL(devlink_fmsg_u64_pair_put);
int devlink_fmsg_string_pair_put(struct devlink_fmsg *fmsg, const char *name, void devlink_fmsg_string_pair_put(struct devlink_fmsg *fmsg, const char *name,
const char *value) const char *value)
{ {
devlink_fmsg_pair_nest_start(fmsg, name); devlink_fmsg_pair_nest_start(fmsg, name);
devlink_fmsg_string_put(fmsg, value); devlink_fmsg_string_put(fmsg, value);
return devlink_fmsg_pair_nest_end(fmsg); devlink_fmsg_pair_nest_end(fmsg);
} }
EXPORT_SYMBOL_GPL(devlink_fmsg_string_pair_put); EXPORT_SYMBOL_GPL(devlink_fmsg_string_pair_put);
int devlink_fmsg_binary_pair_put(struct devlink_fmsg *fmsg, const char *name, void devlink_fmsg_binary_pair_put(struct devlink_fmsg *fmsg, const char *name,
const void *value, u32 value_len) const void *value, u32 value_len)
{ {
u32 data_size; u32 data_size;
u32 offset; u32 offset;
int err;
err = devlink_fmsg_binary_pair_nest_start(fmsg, name); devlink_fmsg_binary_pair_nest_start(fmsg, name);
if (err)
return err;
for (offset = 0; offset < value_len; offset += data_size) { for (offset = 0; offset < value_len; offset += data_size) {
data_size = value_len - offset; data_size = value_len - offset;
if (data_size > DEVLINK_FMSG_MAX_SIZE) if (data_size > DEVLINK_FMSG_MAX_SIZE)
data_size = DEVLINK_FMSG_MAX_SIZE; data_size = DEVLINK_FMSG_MAX_SIZE;
err = devlink_fmsg_binary_put(fmsg, value + offset, data_size);
if (err) devlink_fmsg_binary_put(fmsg, value + offset, data_size);
break;
/* Exit from loop with a break (instead of
* return) to make sure putting_binary is turned off
*/
} }
err = devlink_fmsg_binary_pair_nest_end(fmsg); devlink_fmsg_binary_pair_nest_end(fmsg);
fmsg->putting_binary = false; fmsg->putting_binary = false;
return err;
} }
EXPORT_SYMBOL_GPL(devlink_fmsg_binary_pair_put); EXPORT_SYMBOL_GPL(devlink_fmsg_binary_pair_put);
@ -1051,6 +1029,9 @@ static int devlink_fmsg_snd(struct devlink_fmsg *fmsg,
void *hdr; void *hdr;
int err; int err;
if (fmsg->err)
return fmsg->err;
while (!last) { while (!last) {
int tmp_index = index; int tmp_index = index;
@ -1104,6 +1085,9 @@ static int devlink_fmsg_dumpit(struct devlink_fmsg *fmsg, struct sk_buff *skb,
void *hdr; void *hdr;
int err; int err;
if (fmsg->err)
return fmsg->err;
hdr = genlmsg_put(skb, NETLINK_CB(cb->skb).portid, cb->nlh->nlmsg_seq, hdr = genlmsg_put(skb, NETLINK_CB(cb->skb).portid, cb->nlh->nlmsg_seq,
&devlink_nl_family, NLM_F_ACK | NLM_F_MULTI, cmd); &devlink_nl_family, NLM_F_ACK | NLM_F_MULTI, cmd);
if (!hdr) { if (!hdr) {
@ -1143,17 +1127,13 @@ int devlink_nl_cmd_health_reporter_diagnose_doit(struct sk_buff *skb,
if (!fmsg) if (!fmsg)
return -ENOMEM; return -ENOMEM;
err = devlink_fmsg_obj_nest_start(fmsg); devlink_fmsg_obj_nest_start(fmsg);
if (err)
goto out;
err = reporter->ops->diagnose(reporter, fmsg, info->extack); err = reporter->ops->diagnose(reporter, fmsg, info->extack);
if (err) if (err)
goto out; goto out;
err = devlink_fmsg_obj_nest_end(fmsg); devlink_fmsg_obj_nest_end(fmsg);
if (err)
goto out;
err = devlink_fmsg_snd(fmsg, info, err = devlink_fmsg_snd(fmsg, info,
DEVLINK_CMD_HEALTH_REPORTER_DIAGNOSE, 0); DEVLINK_CMD_HEALTH_REPORTER_DIAGNOSE, 0);