netdevsim: Add extack error message for devlink reload
devlink reset command can fail if a FIB resource limit is set to a value lower than the current occupancy. Return a proper message indicating the reason for the failure. $ devlink resource sh netdevsim/netdevsim0 netdevsim/netdevsim0: name IPv4 size unlimited unit entry size_min 0 size_max unlimited size_gran 1 dpipe_tables none resources: name fib size unlimited occ 43 unit entry size_min 0 size_max unlimited size_gran 1 dpipe_tables none name fib-rules size unlimited occ 4 unit entry size_min 0 size_max unlimited size_gran 1 dpipe_tables none name IPv6 size unlimited unit entry size_min 0 size_max unlimited size_gran 1 dpipe_tables none resources: name fib size unlimited occ 54 unit entry size_min 0 size_max unlimited size_gran 1 dpipe_tables none name fib-rules size unlimited occ 3 unit entry size_min 0 size_max unlimited size_gran 1 dpipe_tables none $ devlink resource set netdevsim/netdevsim0 path /IPv4/fib size 40 $ devlink dev reload netdevsim/netdevsim0 Error: netdevsim: New size is less than current occupancy. devlink answers: Invalid argument Signed-off-by: David Ahern <dsahern@gmail.com> Acked-by: Jakub Kicinski <jakub.kicinski@netronome.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
ac0fc8a1bb
commit
7fa76d777e
|
@ -163,7 +163,7 @@ static int nsim_devlink_reload(struct devlink *devlink,
|
||||||
|
|
||||||
err = devlink_resource_size_get(devlink, res_ids[i], &val);
|
err = devlink_resource_size_get(devlink, res_ids[i], &val);
|
||||||
if (!err) {
|
if (!err) {
|
||||||
err = nsim_fib_set_max(net, res_ids[i], val);
|
err = nsim_fib_set_max(net, res_ids[i], val, extack);
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
@ -181,7 +181,7 @@ static void nsim_devlink_net_reset(struct net *net)
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(res_ids); ++i) {
|
for (i = 0; i < ARRAY_SIZE(res_ids); ++i) {
|
||||||
if (nsim_fib_set_max(net, res_ids[i], (u64)-1)) {
|
if (nsim_fib_set_max(net, res_ids[i], (u64)-1, NULL)) {
|
||||||
pr_err("Failed to reset limit for resource %u\n",
|
pr_err("Failed to reset limit for resource %u\n",
|
||||||
res_ids[i]);
|
res_ids[i]);
|
||||||
}
|
}
|
||||||
|
|
|
@ -64,7 +64,8 @@ u64 nsim_fib_get_val(struct net *net, enum nsim_resource_id res_id, bool max)
|
||||||
return max ? entry->max : entry->num;
|
return max ? entry->max : entry->num;
|
||||||
}
|
}
|
||||||
|
|
||||||
int nsim_fib_set_max(struct net *net, enum nsim_resource_id res_id, u64 val)
|
int nsim_fib_set_max(struct net *net, enum nsim_resource_id res_id, u64 val,
|
||||||
|
struct netlink_ext_ack *extack)
|
||||||
{
|
{
|
||||||
struct nsim_fib_data *fib_data = net_generic(net, nsim_fib_net_id);
|
struct nsim_fib_data *fib_data = net_generic(net, nsim_fib_net_id);
|
||||||
struct nsim_fib_entry *entry;
|
struct nsim_fib_entry *entry;
|
||||||
|
@ -90,10 +91,12 @@ int nsim_fib_set_max(struct net *net, enum nsim_resource_id res_id, u64 val)
|
||||||
/* not allowing a new max to be less than curren occupancy
|
/* not allowing a new max to be less than curren occupancy
|
||||||
* --> no means of evicting entries
|
* --> no means of evicting entries
|
||||||
*/
|
*/
|
||||||
if (val < entry->num)
|
if (val < entry->num) {
|
||||||
|
NL_SET_ERR_MSG_MOD(extack, "New size is less than current occupancy");
|
||||||
err = -EINVAL;
|
err = -EINVAL;
|
||||||
else
|
} else {
|
||||||
entry->max = val;
|
entry->max = val;
|
||||||
|
}
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
|
@ -126,7 +126,8 @@ void nsim_devlink_exit(void);
|
||||||
int nsim_fib_init(void);
|
int nsim_fib_init(void);
|
||||||
void nsim_fib_exit(void);
|
void nsim_fib_exit(void);
|
||||||
u64 nsim_fib_get_val(struct net *net, enum nsim_resource_id res_id, bool max);
|
u64 nsim_fib_get_val(struct net *net, enum nsim_resource_id res_id, bool max);
|
||||||
int nsim_fib_set_max(struct net *net, enum nsim_resource_id res_id, u64 val);
|
int nsim_fib_set_max(struct net *net, enum nsim_resource_id res_id, u64 val,
|
||||||
|
struct netlink_ext_ack *extack);
|
||||||
#else
|
#else
|
||||||
static inline int nsim_devlink_setup(struct netdevsim *ns)
|
static inline int nsim_devlink_setup(struct netdevsim *ns)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue