Re: [PATCH] fs/btrfs: Fix raid6 qstripe kmap'ing
From: David Sterba
Date: Wed Feb 03 2021 - 11:00:11 EST
On Wed, Jan 27, 2021 at 10:15:03PM -0800, ira.weiny@xxxxxxxxx wrote:
> From: Ira Weiny <ira.weiny@xxxxxxxxx>
>
> When a qstripe is required an extra page is allocated and mapped. There
> were 3 problems.
>
> 1) There is no reason to map the qstripe page more than 1 time if the
> number of bits set in rbio->dbitmap is greater than one.
> 2) There is no reason to map the parity page and unmap it each time
> through the loop.
> 3) There is no corresponding call of kunmap() for the qstripe page.
>
> The page memory can continue to be reused with a single mapping on each
> iteration by raid6_call.gen_syndrome() without remapping. So map the
> page for the duration of the loop.
>
> Similarly, improve the algorithm by mapping the parity page just 1 time.
>
> Fixes: 5a6ac9eacb49 ("Btrfs, raid56: support parity scrub on raid56")
> To: Chris Mason <clm@xxxxxx>
> To: Josef Bacik <josef@xxxxxxxxxxxxxx>
> To: David Sterba <dsterba@xxxxxxxx>
> Cc: Miao Xie <miaox@xxxxxxxxxxxxxx>
> Signed-off-by: Ira Weiny <ira.weiny@xxxxxxxxx>
>
> ---
> This was found while replacing kmap() with kmap_local_page(). After
> this patch unwinding all the mappings becomes pretty straight forward.
>
> I'm not exactly sure I've worded this commit message intelligently.
> Please forgive me if there is a better way to word it.
Changelog is good, thanks. I've added stable tags as the missing unmap
is a potential problem.