Commit 0050629c authored by Przemek Kitszel's avatar Przemek Kitszel Committed by David S. Miller
Browse files

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: default avatarJiri Pirko <jiri@nvidia.com>
Signed-off-by: default avatarPrzemek Kitszel <przemyslaw.kitszel@intel.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 3465915e
Loading
Loading
Loading
Loading
+30 −30
Original line number Diff line number Diff line
@@ -1854,35 +1854,35 @@ int devlink_info_version_running_put_ext(struct devlink_info_req *req,
					 const char *version_value,
					 enum devlink_info_version_type version_type);

int devlink_fmsg_obj_nest_start(struct devlink_fmsg *fmsg);
int devlink_fmsg_obj_nest_end(struct devlink_fmsg *fmsg);
void devlink_fmsg_obj_nest_start(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);
int devlink_fmsg_pair_nest_end(struct devlink_fmsg *fmsg);
void devlink_fmsg_pair_nest_start(struct devlink_fmsg *fmsg, const char *name);
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);
int devlink_fmsg_arr_pair_nest_end(struct devlink_fmsg *fmsg);
int devlink_fmsg_binary_pair_nest_start(struct devlink_fmsg *fmsg,
void devlink_fmsg_arr_pair_nest_end(struct devlink_fmsg *fmsg);
void devlink_fmsg_binary_pair_nest_start(struct devlink_fmsg *fmsg,
					 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);
int 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_u32_put(struct devlink_fmsg *fmsg, u32 value);
void devlink_fmsg_string_put(struct devlink_fmsg *fmsg, const char *value);
void devlink_fmsg_binary_put(struct devlink_fmsg *fmsg, const void *value,
			     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);
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);
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);
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);
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);
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);

struct devlink_health_reporter *
+84 −104
Original line number Diff line number Diff line
@@ -566,16 +566,15 @@ static int devlink_health_do_dump(struct devlink_health_reporter *reporter,
	if (!reporter->dump_fmsg)
		return -ENOMEM;

	err = devlink_fmsg_obj_nest_start(reporter->dump_fmsg);
	if (err)
		goto dump_err;
	devlink_fmsg_obj_nest_start(reporter->dump_fmsg);

	err = reporter->ops->dump(reporter, reporter->dump_fmsg,
				  priv_ctx, extack);
	if (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)
		goto dump_err;

@@ -675,63 +674,61 @@ static void devlink_fmsg_err_if_binary(struct devlink_fmsg *fmsg)
		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;

	if (fmsg->err)
		return fmsg->err;
		return;

	item = kzalloc(sizeof(*item), GFP_KERNEL);
	if (!item) {
		fmsg->err = -ENOMEM;
		return fmsg->err;
		return;
	}

	item->attrtype = attrtype;
	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);
	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);

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);
	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);

