btrfs: drop from __GFP_HIGHMEM all allocations
authorDavid Sterba <dsterba@suse.com>
Mon, 14 Jun 2021 20:22:22 +0000 (22:22 +0200)
committerDavid Sterba <dsterba@suse.com>
Mon, 23 Aug 2021 11:18:59 +0000 (13:18 +0200)
commitb0ee5e1ec44afda53aaa37f8c41ad00d170506cb
treeeece79f4063aef4df0a1d66d1d9927346660efc7
parent23608d51a3b2a0e1e884eba7b1d1eadefe4aadcc
btrfs: drop from __GFP_HIGHMEM all allocations

The highmem flag is used for allocating pages for compression and for
raid56 pages. The high memory makes sense on 32bit systems but is not
without problems. On 64bit system's it's just another layer of wrappers.

The time the pages are allocated for compression or raid56 is relatively
short (about a transaction commit), so the pages are not blocked
indefinitely. As the number of pages depends on the amount of data being
written/read, there's a theoretical problem. A fast device on a 32bit
system could use most of the low memory pool, while with the highmem
allocation that would not happen. This was possibly the original idea
long time ago, but nowadays we optimize for 64bit systems.

This patch removes all usage of the __GFP_HIGHMEM flag for page
allocation, the kmap/kunmap are still in place and will be removed in
followup patches. Remaining is masking out the bit in
alloc_extent_state and __lookup_free_space_inode, that can safely stay.

Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/compression.c
fs/btrfs/lzo.c
fs/btrfs/raid56.c
fs/btrfs/zlib.c
fs/btrfs/zstd.c