[lustre-devel] [PATCH 3/6] lustre: convert list_for_each in ksocknal_create_routes

James Simmons jsimmons at infradead.org
Wed Aug 1 20:13:32 PDT 2018


> The two list_for_each() loops in ksocknal_create_routes() cannot be
> trivially converted to list_for_each_entry() as the new loop variable
> is expected to be NULL after the loop, if the loop completed normally.
> 
> If the loop did not complete normally - if an interesting entry was
> found - a 'continue' is required in the higher level loop.  Change
> this 'continue' to a 'goto' so it can be called in the inner loop, and
> we don't need to check for a variable being NULL.

Reviewed-by: James Simmons <jsimmons at infradead.org>
 
> Signed-off-by: NeilBrown <neilb at suse.com>
> ---
>  .../staging/lustre/lnet/klnds/socklnd/socklnd.c    |   29 +++++---------------
>  1 file changed, 7 insertions(+), 22 deletions(-)
> 
> diff --git a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c
> index 491d2ed5b673..f495e0faeac4 100644
> --- a/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c
> +++ b/drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c
> @@ -846,7 +846,6 @@ ksocknal_create_routes(struct ksock_peer *peer, int port,
>  	rwlock_t *global_lock = &ksocknal_data.ksnd_global_lock;
>  	struct lnet_ni *ni = peer->ksnp_ni;
>  	struct ksock_net *net = ni->ni_data;
> -	struct list_head *rtmp;
>  	struct ksock_route *route;
>  	struct ksock_interface *iface;
>  	struct ksock_interface *best_iface;
> @@ -894,17 +893,9 @@ ksocknal_create_routes(struct ksock_peer *peer, int port,
>  		}
>  
>  		/* Already got a route? */
> -		route = NULL;
> -		list_for_each(rtmp, &peer->ksnp_routes) {
> -			route = list_entry(rtmp, struct ksock_route, ksnr_list);
> -
> -			if (route->ksnr_ipaddr == newroute->ksnr_ipaddr)
> -				break;
> -
> -			route = NULL;
> -		}
> -		if (route)
> -			continue;
> +		list_for_each_entry(route, &peer->ksnp_routes, ksnr_list)
> +			if (route->ksnr_ipaddr != newroute->ksnr_ipaddr)
> +				goto next_ipaddr;
>  
>  		best_iface = NULL;
>  		best_nroutes = 0;
> @@ -917,17 +908,9 @@ ksocknal_create_routes(struct ksock_peer *peer, int port,
>  			iface = &net->ksnn_interfaces[j];
>  
>  			/* Using this interface already? */
> -			list_for_each(rtmp, &peer->ksnp_routes) {
> -				route = list_entry(rtmp, struct ksock_route,
> -						   ksnr_list);
> -
> +			list_for_each_entry(route, &peer->ksnp_routes, ksnr_list)
>  				if (route->ksnr_myipaddr == iface->ksni_ipaddr)
> -					break;
> -
> -				route = NULL;
> -			}
> -			if (route)
> -				continue;
> +					goto next_iface;
>  
>  			this_netmatch = (!((iface->ksni_ipaddr ^
>  					   newroute->ksnr_ipaddr) &
> @@ -942,6 +925,7 @@ ksocknal_create_routes(struct ksock_peer *peer, int port,
>  			best_iface = iface;
>  			best_netmatch = this_netmatch;
>  			best_nroutes = iface->ksni_nroutes;
> +		next_iface:;
>  		}
>  
>  		if (!best_iface)
> @@ -952,6 +936,7 @@ ksocknal_create_routes(struct ksock_peer *peer, int port,
>  
>  		ksocknal_add_route_locked(peer, newroute);
>  		newroute = NULL;
> +	next_ipaddr:;
>  	}
>  
>  	write_unlock_bh(global_lock);
> 
> 
> 


More information about the lustre-devel mailing list