Skip to contentSkip to conversation

Refactor RDMA netlink infrastructure

PATCH In review Leon Romanovsky 2 participants 8 messages Jun 8, 2017 3 messages not in the archive InfiniBand

lore
Share & tools
lore
#0 lore raw

cover Refactor RDMA netlink infrastructure

The following patch set is a preparation to addition of netlink handlers to support RDMA tool. It simplifies the code, removes useless client infrastructure, concentrates netlink validity checks and allows future patches to remove a lot of dead code from iwcm* code base (all operations related to nl_clients).

It is based on already sent to the mailing list patch [1] "Revert "IB/core: Add flow control to the portmapper netlink calls""

[1] https://patchwork.kernel.org/patch/9752865/

Available in the "topic/rdmatool-rfc-v1" topic branch of this git repo:
git://git.kernel.org/pub/scm/linux/kernel/git/leon/linux-rdma.git

Or for browsing:
https://git.kernel.org/cgit/linux/kernel/git/leon/linux-rdma.git/log/?h=topic/rdmatool-rfc-v1

Leon Romanovsky (5):
RDMA/netlink: Remove netlink clients infrastructure RDMA/netlink: Remove redundant owner option for netlink callbacks RDMA/netlink: Avoid double pass for RDMA netlink messages RDMA/iwcm: Remove useless check of nelink client validity RDMA/iwcm: Remove extra EXPORT_SYMBOLS

 drivers/infiniband/core/cma.c       |   9 +-
 drivers/infiniband/core/device.c    |  41 ++----
 drivers/infiniband/core/iwcm.c      |  10 +-
 drivers/infiniband/core/iwpm_msg.c  |  12 --
 drivers/infiniband/core/iwpm_util.c |  11 --
 drivers/infiniband/core/netlink.c   | 248 +++++++++++++++++++-----------------
 include/rdma/rdma_netlink.h         |  18 +--
 7 files changed, 151 insertions(+), 198 deletions(-)

--
2.12.2

--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html

A message that is not in the archive (sent off-list or not yet received): 20170608143852.9072-1-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org

#2 lore raw

PATCH 1/5 RDMA/netlink: Remove netlink clients infrastructure

From: Leon Romanovsky <leonro-VPRAkNaXOzVWk0Htik3J/[email protected]>

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.

The following patch refactors RDMA netlink and opens door for the future patches which will be able to get rid of a lot of dead iwcm* code.

---
 drivers/infiniband/core/cma.c     |   6 +-
 drivers/infiniband/core/device.c  |  41 +++------
 drivers/infiniband/core/iwcm.c    |  10 +--
 drivers/infiniband/core/netlink.c | 184 ++++++++++++++++++--------------------
 include/rdma/rdma_netlink.h       |  17 ++--
 5 files changed, 106 insertions(+), 152 deletions(-)
drivers/infiniband/core/cma.c +2 -4
index 91b7a2fe5a55..d7e29d86469b 100644
@@ -4531,9 +4531,7 @@ static int __init cma_init(void)
 	if (ret)
 		goto err;
 
-	if (ibnl_add_client(RDMA_NL_RDMA_CM, ARRAY_SIZE(cma_cb_table),
-			    cma_cb_table))
-		pr_warn("RDMA CMA: failed to add netlink callback\n");
+	rdma_nl_register(RDMA_NL_RDMA_CM, cma_cb_table);
 	cma_configfs_init();
 
 	return 0;
