[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