net: flow_offload: add flow_block_cb_is_busy() and use it
This patch adds a function to check if flow block callback is already in use. Call this new function from flow_block_cb_setup_simple() and from drivers. Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
722d36e6e2
commit
0d4fd02e71
@@ -722,6 +722,10 @@ mlx5e_rep_indr_setup_tc_block(struct net_device *netdev,
|
||||
if (indr_priv)
|
||||
return -EEXIST;
|
||||
|
||||
if (flow_block_cb_is_busy(mlx5e_rep_indr_setup_block_cb,
|
||||
indr_priv, &mlx5e_block_cb_list))
|
||||
return -EBUSY;
|
||||
|
||||
indr_priv = kmalloc(sizeof(*indr_priv), GFP_KERNEL);
|
||||
if (!indr_priv)
|
||||
return -ENOMEM;
|
||||
|
@@ -1698,6 +1698,10 @@ static int mlxsw_sp_setup_tc_block(struct mlxsw_sp_port *mlxsw_sp_port,
|
||||
|
||||
switch (f->command) {
|
||||
case FLOW_BLOCK_BIND:
|
||||
if (flow_block_cb_is_busy(cb, mlxsw_sp_port,
|
||||
&mlxsw_sp_block_cb_list))
|
||||
return -EBUSY;
|
||||
|
||||
block_cb = flow_block_cb_alloc(f->net, cb, mlxsw_sp_port,
|
||||
mlxsw_sp_port, NULL);
|
||||
if (IS_ERR(block_cb))
|
||||
|
@@ -153,6 +153,9 @@ static int ocelot_setup_tc_block(struct ocelot_port *port,
|
||||
|
||||
switch (f->command) {
|
||||
case FLOW_BLOCK_BIND:
|
||||
if (flow_block_cb_is_busy(cb, port, &ocelot_block_cb_list))
|
||||
return -EBUSY;
|
||||
|
||||
block_cb = flow_block_cb_alloc(f->net, cb, port, port, NULL);
|
||||
if (IS_ERR(block_cb))
|
||||
return PTR_ERR(block_cb);
|
||||
|
@@ -1320,6 +1320,10 @@ static int nfp_flower_setup_tc_block(struct net_device *netdev,
|
||||
|
||||
switch (f->command) {
|
||||
case FLOW_BLOCK_BIND:
|
||||
if (flow_block_cb_is_busy(nfp_flower_setup_tc_block_cb, repr,
|
||||
&nfp_block_cb_list))
|
||||
return -EBUSY;
|
||||
|
||||
block_cb = flow_block_cb_alloc(f->net,
|
||||
nfp_flower_setup_tc_block_cb,
|
||||
repr, repr, NULL);
|
||||
|
Reference in New Issue
Block a user