Discussion:
[PATCH 1/1] RDMA/core: Fixes for port mapper client registration
Tatyana Nikolova
2014-10-16 16:19:54 UTC
Permalink
IWPM_REG_CLIENT and IWPM_PREV_REG_CLIENT are added:

IWPM_REG_CLIENT is a client, registered with the user
space port mapper daemon, available at the time of the
client register pid request.
IWPM_PREV_REG_CLIENT is a client, which has been IWPM_REG_CLIENT
before the user space port mapper daemon is stopped.
After restarting the port mapper, IWPM_PREV_REG_CLIENTs provide
their mapping info to the port mapper daemon and
they are allowed to send remove mapping requests aftewards.

Signed-off-by: Tatyana Nikolova <tatyana.e.nikolova-***@public.gmane.org>
---
drivers/infiniband/core/iwpm_msg.c | 13 +++++++------
drivers/infiniband/core/iwpm_util.c | 1 +
drivers/infiniband/core/iwpm_util.h | 3 +++
3 files changed, 11 insertions(+), 6 deletions(-)

diff --git a/drivers/infiniband/core/iwpm_msg.c b/drivers/infiniband/core/iwpm_msg.c
index ab08170..2aca295 100644
--- a/drivers/infiniband/core/iwpm_msg.c
+++ b/drivers/infiniband/core/iwpm_msg.c
@@ -67,7 +67,9 @@ int iwpm_register_pid(struct iwpm_dev_data *pm_msg, u8 nl_client)
err_str = "Invalid port mapper client";
goto pid_query_error;
}
- if (iwpm_registered_client(nl_client))
+ if (iwpm_registered_client(nl_client) == IWPM_REG_CLIENT)
+ return 0;
+ if (iwpm_user_pid == IWPM_PID_UNAVAILABLE)
return 0;
skb = iwpm_create_nlmsg(RDMA_NL_IWPM_REG_PID, &nlh, nl_client);
if (!skb) {
@@ -106,7 +108,6 @@ int iwpm_register_pid(struct iwpm_dev_data *pm_msg, u8 nl_client)
ret = ibnl_multicast(skb, nlh, RDMA_NL_GROUP_IWPM, GFP_KERNEL);
if (ret) {
skb = NULL; /* skb is freed in the netlink send-op handling */
- iwpm_set_registered(nl_client, 1);
iwpm_user_pid = IWPM_PID_UNAVAILABLE;
err_str = "Unable to send a nlmsg";
goto pid_query_error;
@@ -144,7 +145,7 @@ int iwpm_add_mapping(struct iwpm_sa_data *pm_msg, u8 nl_client)
err_str = "Invalid port mapper client";
goto add_mapping_error;
}
- if (!iwpm_registered_client(nl_client)) {
+ if (iwpm_registered_client(nl_client) != IWPM_REG_CLIENT) {
err_str = "Unregistered port mapper client";
goto add_mapping_error;
}
@@ -214,7 +215,7 @@ int iwpm_add_and_query_mapping(struct iwpm_sa_data *pm_msg, u8 nl_client)
err_str = "Invalid port mapper client";
goto query_mapping_error;
}
- if (!iwpm_registered_client(nl_client)) {
+ if (iwpm_registered_client(nl_client) != IWPM_REG_CLIENT) {
err_str = "Unregistered port mapper client";
goto query_mapping_error;
}
@@ -388,7 +389,7 @@ int iwpm_register_pid_cb(struct sk_buff *skb, struct netlink_callback *cb)
pr_debug("%s: iWarp Port Mapper (pid = %d) is available!\n",
__func__, iwpm_user_pid);
if (iwpm_valid_client(nl_client))
- iwpm_set_registered(nl_client, 1);
+ iwpm_set_registered(nl_client, IWPM_REG_CLIENT);
register_pid_response_exit:
nlmsg_request->request_done = 1;
/* always for found nlmsg_request */
@@ -669,7 +670,7 @@ int iwpm_mapping_info_cb(struct sk_buff *skb, struct netlink_callback *cb)
__func__, nl_client);
return ret;
}
- iwpm_set_registered(nl_client, 0);
+ iwpm_set_registered(nl_client, IWPM_PREV_REG_CLIENT);
atomic_set(&echo_nlmsg_seq, cb->nlh->nlmsg_seq);
if (!iwpm_mapinfo_available())
return 0;
diff --git a/drivers/infiniband/core/iwpm_util.c b/drivers/infiniband/core/iwpm_util.c
index a626795..7a20a1b 100644
--- a/drivers/infiniband/core/iwpm_util.c
+++ b/drivers/infiniband/core/iwpm_util.c
@@ -106,6 +106,7 @@ int iwpm_exit(u8 nl_client)
}
mutex_unlock(&iwpm_admin_lock);
iwpm_set_valid(nl_client, 0);
+ iwpm_set_registered(nl_client, 0);
return 0;
}
EXPORT_SYMBOL(iwpm_exit);
diff --git a/drivers/infiniband/core/iwpm_util.h b/drivers/infiniband/core/iwpm_util.h
index ee2d9ff..b1dfd1a 100644
--- a/drivers/infiniband/core/iwpm_util.h
+++ b/drivers/infiniband/core/iwpm_util.h
@@ -58,6 +58,9 @@
#define IWPM_PID_UNDEFINED -1
#define IWPM_PID_UNAVAILABLE -2

