Message ID | 20141016161954.GA23268@TENIKOLO-MOBL2 (mailing list archive) |
---|---|
State | Rejected |
Headers | show |
> -----Original Message----- > From: linux-rdma-owner@vger.kernel.org [mailto:linux-rdma-owner@vger.kernel.org] On Behalf Of Tatyana Nikolova > Sent: Thursday, October 16, 2014 11:20 AM > To: Roland Dreier > Cc: john.s.lacombe@intel.com; swise@opengridcomputing.com; linux-rdma@vger.kernel.org > Subject: [PATCH 1/1] RDMA/core: Fixes for port mapper client registration > > 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. > 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@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Hello Steve, >>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@vger.kernel.org [mailto:linux-rdma-owner@vger.kernel.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@vger.kernel.org Subject: RE: [PATCH 1/1] RDMA/core: Fixes for port mapper client registration > -----Original Message----- > From: linux-rdma-owner@vger.kernel.org > [mailto:linux-rdma-owner@vger.kernel.org] On Behalf Of Tatyana > Nikolova > Sent: Thursday, October 16, 2014 11:20 AM > To: Roland Dreier > Cc: john.s.lacombe@intel.com; swise@opengridcomputing.com; > linux-rdma@vger.kernel.org > Subject: [PATCH 1/1] RDMA/core: Fixes for port mapper client > registration > > 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. > 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@vger.kernel.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@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 10/16/2014 5:19 PM, Nikolova, Tatyana E wrote: > Hello Steve, > >>> 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@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
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;
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@intel.com> --- 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(-)