btrfs: raid56: convert kmaps to kmap_local_page
authorIra Weiny <ira.weiny@intel.com>
Wed, 17 Feb 2021 02:48:24 +0000 (18:48 -0800)
committerDavid Sterba <dsterba@suse.com>
Mon, 19 Apr 2021 15:25:16 +0000 (17:25 +0200)
commit94a0b58d2d3b92c72fbf1b97d9129e470c1d2175
treeda41f1e0989122fb13f3988f1e966ee6f9240e3c
parent58c1a35cd52268ae1524b3ff5eac9fa2414e6efc
btrfs: raid56: convert kmaps to kmap_local_page

These kmaps are thread local and don't need to be atomic.  So they can use
the more efficient kmap_local_page().  However, the mapping of pages in
the stripes and the additional parity and qstripe pages are a bit
trickier because the unmapping must occur in the opposite order from the
mapping.  Furthermore, the pointer array in __raid_recover_end_io() may
get reordered.

Convert these calls to kmap_local_page() taking care to reverse the
unmappings of any page arrays as well as being careful with the mappings
of any special pages such as the parity and qstripe pages.

Signed-off-by: Ira Weiny <ira.weiny@intel.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/raid56.c