[RFC,2/3] mpage: use bio_for_each_folio_all in mpage_end_io()

Message ID 20230315123233.121593-3-p.raghav@samsung.com
State New
Headers
Series convert page_endio to folio_endio |

Commit Message

Pankaj Raghav March 15, 2023, 12:32 p.m. UTC
  Use bio_for_each_folio_all to iterate through folios in a bio so that
the folios can be directly passed to the folio_endio() function.

Signed-off-by: Pankaj Raghav <p.raghav@samsung.com>
---
 fs/mpage.c | 11 ++++-------
 1 file changed, 4 insertions(+), 7 deletions(-)
  

Comments

Luis Chamberlain March 15, 2023, 2:47 p.m. UTC | #1
On Wed, Mar 15, 2023 at 01:32:32PM +0100, Pankaj Raghav wrote:
> Use bio_for_each_folio_all to iterate through folios in a bio so that
> the folios can be directly passed to the folio_endio() function.
> 
> Signed-off-by: Pankaj Raghav <p.raghav@samsung.com>

Reviewed-by: Luis Chamberlain <mcgrof@kernel.org>

  Luis
  
Hannes Reinecke March 15, 2023, 2:52 p.m. UTC | #2
On 3/15/23 13:32, Pankaj Raghav wrote:
> Use bio_for_each_folio_all to iterate through folios in a bio so that
> the folios can be directly passed to the folio_endio() function.
> 
> Signed-off-by: Pankaj Raghav <p.raghav@samsung.com>
> ---
>   fs/mpage.c | 11 ++++-------
>   1 file changed, 4 insertions(+), 7 deletions(-)
> 
> diff --git a/fs/mpage.c b/fs/mpage.c
> index 40e86e839e77..bfcc139938a8 100644
> --- a/fs/mpage.c
> +++ b/fs/mpage.c
> @@ -45,14 +45,11 @@
>    */
>   static void mpage_end_io(struct bio *bio)
>   {
> -	struct bio_vec *bv;
> -	struct bvec_iter_all iter_all;
> +	struct folio_iter fi;
>   
> -	bio_for_each_segment_all(bv, bio, iter_all) {
> -		struct page *page = bv->bv_page;
> -		folio_endio(page_folio(page), bio_op(bio),
> -			   blk_status_to_errno(bio->bi_status));
> -	}
> +	bio_for_each_folio_all(fi, bio)
> +		folio_endio(fi.folio, bio_op(bio),
> +			    blk_status_to_errno(bio->bi_status));
>   
>   	bio_put(bio);
>   }

Ah. Here it is.

I would suggest merge these two patches.

Cheers,

Hannes
  
Matthew Wilcox March 15, 2023, 4:08 p.m. UTC | #3
On Wed, Mar 15, 2023 at 03:52:15PM +0100, Hannes Reinecke wrote:
> On 3/15/23 13:32, Pankaj Raghav wrote:
> > Use bio_for_each_folio_all to iterate through folios in a bio so that
> > the folios can be directly passed to the folio_endio() function.
> > +	bio_for_each_folio_all(fi, bio)
> > +		folio_endio(fi.folio, bio_op(bio),
> > +			    blk_status_to_errno(bio->bi_status));
> >   	bio_put(bio);
> >   }
> 
> Ah. Here it is.
> 
> I would suggest merge these two patches.

The right way to have handled this patch series was:

1. Introduce a new folio_endio() [but see Christoph's mail on why we
shouldn't do that]
2-n convert callers to use folios directly
n+1 remove page_endio() entirely.

Note that patch n+1 might not be part of this patch series; sometimes
it takes a while to convert all callers to use folios.

I very much dislike the way this was done by pushing the page_folio()
call into each of the callers because it makes the entire series hard to
review.
  
Pankaj Raghav March 16, 2023, 10:07 a.m. UTC | #4
On 2023-03-15 17:08, Matthew Wilcox wrote:
> On Wed, Mar 15, 2023 at 03:52:15PM +0100, Hannes Reinecke wrote:
>> On 3/15/23 13:32, Pankaj Raghav wrote:
>>> Use bio_for_each_folio_all to iterate through folios in a bio so that
>>> the folios can be directly passed to the folio_endio() function.
>>> +	bio_for_each_folio_all(fi, bio)
>>> +		folio_endio(fi.folio, bio_op(bio),
>>> +			    blk_status_to_errno(bio->bi_status));
>>>   	bio_put(bio);
>>>   }
>>
>> Ah. Here it is.
>>
>> I would suggest merge these two patches.
> 
> The right way to have handled this patch series was:
> 
> 1. Introduce a new folio_endio() [but see Christoph's mail on why we
> shouldn't do that]
> 2-n convert callers to use folios directly
> n+1 remove page_endio() entirely.
> 
> Note that patch n+1 might not be part of this patch series; sometimes
> it takes a while to convert all callers to use folios.
> 

This is definitely a much better way to handle these changes. Thanks willy.

> I very much dislike the way this was done by pushing the page_folio()
> call into each of the callers because it makes the entire series hard to
> review.
  

Patch

diff --git a/fs/mpage.c b/fs/mpage.c
index 40e86e839e77..bfcc139938a8 100644
--- a/fs/mpage.c
+++ b/fs/mpage.c
@@ -45,14 +45,11 @@ 
  */
 static void mpage_end_io(struct bio *bio)
 {
-	struct bio_vec *bv;
-	struct bvec_iter_all iter_all;
+	struct folio_iter fi;
 
-	bio_for_each_segment_all(bv, bio, iter_all) {
-		struct page *page = bv->bv_page;
-		folio_endio(page_folio(page), bio_op(bio),
-			   blk_status_to_errno(bio->bi_status));
-	}
+	bio_for_each_folio_all(fi, bio)
+		folio_endio(fi.folio, bio_op(bio),
+			    blk_status_to_errno(bio->bi_status));
 
 	bio_put(bio);
 }