+#define IWPM_REG_CLIENT 1
+#define IWPM_PREV_REG_CLIENT 2
+
struct iwpm_nlmsg_request {
struct list_head inprocess_list;
__u32 nlmsg_seq;
--
1.7.1

--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-***@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Steve Wise
2014-10-16 19:46:50 UTC
Permalink
-----Original Message-----
Sent: Thursday, October 16, 2014 11:20 AM
To: Roland Dreier
Subject: [PATCH 1/1] RDMA/core: Fixes for port mapper client registration
IWPM_REG_CLIENT is a client, registered with the user
space port mapper daemon, available at the time of the
client register pid request.
IWPM_PREV_REG_CLIENT is a client, which has been IWPM_REG_CLIENT
before the user space port mapper daemon is stopped.
After restarting the port mapper, IWPM_PREV_REG_CLIENTs provide
their mapping info to the port mapper daemon and
they are allowed to send remove mapping requests aftewards.
Hey Tatyana,

Nit: "aftewards" is misspelled.

Doesn't this feature require provider support? It seems like this patch really doesn't do anything yet.

Steve.

--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-***@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Nikolova, Tatyana E
2014-10-16 22:19:00 UTC
Permalink
Hello Steve,
Post by Steve Wise
Doesn't this feature require provider support? It seems like this patch really doesn't do anything yet.
It is a fix for the client registration logic. When the user space port mapper is restarted, the IWPM_PREV_REG_CLIENTs send their mapping information to the port mapper, afterwards they are allowed to send remove mapping requests and they should be.

If you look at the remove mapping request logic, you see that only registered clients are allowed to make a remove mapping request.
In other words, without this fix there are just registered and non-registered clients. IWPM_PREV_REG_CLIENTs are handled like non-registered clients, so their remove mapping requests aren't allowed to go the port mapper, when the rdma application closes the connections in use.

No provider support is necessary.

Thanks,
Tatyana

-----Original Message-----
From: linux-rdma-owner-***@public.gmane.org [mailto:linux-rdma-owner-***@public.gmane.org] On Behalf Of Steve Wise
Sent: Thursday, October 16, 2014 2:47 PM
To: Nikolova, Tatyana E; 'Roland Dreier'
Cc: Lacombe, John S; linux-rdma-***@public.gmane.org
Subject: RE: [PATCH 1/1] RDMA/core: Fixes for port mapper client registration
-----Original Message-----
Nikolova
Sent: Thursday, October 16, 2014 11:20 AM
To: Roland Dreier
Subject: [PATCH 1/1] RDMA/core: Fixes for port mapper client
registration
IWPM_REG_CLIENT is a client, registered with the user space port
mapper daemon, available at the time of the client register pid
request.
IWPM_PREV_REG_CLIENT is a client, which has been IWPM_REG_CLIENT
before the user space port mapper daemon is stopped.
After restarting the port mapper, IWPM_PREV_REG_CLIENTs provide their
mapping info to the port mapper daemon and they are allowed to send
remove mapping requests aftewards.
Hey Tatyana,

Nit: "aftewards" is misspelled.

Doesn't this feature require provider support? It seems like this patch really doesn't do anything yet.

Steve.

--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to majordomo-***@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-***@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Steve Wise
2014-10-16 23:18:47 UTC
Permalink
Post by Nikolova, Tatyana E
Hello Steve,
Post by Steve Wise
Doesn't this feature require provider support? It seems like this patch really doesn't do anything yet.
It is a fix for the client registration logic. When the user space port mapper is restarted, the IWPM_PREV_REG_CLIENTs send their mapping information to the port mapper, afterwards they are allowed to send remove mapping requests and they should be.
If you look at the remove mapping request logic, you see that only registered clients are allowed to make a remove mapping request.
In other words, without this fix there are just registered and non-registered clients. IWPM_PREV_REG_CLIENTs are handled like non-registered clients, so their remove mapping requests aren't allowed to go the port mapper, when the rdma application closes the connections in use.
No provider support is necessary.
Thanks for clarifying.

Steve.

--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-***@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Loading...