Messages in this thread | | | Subject | Re: [PATCH v2 06/12] md/raid5: Drop the do_prepare flag in raid5_make_request() | From | Guoqing Jiang <> | Date | Wed, 27 Apr 2022 10:11:36 +0800 |
| |
On 4/21/22 3:54 AM, Logan Gunthorpe wrote: > prepare_to_wait() can be reasonably called after schedule instead of > setting a flag and preparing in the next loop iteration. > > This means that prepare_to_wait() will be called before > read_seqcount_begin(), but there shouldn't be any reason that > the order matters here. On the first iteration of the loop > prepare_to_wait() is already called first. > > Signed-off-by: Logan Gunthorpe <logang@deltatee.com> > --- > drivers/md/raid5.c | 8 ++------ > 1 file changed, 2 insertions(+), 6 deletions(-) > > diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c > index 5a7334ba0997..b9f618356446 100644 > --- a/drivers/md/raid5.c > +++ b/drivers/md/raid5.c > @@ -5915,7 +5915,6 @@ static bool raid5_make_request(struct mddev *mddev, struct bio * bi) > const int rw = bio_data_dir(bi); > enum stripe_result res; > DEFINE_WAIT(w); > - bool do_prepare; > > if (unlikely(bi->bi_opf & REQ_PREFLUSH)) { > int ret = log_handle_flush_request(conf, bi); > @@ -5973,12 +5972,8 @@ static bool raid5_make_request(struct mddev *mddev, struct bio * bi) > for (; logical_sector < last_sector; logical_sector += RAID5_STRIPE_SECTORS(conf)) { > int seq; > > - do_prepare = false; > retry: > seq = read_seqcount_begin(&conf->gen_lock); > - if (do_prepare) > - prepare_to_wait(&conf->wait_for_overlap, &w, > - TASK_UNINTERRUPTIBLE); > > res = make_stripe_request(mddev, conf, &ctx, logical_sector, > bi, seq); > @@ -5988,7 +5983,8 @@ static bool raid5_make_request(struct mddev *mddev, struct bio * bi) > goto retry; > } else if (res == STRIPE_SCHEDULE_AND_RETRY) { > schedule(); > - do_prepare = true; > + prepare_to_wait(&conf->wait_for_overlap, &w, > + TASK_UNINTERRUPTIBLE); > goto retry; > } > }
Reviewed-by: Guoqing Jiang <guoqing.jiang@linux.dev>
Thanks, Guoqing
| |