提交 1830ba21 编写于 作者: L Leon Romanovsky 提交者: Leon Romanovsky

RDMA/netlink: Add and implement doit netlink callback

The .doit callback is used by netlink core to differentiate
between get and set operations. Common convention is to use
that call for command operations like (SET, ADD, e.t.c.) and/or
access without NLF_M_DUMP flag.

This commit adds proper declaration and implementation
to RDMA netlink.
Signed-off-by: NLeon Romanovsky <leonro@mellanox.com>
Reviewed-by: NSteve Wise <swise@opengridcomputing.com>
上级 ecc82c53
......@@ -76,9 +76,13 @@ static bool is_nl_msg_valid(unsigned int type, unsigned int op)
static bool is_nl_valid(unsigned int type, unsigned int op)
{
if (!is_nl_msg_valid(type, op) ||
!rdma_nl_types[type].cb_table ||
!rdma_nl_types[type].cb_table[op].dump)
const struct rdma_nl_cbs *cb_table;
if (!is_nl_msg_valid(type, op))
return false;
cb_table = rdma_nl_types[type].cb_table;
if (!cb_table || (!cb_table[op].dump && !cb_table[op].doit))
return false;
return true;
}
......@@ -151,6 +155,7 @@ static int rdma_nl_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh,
unsigned int op = RDMA_NL_GET_OP(type);
struct netlink_callback cb = {};
struct netlink_dump_control c = {};
int ret;
if (!is_nl_valid(index, op))
return -EINVAL;
......@@ -169,10 +174,14 @@ static int rdma_nl_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh,
cb.nlh = nlh;
cb.dump = rdma_nl_types[index].cb_table[op].dump;
return cb.dump(skb, &cb);
} else {
c.dump = rdma_nl_types[index].cb_table[op].dump;
return netlink_dump_start(nls, skb, nlh, &c);
}
if (rdma_nl_types[index].cb_table[op].doit)
ret = rdma_nl_types[index].cb_table[op].doit(skb, nlh, extack);
return ret;
c.dump = rdma_nl_types[index].cb_table[op].dump;
return netlink_dump_start(nls, skb, nlh, &c);
}
/*
......
......@@ -6,6 +6,8 @@
#include <uapi/rdma/rdma_netlink.h>
struct rdma_nl_cbs {
int (*doit)(struct sk_buff *skb, struct nlmsghdr *nlh,
struct netlink_ext_ack *extack);
int (*dump)(struct sk_buff *skb, struct netlink_callback *nlcb);
u8 flags;
};
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册