On Tue, May 19, 2020 at 07:29:15AM -0700, Bart Van Assche wrote: > diff --git a/drivers/infiniband/ulp/rtrs/rtrs-clt.c b/drivers/infiniband/ulp/rtrs/rtrs-clt.c > index 468fdd0d8713..8dfa56dc32bc 100644 > +++ b/drivers/infiniband/ulp/rtrs/rtrs-clt.c > @@ -727,18 +727,13 @@ struct path_it { > struct rtrs_clt_sess *(*next_path)(struct path_it *it); > }; > > -#define do_each_path(path, clt, it) { \ > - path_it_init(it, clt); \ > - rcu_read_lock(); \ > - for ((it)->i = 0; ((path) = ((it)->next_path)(it)) && \ > - (it)->i < (it)->clt->paths_num; \ > +#define for_each_path(path, clt, it) \ > + for (path_it_init((it), (clt)), rcu_read_lock(), (it)->i = 0; \ > + (((path) = ((it)->next_path)(it)) && \ > + (it)->i < (it)->clt->paths_num) || \ > + (path_it_deinit(it), rcu_read_unlock(), 0); \ > (it)->i++) That is nicer, even better to write it with some inlines.. Jason