[32/34] lnet: lnet_dyn_del_ni: fix ping_info count
diff mbox series

Message ID 153628137252.8267.5413803631901452139.stgit@noble
State New
Headers show
Series
  • Beginning of multi-rail support for drivers/staging/lustre
Related show

Commit Message

NeilBrown Sept. 7, 2018, 12:49 a.m. UTC
- use correct interface count for lnet_ping_info_setup().
- also rename 'net' to 'net_id' so the name 'net' is free
  to identify the lnet_net.

This is part of
    8cbb8cd3e771e7f7e0f99cafc19fad32770dc015
       LU-7734 lnet: Multi-Rail local NI split

Signed-off-by: NeilBrown <neilb@suse.com>
---
 drivers/staging/lustre/lnet/lnet/api-ni.c |   35 +++++++++++++++++------------
 1 file changed, 20 insertions(+), 15 deletions(-)

Comments

Doug Oucharek Sept. 12, 2018, 4:49 a.m. UTC | #1
Reviewed-by: Doug Oucharek <dougso@me.com>

Doug

´╗┐On 9/6/18, 5:55 PM, "NeilBrown" <neilb@suse.com> wrote:

    - use correct interface count for lnet_ping_info_setup().
    - also rename 'net' to 'net_id' so the name 'net' is free
      to identify the lnet_net.
    
    This is part of
        8cbb8cd3e771e7f7e0f99cafc19fad32770dc015
           LU-7734 lnet: Multi-Rail local NI split
    
    Signed-off-by: NeilBrown <neilb@suse.com>
    ---
     drivers/staging/lustre/lnet/lnet/api-ni.c |   35 +++++++++++++++++------------
     1 file changed, 20 insertions(+), 15 deletions(-)
    
    diff --git a/drivers/staging/lustre/lnet/lnet/api-ni.c b/drivers/staging/lustre/lnet/lnet/api-ni.c
    index 2ce0a7212dc2..ff5149da2d79 100644
    --- a/drivers/staging/lustre/lnet/lnet/api-ni.c
    +++ b/drivers/staging/lustre/lnet/lnet/api-ni.c
    @@ -2109,40 +2109,45 @@ lnet_dyn_add_ni(lnet_pid_t requested_pid, struct lnet_ioctl_config_data *conf)
     }
     
     int
    -lnet_dyn_del_ni(__u32 net)
    +lnet_dyn_del_ni(__u32 net_id)
     {
    -	struct lnet_ni *ni;
    +	struct lnet_net *net;
     	struct lnet_ping_info *pinfo;
     	struct lnet_handle_md md_handle;
     	int rc;
    +	int		  net_ni_count;
     
     	/* don't allow userspace to shutdown the LOLND */
    -	if (LNET_NETTYP(net) == LOLND)
    +	if (LNET_NETTYP(net_id) == LOLND)
     		return -EINVAL;
     
     	mutex_lock(&the_lnet.ln_api_mutex);
    +
    +	lnet_net_lock(0);
    +
    +	net = lnet_get_net_locked(net_id);
    +	if (net == NULL) {
    +		rc = -EINVAL;
    +		goto out;
    +	}
    +
    +	net_ni_count = lnet_get_net_ni_count_locked(net);
    +
    +	lnet_net_unlock(0);
    +
     	/* create and link a new ping info, before removing the old one */
     	rc = lnet_ping_info_setup(&pinfo, &md_handle,
    -				  lnet_get_ni_count() - 1, false);
    +				  lnet_get_ni_count() - net_ni_count, false);
     	if (rc)
     		goto out;
     
    -	ni = lnet_net2ni(net);
    -	if (!ni) {
    -		rc = -EINVAL;
    -		goto failed;
    -	}
    -
    -	lnet_shutdown_lndni(ni);
    +	lnet_shutdown_lndnet(net);
     
     	if (!lnet_count_acceptor_nets())
     		lnet_acceptor_stop();
     
     	lnet_ping_target_update(pinfo, md_handle);
    -	goto out;
    -failed:
    -	lnet_ping_md_unlink(pinfo, &md_handle);
    -	lnet_ping_info_free(pinfo);
    +
     out:
     	mutex_unlock(&the_lnet.ln_api_mutex);

Patch
diff mbox series

diff --git a/drivers/staging/lustre/lnet/lnet/api-ni.c b/drivers/staging/lustre/lnet/lnet/api-ni.c
index 2ce0a7212dc2..ff5149da2d79 100644
--- a/drivers/staging/lustre/lnet/lnet/api-ni.c
+++ b/drivers/staging/lustre/lnet/lnet/api-ni.c
@@ -2109,40 +2109,45 @@  lnet_dyn_add_ni(lnet_pid_t requested_pid, struct lnet_ioctl_config_data *conf)
 }
 
 int
-lnet_dyn_del_ni(__u32 net)
+lnet_dyn_del_ni(__u32 net_id)
 {
-	struct lnet_ni *ni;
+	struct lnet_net *net;
 	struct lnet_ping_info *pinfo;
 	struct lnet_handle_md md_handle;
 	int rc;
+	int		  net_ni_count;
 
 	/* don't allow userspace to shutdown the LOLND */
-	if (LNET_NETTYP(net) == LOLND)
+	if (LNET_NETTYP(net_id) == LOLND)
 		return -EINVAL;
 
 	mutex_lock(&the_lnet.ln_api_mutex);
+
+	lnet_net_lock(0);
+
+	net = lnet_get_net_locked(net_id);
+	if (net == NULL) {
+		rc = -EINVAL;
+		goto out;
+	}
+
+	net_ni_count = lnet_get_net_ni_count_locked(net);
+
+	lnet_net_unlock(0);
+
 	/* create and link a new ping info, before removing the old one */
 	rc = lnet_ping_info_setup(&pinfo, &md_handle,
-				  lnet_get_ni_count() - 1, false);
+				  lnet_get_ni_count() - net_ni_count, false);
 	if (rc)
 		goto out;
 
-	ni = lnet_net2ni(net);
-	if (!ni) {
-		rc = -EINVAL;
-		goto failed;
-	}
-
-	lnet_shutdown_lndni(ni);
+	lnet_shutdown_lndnet(net);
 
 	if (!lnet_count_acceptor_nets())
 		lnet_acceptor_stop();
 
 	lnet_ping_target_update(pinfo, md_handle);
-	goto out;
-failed:
-	lnet_ping_md_unlink(pinfo, &md_handle);
-	lnet_ping_info_free(pinfo);
+
 out:
 	mutex_unlock(&the_lnet.ln_api_mutex);