All of lore.kernel.org
 help / color / mirror / Atom feed
From: Danil Kipnis <danil.kipnis@cloud.ionos.com>
To: Bart Van Assche <bvanassche@acm.org>
Cc: linux-block@vger.kernel.org, linux-rdma@vger.kernel.org,
	Linux Next Mailing List <linux-next@vger.kernel.org>,
	Jens Axboe <axboe@kernel.dk>, Doug Ledford <dledford@redhat.com>,
	Jason Gunthorpe <jgg@ziepe.ca>, Leon Romanovsky <leon@kernel.org>,
	Jinpu Wang <jinpu.wang@cloud.ionos.com>,
	kbuild test robot <lkp@intel.com>
Subject: Re: [PATCH v2] rtrs-clt: silence kbuild test inconsistent intenting smatch warning
Date: Wed, 20 May 2020 12:02:44 +0200	[thread overview]
Message-ID: <CAHg0HuwzuTAaaq6uuCD0sJJ2NwyATZRtMj_H1B8r8308EieKwA@mail.gmail.com> (raw)
In-Reply-To: <76b6b987-4f63-2487-7fbe-a1d9c2f06b76@acm.org>

Hi Bart,

On Tue, May 19, 2020 at 4:29 PM Bart Van Assche <bvanassche@acm.org> wrote:
>
> On 2020-05-19 04:29, Danil Kipnis wrote:
> > Kbuild test robot reports a smatch warning:
> > drivers/infiniband/ulp/rtrs/rtrs-clt.c:1196 rtrs_clt_failover_req() warn: inconsistent indenting
> > drivers/infiniband/ulp/rtrs/rtrs-clt.c:2890 rtrs_clt_request() warn: inconsistent indenting
> >
> > To get rid of the warning, move the while_each_path() macro to a newline.
> > Rename the macro to end_each_path() to avoid the "while should follow close
> > brace '}'" checkpatch error.
> >
> > Fixes: 6a98d71daea1 ("RDMA/rtrs: client: main functionality")
> >
> > Signed-off-by: Danil Kipnis <danil.kipnis@cloud.ionos.com>
> > Reported-by: kbuild test robot <lkp@intel.com>
> > ---
> >  v1->v2 Add fixes line
> >  drivers/infiniband/ulp/rtrs/rtrs-clt.c | 8 +++++---
> >  1 file changed, 5 insertions(+), 3 deletions(-)
> >
> > diff --git a/drivers/infiniband/ulp/rtrs/rtrs-clt.c b/drivers/infiniband/ulp/rtrs/rtrs-clt.c
> > index 468fdd0d8713..0fa3a229d90e 100644
> > --- a/drivers/infiniband/ulp/rtrs/rtrs-clt.c
> > +++ b/drivers/infiniband/ulp/rtrs/rtrs-clt.c
> > @@ -734,7 +734,7 @@ struct path_it {
> >                         (it)->i < (it)->clt->paths_num;               \
> >            (it)->i++)
> >
> > -#define while_each_path(it)                                          \
> > +#define end_each_path(it)                                            \
> >       path_it_deinit(it);                                             \
> >       rcu_read_unlock();                                              \
> >       }
> > @@ -1193,7 +1193,8 @@ static int rtrs_clt_failover_req(struct rtrs_clt *clt,
> >               /* Success path */
> >               rtrs_clt_inc_failover_cnt(alive_sess->stats);
> >               break;
> > -     } while_each_path(&it);
> > +     }
> > +     end_each_path(&it);
> >
> >       return err;
> >  }
> > @@ -2887,7 +2888,8 @@ int rtrs_clt_request(int dir, struct rtrs_clt_req_ops *ops,
> >               }
> >               /* Success path */
> >               break;
> > -     } while_each_path(&it);
> > +     }
> > +     end_each_path(&it);
> >
> >       return err;
> >  }
>
> I don't like the do_each_path() and end_each_path() macros because these do not
> follow the pattern that is used elsewhere in the kernel to use a single macro
> to iterate over a custom container. Has it been considered to combine these two
> macros into a single macro, e.g. something like the following (untested) patch?
>
>
> Subject: [PATCH] Combine while_each_path() and do_each_path() into
>  for_each_path()
>
> ---
>  drivers/infiniband/ulp/rtrs/rtrs-clt.c | 23 +++++++++--------------
>  1 file changed, 9 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/infiniband/ulp/rtrs/rtrs-clt.c b/drivers/infiniband/ulp/rtrs/rtrs-clt.c
> index 468fdd0d8713..8dfa56dc32bc 100644
> --- a/drivers/infiniband/ulp/rtrs/rtrs-clt.c
> +++ 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++)
>
> -#define while_each_path(it)                                            \
> -       path_it_deinit(it);                                             \
> -       rcu_read_unlock();                                              \
> -       }
> -
>  /**
>   * list_next_or_null_rr_rcu - get next list element in round-robin fashion.
>   * @head:      the head for the list.
> @@ -1177,7 +1172,7 @@ static int rtrs_clt_failover_req(struct rtrs_clt *clt,
>         int err = -ECONNABORTED;
>         struct path_it it;
>
> -       do_each_path(alive_sess, clt, &it) {
> +       for_each_path(alive_sess, clt, &it) {
>                 if (unlikely(READ_ONCE(alive_sess->state) !=
>                              RTRS_CLT_CONNECTED))
>                         continue;
> @@ -1193,7 +1188,7 @@ static int rtrs_clt_failover_req(struct rtrs_clt *clt,
>                 /* Success path */
>                 rtrs_clt_inc_failover_cnt(alive_sess->stats);
>                 break;
> -       } while_each_path(&it);
> +       }
>
>         return err;
>  }
> @@ -2862,7 +2857,7 @@ int rtrs_clt_request(int dir, struct rtrs_clt_req_ops *ops,
>                 dma_dir = DMA_TO_DEVICE;
>         }
>
> -       do_each_path(sess, clt, &it) {
> +       for_each_path(sess, clt, &it) {
>                 if (unlikely(READ_ONCE(sess->state) != RTRS_CLT_CONNECTED))
>                         continue;
>
> @@ -2887,7 +2882,7 @@ int rtrs_clt_request(int dir, struct rtrs_clt_req_ops *ops,
>                 }
>                 /* Success path */
>                 break;
> -       } while_each_path(&it);
> +       }
>
>         return err;
>  }

This does look better. Will run it through tests.

      parent reply	other threads:[~2020-05-20 10:02 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-19 11:29 [PATCH v2] rtrs-clt: silence kbuild test inconsistent intenting smatch warning Danil Kipnis
2020-05-19 14:29 ` Bart Van Assche
2020-05-19 23:38   ` Jason Gunthorpe
2020-05-20 10:04     ` Danil Kipnis
2020-05-20 19:11       ` Jason Gunthorpe
2020-05-22  5:39         ` [PATCH] RDMA/rtrs: get rid of the do_next_path while_next_path macros Danil Kipnis
2020-05-23  0:24           ` Jason Gunthorpe
2020-05-20 10:02   ` Danil Kipnis [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAHg0HuwzuTAaaq6uuCD0sJJ2NwyATZRtMj_H1B8r8308EieKwA@mail.gmail.com \
    --to=danil.kipnis@cloud.ionos.com \
    --cc=axboe@kernel.dk \
    --cc=bvanassche@acm.org \
    --cc=dledford@redhat.com \
    --cc=jgg@ziepe.ca \
    --cc=jinpu.wang@cloud.ionos.com \
    --cc=leon@kernel.org \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-next@vger.kernel.org \
    --cc=linux-rdma@vger.kernel.org \
    --cc=lkp@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.