On 7/17/2017 10:54 AM, Leon Romanovsky wrote:
On Mon, Jul 17, 2017 at 10:02:07AM -0400, Dennis Dalessandro wrote:
On 6/27/2017 1:00 AM, Leon Romanovsky wrote:
From: Leon Romanovsky <leonro@xxxxxxxxxxxx>
RDMA netlink has complicated infrastructure to add and remove netlink
clients to NETLINK_RDMA family. This complicates the code and not in
use because not many clients are available (3 clients) and most of them
(2 clients) are statically compiled together with netlink.c.
So here you say there are three clients.
- struct ibnl_client *cur;
- struct ibnl_client *nl_client;
+ static const unsigned int max_num_ops[RDMA_NL_NUM_CLIENTS - 1] = {
+ RDMA_NL_RDMA_CM_NUM_OPS,
+ RDMA_NL_IWPM_NUM_OPS,
+ 0,
+ RDMA_NL_LS_NUM_OPS,
+ 0 };
- nl_client = kmalloc(sizeof *nl_client, GFP_KERNEL);
- if (!nl_client)
- return -ENOMEM;
+ /*
+ * This BUILD_BUG_ON is intended to catch addition of new
+ * RDMA netlink protocol without updating the array above.
+ */
+ BUILD_BUG_ON(RDMA_NL_NUM_CLIENTS != 6);
Yet we are checking for 6? Can you elaborate here.
This check is needed to ensure that the array is properly initialized.
The clients were exposed in include/uapi/rdma/rdma_netlink.h, in the
following enum:
6 enum {
7 RDMA_NL_RDMA_CM = 1,
8 RDMA_NL_IWCM,
9 RDMA_NL_RSVD,
10 RDMA_NL_LS, /* RDMA Local Services */
11 RDMA_NL_I40IW,
12 RDMA_NL_NUM_CLIENTS
13 };
First of all it starts from 1, second we have RDMA_NL_RSVD and
RDMA_NL_NUM_CLIENTS which exposed, but are not real clients, because
nothing is handled them
It leads for RDMA_NL_NUM_CLIENTS == 6 and this is why I'm checking for 6.
Makes sense now.
-Denny
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html