#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;

	devlink_fmsg_err_if_binary(fmsg);
	if (fmsg->err)
		return fmsg->err;
		return;

	if (strlen(name) + 1 > DEVLINK_FMSG_MAX_SIZE) {
		fmsg->err = -EMSGSIZE;
		return fmsg->err;
		return;
	}

	item = kzalloc(sizeof(*item) + strlen(name) + 1, GFP_KERNEL);
	if (!item) {
		fmsg->err = -ENOMEM;
		return fmsg->err;
		return;
	}

	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;
	memcpy(&item->value, name, item->len);
	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_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);

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);

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)
{
	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);

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);
	return devlink_fmsg_nest_end(fmsg);
	devlink_fmsg_nest_end(fmsg);
}
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)
{
	int err;

	err = devlink_fmsg_arr_pair_nest_start(fmsg, name);
	if (err)
		return err;

	devlink_fmsg_arr_pair_nest_start(fmsg, name);
	fmsg->putting_binary = true;
	return 0;
}
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)
		return fmsg->err;
		return;

	if (!fmsg->putting_binary) {
	if (!fmsg->putting_binary)
		fmsg->err = -EINVAL;
		return fmsg->err;
	}

	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);

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,
				   u8 value_nla_type)
{
	struct devlink_fmsg_item *item;

	if (fmsg->err)
		return;

	if (value_len > DEVLINK_FMSG_MAX_SIZE) {
		fmsg->err = -EMSGSIZE;
		return fmsg->err;
		return;
	}

	item = kzalloc(sizeof(*item) + value_len, GFP_KERNEL);
	if (!item) {
		fmsg->err = -ENOMEM;
		return fmsg->err;
		return;
	}

	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;
	memcpy(&item->value, value, item->len);
	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);
	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);
	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);
	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);

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);
	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);
	return devlink_fmsg_put_value(fmsg, value, strlen(value) + 1,
				      NLA_NUL_STRING);
	devlink_fmsg_put_value(fmsg, value, strlen(value) + 1, NLA_NUL_STRING);
}
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)
{
	if (!fmsg->putting_binary)
		return -EINVAL;
	if (!fmsg->err && !fmsg->putting_binary)
		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);

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)
{
	devlink_fmsg_pair_nest_start(fmsg, name);
	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);

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)
{
	devlink_fmsg_pair_nest_start(fmsg, name);
	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);

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)
{
	devlink_fmsg_pair_nest_start(fmsg, name);
	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);

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)
{
	devlink_fmsg_pair_nest_start(fmsg, name);
	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);

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)
{
	devlink_fmsg_pair_nest_start(fmsg, name);
	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);

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)
{
	u32 data_size;
	u32 offset;
	int err;

	err = devlink_fmsg_binary_pair_nest_start(fmsg, name);
	if (err)
		return err;
	devlink_fmsg_binary_pair_nest_start(fmsg, name);

	for (offset = 0; offset < value_len; offset += data_size) {
		data_size = value_len - offset;
		if (data_size > DEVLINK_FMSG_MAX_SIZE)
			data_size = DEVLINK_FMSG_MAX_SIZE;
		err = devlink_fmsg_binary_put(fmsg, value + offset, data_size);
		if (err)
			break;
		/* Exit from loop with a break (instead of
		 * return) to make sure putting_binary is turned off
		 */

		devlink_fmsg_binary_put(fmsg, value + offset, data_size);
	}

	err = devlink_fmsg_binary_pair_nest_end(fmsg);
	devlink_fmsg_binary_pair_nest_end(fmsg);
	fmsg->putting_binary = false;

	return err;
}
EXPORT_SYMBOL_GPL(devlink_fmsg_binary_pair_put);

@@ -1051,6 +1029,9 @@ static int devlink_fmsg_snd(struct devlink_fmsg *fmsg,
	void *hdr;
	int err;

	if (fmsg->err)
		return fmsg->err;

	while (!last) {
		int tmp_index = index;

@@ -1104,6 +1085,9 @@ static int devlink_fmsg_dumpit(struct devlink_fmsg *fmsg, struct sk_buff *skb,
	void *hdr;
	int err;

	if (fmsg->err)
		return fmsg->err;

	hdr = genlmsg_put(skb, NETLINK_CB(cb->skb).portid, cb->nlh->nlmsg_seq,
			  &devlink_nl_family, NLM_F_ACK | NLM_F_MULTI, cmd);
	if (!hdr) {
@@ -1143,17 +1127,13 @@ int devlink_nl_cmd_health_reporter_diagnose_doit(struct sk_buff *skb,
	if (!fmsg)
		return -ENOMEM;

	err = devlink_fmsg_obj_nest_start(fmsg);
	if (err)
		goto out;
	devlink_fmsg_obj_nest_start(fmsg);

	err = reporter->ops->diagnose(reporter, fmsg, info->extack);
	if (err)
		goto out;

	err = devlink_fmsg_obj_nest_end(fmsg);
	if (err)
		goto out;
	devlink_fmsg_obj_nest_end(fmsg);

	err = devlink_fmsg_snd(fmsg, info,
			       DEVLINK_CMD_HEALTH_REPORTER_DIAGNOSE, 0);