Re: [PATCH] fs/btrfs: Fix raid6 qstripe kmap'ing
From: David Sterba <hidden>
Date: 2021-02-03 15:59:53
Also in:
linux-fsdevel
On Wed, Jan 27, 2021 at 10:15:03PM -0800, ira.weiny@intel.com wrote:
From: Ira Weiny <redacted>
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@fb.com>
To: Josef Bacik <josef@toxicpanda.com>
To: David Sterba <dsterba@suse.com>
Cc: Miao Xie <redacted>
Signed-off-by: Ira Weiny <redacted>
---
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.