On 4/1/25 04:10, Matthew Wilcox (Oracle) wrote:
> Convert validate_checkpoint() to return a folio and use it throughout
> f2fs_get_valid_checkpoint().  Saves five hidden calls to compound_head().
> 
> Signed-off-by: Matthew Wilcox (Oracle) <wi...@infradead.org>
> ---
>  fs/f2fs/checkpoint.c | 38 +++++++++++++++++++-------------------
>  1 file changed, 19 insertions(+), 19 deletions(-)
> 
> diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c
> index 8ae015b304db..c34add47ea8d 100644
> --- a/fs/f2fs/checkpoint.c
> +++ b/fs/f2fs/checkpoint.c
> @@ -880,7 +880,7 @@ static int get_checkpoint_version(struct f2fs_sb_info 
> *sbi, block_t cp_addr,
>       return 0;
>  }
>  
> -static struct page *validate_checkpoint(struct f2fs_sb_info *sbi,
> +static struct folio *validate_checkpoint(struct f2fs_sb_info *sbi,
>                               block_t cp_addr, unsigned long long *version)
>  {
>       struct folio *cp_folio_1 = NULL, *cp_folio_2 = NULL;
> @@ -913,7 +913,7 @@ static struct page *validate_checkpoint(struct 
> f2fs_sb_info *sbi,
>       if (cur_version == pre_version) {
>               *version = cur_version;
>               f2fs_folio_put(cp_folio_2, true);
> -             return &cp_folio_1->page;
> +             return cp_folio_1;
>       }
>       f2fs_folio_put(cp_folio_2, true);
>  invalid_cp:
> @@ -925,7 +925,7 @@ int f2fs_get_valid_checkpoint(struct f2fs_sb_info *sbi)
>  {
>       struct f2fs_checkpoint *cp_block;
>       struct f2fs_super_block *fsb = sbi->raw_super;
> -     struct page *cp1, *cp2, *cur_page;
> +     struct folio *cp1, *cp2, *cur_folio;
>       unsigned long blk_size = sbi->blocksize;
>       unsigned long long cp1_version = 0, cp2_version = 0;
>       unsigned long long cp_start_blk_no;
> @@ -952,22 +952,22 @@ int f2fs_get_valid_checkpoint(struct f2fs_sb_info *sbi)
>  
>       if (cp1 && cp2) {
>               if (ver_after(cp2_version, cp1_version))
> -                     cur_page = cp2;
> +                     cur_folio = cp2;
>               else
> -                     cur_page = cp1;
> +                     cur_folio = cp1;
>       } else if (cp1) {
> -             cur_page = cp1;
> +             cur_folio = cp1;
>       } else if (cp2) {
> -             cur_page = cp2;
> +             cur_folio = cp2;
>       } else {
>               err = -EFSCORRUPTED;
>               goto fail_no_cp;
>       }
>  
> -     cp_block = (struct f2fs_checkpoint *)page_address(cur_page);
> +     cp_block = folio_address(cur_folio);
>       memcpy(sbi->ckpt, cp_block, blk_size);
>  
> -     if (cur_page == cp1)
> +     if (cur_folio == cp1)
>               sbi->cur_cp_pack = 1;
>       else
>               sbi->cur_cp_pack = 2;
> @@ -982,30 +982,30 @@ int f2fs_get_valid_checkpoint(struct f2fs_sb_info *sbi)
>               goto done;
>  
>       cp_blk_no = le32_to_cpu(fsb->cp_blkaddr);
> -     if (cur_page == cp2)
> +     if (cur_folio == cp2)
>               cp_blk_no += BIT(le32_to_cpu(fsb->log_blocks_per_seg));
>  
>       for (i = 1; i < cp_blks; i++) {
>               void *sit_bitmap_ptr;
>               unsigned char *ckpt = (unsigned char *)sbi->ckpt;
>  
> -             cur_page = f2fs_get_meta_page(sbi, cp_blk_no + i);
> -             if (IS_ERR(cur_page)) {
> -                     err = PTR_ERR(cur_page);
> +             cur_folio = f2fs_get_meta_folio(sbi, cp_blk_no + i);
> +             if (IS_ERR(cur_folio)) {
> +                     err = PTR_ERR(cur_folio);
>                       goto free_fail_no_cp;
>               }
> -             sit_bitmap_ptr = page_address(cur_page);
> +             sit_bitmap_ptr = folio_address(cur_folio);
>               memcpy(ckpt + i * blk_size, sit_bitmap_ptr, blk_size);
> -             f2fs_put_page(cur_page, 1);
> +             f2fs_folio_put(cur_folio, 1);

f2fs_folio_put(cur_folio, true);

>       }
>  done:
> -     f2fs_put_page(cp1, 1);
> -     f2fs_put_page(cp2, 1);
> +     f2fs_folio_put(cp1, 1);
> +     f2fs_folio_put(cp2, 1);

Ditto,

>       return 0;
>  
>  free_fail_no_cp:
> -     f2fs_put_page(cp1, 1);
> -     f2fs_put_page(cp2, 1);
> +     f2fs_folio_put(cp1, 1);
> +     f2fs_folio_put(cp2, 1);

Ditto,

Thanks,

>  fail_no_cp:
>       kvfree(sbi->ckpt);
>       return err;



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to