Re: [PATCH 07/15] md: Clean up folio sync support related code

Xiao Ni <[email protected]>
Newsgroups gmane.linux.kernel,gmane.linux.raid
Message-ID <CALTww2_ueZsHvk-=x6xcnxsZO9_U2CPZ=sSTMKM=rwUpQUsgkw@mail.gmail.com>
On Wed, Dec 17, 2025 at 8:11 PM <[email protected]> wrote:
>
> From: Li Nan <[email protected]>
>
> 1. Remove resync_get_all_folio() and invoke folio_get() directly instead.
> 2. Clean up redundant while(0) loop in md_bio_reset_resync_folio().
> 3. Clean up bio variable by directly referencing r10_bio->devs[j].bio
>    instead in r1buf_pool_alloc() and r10buf_pool_alloc().
> 4. Clean up RESYNC_PAGES.
>
> Signed-off-by: Li Nan <[email protected]>
> ---
>  drivers/md/raid1-10.c | 22 ++++++----------------
>  drivers/md/raid1.c    |  6 ++----
>  drivers/md/raid10.c   |  6 ++----
>  3 files changed, 10 insertions(+), 24 deletions(-)
>
> diff --git a/drivers/md/raid1-10.c b/drivers/md/raid1-10.c
> index b8f2cc32606f..568ab002691f 100644
> --- a/drivers/md/raid1-10.c
> +++ b/drivers/md/raid1-10.c
> @@ -1,7 +1,6 @@
>  // SPDX-License-Identifier: GPL-2.0
>  /* Maximum size of each resync request */
>  #define RESYNC_BLOCK_SIZE (64*1024)
> -#define RESYNC_PAGES ((RESYNC_BLOCK_SIZE + PAGE_SIZE-1) / PAGE_SIZE)
>  #define RESYNC_SECTORS (RESYNC_BLOCK_SIZE >> 9)
>
>  /*
> @@ -56,11 +55,6 @@ static inline void resync_free_folio(struct resync_folio *rf)
>         folio_put(rf->folio);
>  }
>
> -static inline void resync_get_all_folio(struct resync_folio *rf)
> -{
> -       folio_get(rf->folio);
> -}
> -
>  static inline struct folio *resync_fetch_folio(struct resync_folio *rf)
>  {
>         return rf->folio;
> @@ -80,16 +74,12 @@ static void md_bio_reset_resync_folio(struct bio *bio, struct resync_folio *rf,
>                                int size)
>  {
>         /* initialize bvec table again */
> -       do {
> -               struct folio *folio = resync_fetch_folio(rf);
> -               int len = min_t(int, size, RESYNC_BLOCK_SIZE);
> -
> -               if (WARN_ON(!bio_add_folio(bio, folio, len, 0))) {
> -                       bio->bi_status = BLK_STS_RESOURCE;
> -                       bio_endio(bio);
> -                       return;
> -               }
> -       } while (0);
> +       if (WARN_ON(!bio_add_folio(bio, resync_fetch_folio(rf),
> +                                  min_t(int, size, RESYNC_BLOCK_SIZE),
> +                                  0))) {
> +               bio->bi_status = BLK_STS_RESOURCE;
> +               bio_endio(bio);
> +       }
>  }
>
>
> diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
> index 370bdecf5487..f01bab41da95 100644
> --- a/drivers/md/raid1.c
> +++ b/drivers/md/raid1.c
> @@ -181,18 +181,16 @@ static void * r1buf_pool_alloc(gfp_t gfp_flags, void *data)
>         for (j = 0; j < conf->raid_disks * 2; j++) {
>                 struct resync_folio *rf = &rfs[j];
>
> -               bio = r1_bio->bios[j];
> -
>                 if (j < need_folio) {
>                         if (resync_alloc_folio(rf, gfp_flags))
>                                 goto out_free_folio;
>                 } else {
>                         memcpy(rf, &rfs[0], sizeof(*rf));
> -                       resync_get_all_folio(rf);
> +                       folio_get(rf->folio);
>                 }
>
>                 rf->raid_bio = r1_bio;
> -               bio->bi_private = rf;
> +               r1_bio->bios[j]->bi_private = rf;
>         }
>
>         r1_bio->master_bio = NULL;
> diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
> index c93706806358..a03afa9a6a5b 100644
> --- a/drivers/md/raid10.c
> +++ b/drivers/md/raid10.c
> @@ -183,19 +183,17 @@ static void * r10buf_pool_alloc(gfp_t gfp_flags, void *data)
>                 if (rbio)
>                         rf_repl = &rfs[nalloc + j];
>
> -               bio = r10_bio->devs[j].bio;
> -
>                 if (!j || test_bit(MD_RECOVERY_SYNC,
>                                    &conf->mddev->recovery)) {
>                         if (resync_alloc_folio(rf, gfp_flags))
>                                 goto out_free_pages;
>                 } else {
>                         memcpy(rf, &rfs[0], sizeof(*rf));
> -                       resync_get_all_folio(rf);
> +                       folio_get(rf->folio);
>                 }
>
>                 rf->raid_bio = r10_bio;
> -               bio->bi_private = rf;
> +               r10_bio->devs[j].bio->bi_private = rf;
>                 if (rbio) {
>                         memcpy(rf_repl, rf, sizeof(*rf));
>                         rbio->bi_private = rf_repl;
> --
> 2.39.2
>

Reviewed-by: Xiao Ni <[email protected]>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.