Skip to content

Commit

Permalink
drop_monitor: Use pre_doit / post_doit hooks
Browse files Browse the repository at this point in the history
Each operation from user space should be protected by the global drop
monitor mutex. Use the pre_doit / post_doit hooks to take / release the
lock instead of doing it explicitly in each function.

Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Ido Schimmel authored and David S. Miller committed Aug 6, 2019
1 parent 9651009 commit b19d955
Showing 1 changed file with 17 additions and 7 deletions.
24 changes: 17 additions & 7 deletions net/core/drop_monitor.c
Original file line number Diff line number Diff line change
Expand Up @@ -247,12 +247,9 @@ static int set_all_monitor_traces(int state, struct netlink_ext_ack *extack)
struct dm_hw_stat_delta *new_stat = NULL;
struct dm_hw_stat_delta *temp;

mutex_lock(&net_dm_mutex);

if (state == trace_state) {
NL_SET_ERR_MSG_MOD(extack, "Trace state already set to requested state");
rc = -EAGAIN;
goto out_unlock;
return -EAGAIN;
}

switch (state) {
Expand Down Expand Up @@ -296,9 +293,6 @@ static int set_all_monitor_traces(int state, struct netlink_ext_ack *extack)
else
rc = -EINPROGRESS;

out_unlock:
mutex_unlock(&net_dm_mutex);

return rc;
}

Expand Down Expand Up @@ -380,10 +374,26 @@ static const struct genl_ops dropmon_ops[] = {
},
};

static int net_dm_nl_pre_doit(const struct genl_ops *ops,
struct sk_buff *skb, struct genl_info *info)
{
mutex_lock(&net_dm_mutex);

return 0;
}

static void net_dm_nl_post_doit(const struct genl_ops *ops,
struct sk_buff *skb, struct genl_info *info)
{
mutex_unlock(&net_dm_mutex);
}

static struct genl_family net_drop_monitor_family __ro_after_init = {
.hdrsize = 0,
.name = "NET_DM",
.version = 2,
.pre_doit = net_dm_nl_pre_doit,
.post_doit = net_dm_nl_post_doit,
.module = THIS_MODULE,
.ops = dropmon_ops,
.n_ops = ARRAY_SIZE(dropmon_ops),
Expand Down

0 comments on commit b19d955

Please sign in to comment.