@@ -4550,7 +4548,7 @@ static int __init cma_init(void)
 static void __exit cma_cleanup(void)
 {
 	cma_configfs_exit();
-	ibnl_remove_client(RDMA_NL_RDMA_CM);
+	rdma_nl_unregister(RDMA_NL_RDMA_CM);
 	ib_unregister_client(&cma_client);
 	unregister_netdevice_notifier(&cma_nb);
 	rdma_addr_unregister_client(&addr_client);
drivers/infiniband/core/device.c +10 -31

83 lines not on this page · raw message

drivers/infiniband/core/iwcm.c +3 -7
index 31661b5c1743..8599271d8be6 100644
@@ -1175,12 +1175,8 @@ static int __init iw_cm_init(void)
 	ret = iwpm_init(RDMA_NL_IWCM);
 	if (ret)
 		pr_err("iw_cm: couldn't init iwpm\n");
-
-	ret = ibnl_add_client(RDMA_NL_IWCM, ARRAY_SIZE(iwcm_nl_cb_table),
-			      iwcm_nl_cb_table);
-	if (ret)
-		pr_err("iw_cm: couldn't register netlink callbacks\n");
-
+	else
+		rdma_nl_register(RDMA_NL_IWCM, iwcm_nl_cb_table);
 	iwcm_wq = alloc_ordered_workqueue("iw_cm_wq", WQ_MEM_RECLAIM);
 	if (!iwcm_wq)
 		return -ENOMEM;
@@ -1200,7 +1196,7 @@ static void __exit iw_cm_cleanup(void)
 {
 	unregister_net_sysctl_table(iwcm_ctl_table_hdr);
 	destroy_workqueue(iwcm_wq);
-	ibnl_remove_client(RDMA_NL_IWCM);
+	rdma_nl_unregister(RDMA_NL_IWCM);
 	iwpm_exit(RDMA_NL_IWCM);
 }
 
drivers/infiniband/core/netlink.c +85 -99

245 lines not on this page · raw message

include/rdma/rdma_netlink.h +6 -11
index 585266144329..6735dcf5d2a3 100644
@@ -10,27 +10,22 @@ struct ibnl_client_cbs {
 	struct module *module;
 };
 
-int ibnl_init(void);
-void ibnl_cleanup(void);
+int rdma_nl_init(void);
+void rdma_nl_exit(void);
 
 /**
- * Add a a client to the list of IB netlink exporters.
+ * Register client in RDMA netlink.
  * @index: Index of the added client
- * @nops: Number of supported ops by the added client.
  * @cb_table: A table for op->callback
- *
- * Returns 0 on success or a negative error code.
  */
-int ibnl_add_client(int index, int nops,
-		    const struct ibnl_client_cbs cb_table[]);
+void rdma_nl_register(unsigned int index,
+		      const struct ibnl_client_cbs cb_table[]);
 
 /**
  * Remove a client from IB netlink.
  * @index: Index of the removed IB client.
- *
- * Returns 0 on success or a negative error code.
  */
-int ibnl_remove_client(int index);
+void rdma_nl_unregister(unsigned int index);
 
 /**
  * Put a new message in a supplied skb.

--
2.12.2

--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html

A message that is not in the archive (sent off-list or not yet received): 20170608143852.9072-2-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org

#4 lore raw

Re: [PATCH rdma-next 1/5] RDMA/netlink: Remove netlink clients infrastructure

Quoted 9 lines · Leon Romanovsky

From: Leon Romanovsky <leonro-VPRAkNaXOzVWk0Htik3J/[email protected]>

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.

The following patch refactors RDMA netlink and opens door for the future patches which will be able to get rid of a lot of dead iwcm* code.

Hello Leon,

There are multiple changes in this patch:
- Renaming ibnl_add_client() and ibnl_remove_client() into rdma_nl_register() and rdma_nl_unregister().
- Removal of the module pointers from ibnl_ls_cb_table[].
- Conversion of client_list from a linked list into an array (rdma_nl_types[]).

Could this patch have been split?

Quoted 12 lines
drivers/infiniband/core/netlink.c +10 -1
+static bool is_nl_msg_valid(unsigned int type, unsigned int op)
 {
-	[ ... ]
+	unsigned int max_num_ops;
+
+	switch (type) {
+	case RDMA_NL_RDMA_CM:
+		max_num_ops = RDMA_NL_RDMA_CM_NUM_OPS;
+		break;
+	case RDMA_NL_IWCM:
+		max_num_ops = RDMA_NL_IWPM_NUM_OPS;
+		break;

drivers/infiniband/core/netlink.c int ibnl_chk_listeners(unsigned int group) · line 77

Quoted 10 lines
drivers/infiniband/core/netlink.c +9 -0
+	case RDMA_NL_LS:
+		max_num_ops = RDMA_NL_LS_NUM_OPS;
+		break;
+	case RDMA_NL_RSVD:
+	case RDMA_NL_I40IW:
+	default:
+		return false;
 	}
+	return (op < max_num_ops) ? true : false;
+}

Can this code be made more compact by storing the *_NUM_OPS constants in an array?

drivers/infiniband/core/netlink.c int ibnl_chk_listeners(unsigned int group) · line 109

Quoted 9 lines
drivers/infiniband/core/netlink.c +6 -2
+void rdma_nl_register(unsigned int index,
+		      const struct ibnl_client_cbs cb_table[])
 {
-	[ ... ]
-	return -EINVAL;
+	rdma_nl_types[index].cb_table = cb_table;
+	mutex_unlock(&rdma_nl_mutex);
+}
+EXPORT_SYMBOL(rdma_nl_register);

Shouldn't this function return an error code or print a warning message if rdma_nl_types[index].cb_table had already been set?

Otherwise this patch looks like a welcome cleanup and simplification to me.

Bart.
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html

A message that is not in the archive (sent off-list or not yet received): 88fb8d57-cd02-78bc-3045-c09f62c280b9-XdAiOPVOjttBDgjK7y7TUQ@public.gmane.org

#6 lore raw

Re: [PATCH rdma-next 1/5] RDMA/netlink: Remove netlink clients infrastructure

Quoted 13 lines · Bart Van Assche
Quoted 9 lines · Leon Romanovsky

From: Leon Romanovsky <leonro-VPRAkNaXOzVWk0Htik3J/[email protected]>

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.

The following patch refactors RDMA netlink and opens door for the future patches which will be able to get rid of a lot of dead iwcm* code.

Hello Leon,

Quoted 8 lines

There are multiple changes in this patch:
- Renaming ibnl_add_client() and ibnl_remove_client() into rdma_nl_register() and rdma_nl_unregister().
- Removal of the module pointers from ibnl_ls_cb_table[].
- Conversion of client_list from a linked list into an array (rdma_nl_types[]).

Could this patch have been split?

I tried, but once I got rid of the client (delete function), i was required to change the function signature and while I was there, I changed the name. So if it is possible, I would like to have one patch and not many patches which changes the same lines of code.

Quoted 18 lines
Quoted 18 lines
drivers/infiniband/core/netlink.c +15 -1
+static bool is_nl_msg_valid(unsigned int type, unsigned int op)
 {
-	[ ... ]
+	unsigned int max_num_ops;
+
+	switch (type) {
+	case RDMA_NL_RDMA_CM:
+		max_num_ops = RDMA_NL_RDMA_CM_NUM_OPS;
+		break;
+	case RDMA_NL_IWCM:
+		max_num_ops = RDMA_NL_IWPM_NUM_OPS;
+		break;
+	case RDMA_NL_LS:
+		max_num_ops = RDMA_NL_LS_NUM_OPS;
+		break;
+	case RDMA_NL_RSVD:
+	case RDMA_NL_I40IW:
Quoted 8 lines

drivers/infiniband/core/netlink.c int ibnl_chk_listeners(unsigned int group) · line 77

Quoted 5 lines
drivers/infiniband/core/netlink.c +4 -0
+	default:
+		return false;
 	}
+	return (op < max_num_ops) ? true : false;
+}

Can this code be made more compact by storing the *_NUM_OPS constants in an array?

I thought that it is more easy to read, but have no strong opinion about it.

Quoted 13 lines

drivers/infiniband/core/netlink.c int ibnl_chk_listeners(unsigned int group) · line 109

Quoted 10 lines
drivers/infiniband/core/netlink.c +6 -2
+void rdma_nl_register(unsigned int index,
+		      const struct ibnl_client_cbs cb_table[])
 {
-	[ ... ]
-	return -EINVAL;
+	rdma_nl_types[index].cb_table = cb_table;
+	mutex_unlock(&rdma_nl_mutex);
+}
+EXPORT_SYMBOL(rdma_nl_register);

Shouldn't this function return an error code or print a warning message if rdma_nl_types[index].cb_table had already been set?

Agree, warning will be good there. I don't want to return value from this function, because callers are not really interested in success/failure once they finished to debug their code.

Quoted 2 lines

Otherwise this patch looks like a welcome cleanup and simplification to me.

Thanks for taking time to look on these patches.

Quoted 6 lines

Bart.
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html

#7 lore raw

PATCH 2/5 RDMA/netlink: Remove redundant owner option for netlink callbacks

In reply to a message not in the archive

From: Leon Romanovsky <leonro-VPRAkNaXOzVWk0Htik3J/[email protected]>

Owner field is not needed to be set because netlink is part of ib_core which will be unloaded last after all other modules are unloaded.

---
 drivers/infiniband/core/cma.c     | 3 +--
 drivers/infiniband/core/netlink.c | 2 --
 include/rdma/rdma_netlink.h       | 1 -
 3 files changed, 1 insertion(+), 5 deletions(-)
drivers/infiniband/core/cma.c +1 -2
index d7e29d86469b..a4013b0908e2 100644
@@ -4478,8 +4478,7 @@ static int cma_get_id_stats(struct sk_buff *skb, struct netlink_callback *cb)
 }
 
 static const struct ibnl_client_cbs cma_cb_table[] = {
-	[RDMA_NL_RDMA_CM_ID_STATS] = { .dump = cma_get_id_stats,
-				       .module = THIS_MODULE },
+	[RDMA_NL_RDMA_CM_ID_STATS] = { .dump = cma_get_id_stats},
 };
 
 static int cma_init_net(struct net *net)
drivers/infiniband/core/netlink.c +0 -2
index 976562b88637..fd9c782dc32d 100644
@@ -173,12 +173,10 @@ static int ibnl_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh,
 		cb.skb = skb;
 		cb.nlh = nlh;
 		cb.dump = rdma_nl_types[index].cb_table[op].dump;
-		cb.module = rdma_nl_types[index].cb_table[op].module;
 		return cb.dump(skb, &cb);
 	}
 
 	c.dump = rdma_nl_types[index].cb_table[op].dump;
-	c.module = rdma_nl_types[index].cb_table[op].module;
 	return netlink_dump_start(nls, skb, nlh, &c);
 }
 
include/rdma/rdma_netlink.h +0 -1
index 6735dcf5d2a3..761517105a36 100644
@@ -7,7 +7,6 @@
 
 struct ibnl_client_cbs {
 	int (*dump)(struct sk_buff *skb, struct netlink_callback *nlcb);
-	struct module *module;
 };
 
 int rdma_nl_init(void);

--
2.12.2

--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html

#8 lore raw

PATCH 3/5 RDMA/netlink: Avoid double pass for RDMA netlink messages

In reply to a message not in the archive

From: Leon Romanovsky <leonro-VPRAkNaXOzVWk0Htik3J/[email protected]>

The standard netlink_rcv_skb function skips messages without NLM_F_REQUEST flag in it, while SA netlink client issues them.

In commit bc10ed7d3d19 ("IB/core: Add rdma netlink helper functions") the local function was introduced to allow such messages.

This led to double pass for every incoming message.

In this patch, we unify that local implementation and netlink_rcv_skb functions, so there will be no need for double pass anymore.

As a outcome, this combined function gained more strict check for NLM_F_REQUEST flag and it is now allowed for SA pathquery client only.

---
 drivers/infiniband/core/netlink.c | 62 +++++++++++++++++++++++++++------------
 1 file changed, 44 insertions(+), 18 deletions(-)
drivers/infiniband/core/netlink.c +44 -18
index fd9c782dc32d..44796fadfb3a 100644
@@ -152,8 +152,8 @@ int ibnl_put_attr(struct sk_buff *skb, struct nlmsghdr *nlh,
 }
 EXPORT_SYMBOL(ibnl_put_attr);
 
-static int ibnl_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh,
-			struct netlink_ext_ack *extack)
+static int rdma_nl_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh,
+			   struct netlink_ext_ack *extack)
 {
 	int type = nlh->nlmsg_type;
 	unsigned int index = RDMA_NL_GET_CLIENT(type);
@@ -180,40 +180,66 @@ static int ibnl_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh,
 	return netlink_dump_start(nls, skb, nlh, &c);
 }
 
-static void ibnl_rcv_reply_skb(struct sk_buff *skb)
+/*
+ * This function is similar to netlink_rcv_skb with one exception:
+ * It calls to the callback for the netlink messages without NLM_F_REQUEST
+ * flag. These messages are intended for RDMA_NL_LS consumer, so it is allowed
+ * for that consumer only.
+ */
+static int rdma_nl_rcv_skb(struct sk_buff *skb, int (*cb)(struct sk_buff *,
+						   struct nlmsghdr *,
+						   struct netlink_ext_ack *))
 {
+	struct netlink_ext_ack extack = {};
 	struct nlmsghdr *nlh;
-	int msglen;
+	int err;
 
-	/*
-	 * Process responses until there is no more message or the first
-	 * request. Generally speaking, it is not recommended to mix responses
-	 * with requests.
-	 */
 	while (skb->len >= nlmsg_total_size(0)) {
+		int msglen;
+
 		nlh = nlmsg_hdr(skb);
+		err = 0;
 
 		if (nlh->nlmsg_len < NLMSG_HDRLEN || skb->len < nlh->nlmsg_len)
-			return;
+			return 0;
 
-		/* Handle response only */
-		if (nlh->nlmsg_flags & NLM_F_REQUEST)
-			return;
+		/*
+		 * Generally speaking, the only requests are handled
+		 * by the kernel, but RDMA_NL_LS is different, because it
+		 * runs backward netlink scheme. Kernel initiates messages
+		 * and waits for reply with data to keep pathrecord cache
+		 * in sync.
+		 */
+		if (!(nlh->nlmsg_flags & NLM_F_REQUEST) &&
+		    (RDMA_NL_GET_CLIENT(nlh->nlmsg_type) != RDMA_NL_LS))
+			goto ack;
+
+		/* Skip control messages */
+		if (nlh->nlmsg_type < NLMSG_MIN_TYPE)
+			goto ack;
+
+		err = cb(skb, nlh, &extack);
+		if (err == -EINTR)
+			goto skip;
 
-		ibnl_rcv_msg(skb, nlh, NULL);
+ack:
+		if (nlh->nlmsg_flags & NLM_F_ACK || err)
+			netlink_ack(skb, nlh, err, &extack);
 
+skip:
 		msglen = NLMSG_ALIGN(nlh->nlmsg_len);
 		if (msglen > skb->len)
 			msglen = skb->len;
 		skb_pull(skb, msglen);
 	}
+
+	return 0;
 }
 
-static void ibnl_rcv(struct sk_buff *skb)
+static void rdma_nl_rcv(struct sk_buff *skb)
 {
 	mutex_lock(&rdma_nl_mutex);
-	ibnl_rcv_reply_skb(skb);
-	netlink_rcv_skb(skb, &ibnl_rcv_msg);
+	rdma_nl_rcv_skb(skb, &rdma_nl_rcv_msg);
 	mutex_unlock(&rdma_nl_mutex);
 }
 
@@ -234,7 +260,7 @@ EXPORT_SYMBOL(ibnl_multicast);
 int __init rdma_nl_init(void)
 {
 	struct netlink_kernel_cfg cfg = {
-		.input	= ibnl_rcv,
+		.input	= rdma_nl_rcv,
 	};
 
 	nls = netlink_kernel_create(&init_net, NETLINK_RDMA, &cfg);

--
2.12.2

--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html

#9 lore raw

PATCH 4/5 RDMA/iwcm: Remove useless check of nelink client validity

In reply to a message not in the archive

From: Leon Romanovsky <leonro-VPRAkNaXOzVWk0Htik3J/[email protected]>

RDMA netlink implementation guarantees that supplied client number is in allowed range.

---
 drivers/infiniband/core/iwpm_util.c | 6 ------
 1 file changed, 6 deletions(-)
drivers/infiniband/core/iwpm_util.c +0 -6
index f13870e69ccd..32ca2aaa4e3b 100644
@@ -54,8 +54,6 @@ static struct iwpm_admin_data iwpm_admin;
 int iwpm_init(u8 nl_client)
 {
 	int ret = 0;
-	if (iwpm_valid_client(nl_client))
-		return -EINVAL;
 	mutex_lock(&iwpm_admin_lock);
 	if (atomic_read(&iwpm_admin.refcount) == 0) {
 		iwpm_hash_bucket = kzalloc(IWPM_MAPINFO_HASH_SIZE *
@@ -383,15 +381,11 @@ int iwpm_get_nlmsg_seq(void)
 
 int iwpm_valid_client(u8 nl_client)
 {
-	if (nl_client >= RDMA_NL_NUM_CLIENTS)
-		return 0;
 	return iwpm_admin.client_list[nl_client];
 }
 
 void iwpm_set_valid(u8 nl_client, int valid)
 {
-	if (nl_client >= RDMA_NL_NUM_CLIENTS)
-		return;
 	iwpm_admin.client_list[nl_client] = valid;
 }
 

--
2.12.2

--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html

#10 lore raw

PATCH 5/5 RDMA/iwcm: Remove extra EXPORT_SYMBOLS

In reply to a message not in the archive

From: Leon Romanovsky <leonro-VPRAkNaXOzVWk0Htik3J/[email protected]>

The iwcm exports functions which are not used outside of ib_core. This patch simply removes these EXPORT_SYMBOLS.

---
 drivers/infiniband/core/iwpm_msg.c  | 12 ------------
 drivers/infiniband/core/iwpm_util.c |  5 -----
 2 files changed, 17 deletions(-)
drivers/infiniband/core/iwpm_msg.c +0 -12
index a0e7c16d8bd8..1fab707b1f68 100644
@@ -42,7 +42,6 @@ int iwpm_valid_pid(void)
 {
 	return iwpm_user_pid > 0;
 }
-EXPORT_SYMBOL(iwpm_valid_pid);
 
 /*
  * iwpm_register_pid - Send a netlink query to user space
@@ -122,7 +121,6 @@ int iwpm_register_pid(struct iwpm_dev_data *pm_msg, u8 nl_client)
 		iwpm_free_nlmsg_request(&nlmsg_request->kref);
 	return ret;
 }
-EXPORT_SYMBOL(iwpm_register_pid);
 
 /*
  * iwpm_add_mapping - Send a netlink add mapping message
@@ -191,7 +189,6 @@ int iwpm_add_mapping(struct iwpm_sa_data *pm_msg, u8 nl_client)
 		iwpm_free_nlmsg_request(&nlmsg_request->kref);
 	return ret;
 }
-EXPORT_SYMBOL(iwpm_add_mapping);
 
 /*
  * iwpm_add_and_query_mapping - Send a netlink add and query
@@ -267,7 +264,6 @@ int iwpm_add_and_query_mapping(struct iwpm_sa_data *pm_msg, u8 nl_client)
 		iwpm_free_nlmsg_request(&nlmsg_request->kref);
 	return ret;
 }
-EXPORT_SYMBOL(iwpm_add_and_query_mapping);
 
 /*
  * iwpm_remove_mapping - Send a netlink remove mapping message
@@ -328,7 +324,6 @@ int iwpm_remove_mapping(struct sockaddr_storage *local_addr, u8 nl_client)
 		dev_kfree_skb_any(skb);
 	return ret;
 }
-EXPORT_SYMBOL(iwpm_remove_mapping);
 
 /* netlink attribute policy for the received response to register pid request */
 static const struct nla_policy resp_reg_policy[IWPM_NLA_RREG_PID_MAX] = {
@@ -397,7 +392,6 @@ int iwpm_register_pid_cb(struct sk_buff *skb, struct netlink_callback *cb)
 	up(&nlmsg_request->sem);
 	return 0;
 }
-EXPORT_SYMBOL(iwpm_register_pid_cb);
 
 /* netlink attribute policy for the received response to add mapping request */
 static const struct nla_policy resp_add_policy[IWPM_NLA_RMANAGE_MAPPING_MAX] = {
@@ -466,7 +460,6 @@ int iwpm_add_mapping_cb(struct sk_buff *skb, struct netlink_callback *cb)
 	up(&nlmsg_request->sem);
 	return 0;
 }
-EXPORT_SYMBOL(iwpm_add_mapping_cb);
 
 /* netlink attribute policy for the response to add and query mapping request
  * and response with remote address info */
@@ -558,7 +551,6 @@ int iwpm_add_and_query_mapping_cb(struct sk_buff *skb,
 	up(&nlmsg_request->sem);
 	return 0;
 }
-EXPORT_SYMBOL(iwpm_add_and_query_mapping_cb);
 
 /*
  * iwpm_remote_info_cb - Process a port mapper message, containing
@@ -627,7 +619,6 @@ int iwpm_remote_info_cb(struct sk_buff *skb, struct netlink_callback *cb)
 			"remote_info: Mapped remote sockaddr:");
 	return ret;
 }
-EXPORT_SYMBOL(iwpm_remote_info_cb);
 
 /* netlink attribute policy for the received request for mapping info */
 static const struct nla_policy resp_mapinfo_policy[IWPM_NLA_MAPINFO_REQ_MAX] = {
@@ -677,7 +668,6 @@ int iwpm_mapping_info_cb(struct sk_buff *skb, struct netlink_callback *cb)
 	ret = iwpm_send_mapinfo(nl_client, iwpm_user_pid);
 	return ret;
 }
-EXPORT_SYMBOL(iwpm_mapping_info_cb);
 
 /* netlink attribute policy for the received mapping info ack */
 static const struct nla_policy ack_mapinfo_policy[IWPM_NLA_MAPINFO_NUM_MAX] = {
@@ -707,7 +697,6 @@ int iwpm_ack_mapping_info_cb(struct sk_buff *skb, struct netlink_callback *cb)
 	atomic_set(&echo_nlmsg_seq, cb->nlh->nlmsg_seq);
 	return 0;
 }
-EXPORT_SYMBOL(iwpm_ack_mapping_info_cb);
 
 /* netlink attribute policy for the received port mapper error message */
 static const struct nla_policy map_error_policy[IWPM_NLA_ERR_MAX] = {
@@ -751,4 +740,3 @@ int iwpm_mapping_error_cb(struct sk_buff *skb, struct netlink_callback *cb)
 	up(&nlmsg_request->sem);
 	return 0;
 }
-EXPORT_SYMBOL(iwpm_mapping_error_cb);
drivers/infiniband/core/iwpm_util.c +0 -5
index 32ca2aaa4e3b..c46442ac71a2 100644
@@ -81,7 +81,6 @@ int iwpm_init(u8 nl_client)
 	}
 	return ret;
 }
-EXPORT_SYMBOL(iwpm_init);
 
 static void free_hash_bucket(void);
 static void free_reminfo_bucket(void);
@@ -107,7 +106,6 @@ int iwpm_exit(u8 nl_client)
 	iwpm_set_registration(nl_client, IWPM_REG_UNDEF);
 	return 0;
 }
-EXPORT_SYMBOL(iwpm_exit);
 
 static struct hlist_head *get_mapinfo_hash_bucket(struct sockaddr_storage *,
 					       struct sockaddr_storage *);
@@ -146,7 +144,6 @@ int iwpm_create_mapinfo(struct sockaddr_storage *local_sockaddr,
 	spin_unlock_irqrestore(&iwpm_mapinfo_lock, flags);
 	return ret;
 }
-EXPORT_SYMBOL(iwpm_create_mapinfo);
 
 int iwpm_remove_mapinfo(struct sockaddr_storage *local_sockaddr,
 			struct sockaddr_storage *mapped_local_addr)
@@ -182,7 +179,6 @@ int iwpm_remove_mapinfo(struct sockaddr_storage *local_sockaddr,
 	spin_unlock_irqrestore(&iwpm_mapinfo_lock, flags);
 	return ret;
 }
-EXPORT_SYMBOL(iwpm_remove_mapinfo);
 
 static void free_hash_bucket(void)
 {
@@ -295,7 +291,6 @@ int iwpm_get_remote_info(struct sockaddr_storage *mapped_loc_addr,
 	spin_unlock_irqrestore(&iwpm_reminfo_lock, flags);
 	return ret;
 }
-EXPORT_SYMBOL(iwpm_get_remote_info);
 
 struct iwpm_nlmsg_request *iwpm_get_nlmsg_request(__u32 nlmsg_seq,
 					u8 nl_client, gfp_t gfp)

--
2.12.2

--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html