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);
|
||||
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)
|
||||
return err;
|
||||
}
|
||||
@ -181,7 +181,7 @@ static void nsim_devlink_net_reset(struct net *net)
|
||||
int 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",
|
||||
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;
|
||||
}
|
||||
|
||||
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_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
|
||||
* --> 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;
|
||||
else
|
||||
} else {
|
||||
entry->max = val;
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
@ -126,7 +126,8 @@ void nsim_devlink_exit(void);
|
||||
int nsim_fib_init(void);
|
||||
void nsim_fib_exit(void);
|
||||
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
|
||||
static inline int nsim_devlink_setup(struct netdevsim *ns)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user