Re: [PATCH v2] ext4: use non-movable memory for superblock readahead
From: Roman Gushchin <hidden>
Date: 2020-03-02 16:37:39
Also in:
linux-fsdevel, lkml
From: Roman Gushchin <hidden>
Date: 2020-03-02 16:37:39
Also in:
linux-fsdevel, lkml
On Sat, Feb 29, 2020 at 12:49:13AM -0700, Andreas Dilger wrote:
On Feb 28, 2020, at 5:14 PM, Roman Gushchin [off-list ref] wrote:quoted
Since commit a8ac900b8163 ("ext4: use non-movable memory for the superblock") buffers for ext4 superblock were allocated using the sb_bread_unmovable() helper which allocated buffer heads out of non-movable memory blocks. It was necessarily to not block page migrations and do not cause cma allocation failures. However commit 85c8f176a611 ("ext4: preload block group descriptors") broke this by introducing pre-reading of the ext4 superblock. The problem is that __breadahead() is using __getblk() underneath, which allocates buffer heads out of movable memory. It resulted in page migration failures I've seen on a machine with an ext4 partition and a preallocated cma area. Fix this by introducing sb_breadahead_unmovable() and __breadahead_gfp() helpers which use non-movable memory for buffer head allocations and use them for the ext4 superblock readahead. v2: found a similar issue in __ext4_get_inode_loc() Fixes: 85c8f176a611 ("ext4: preload block group descriptors") Signed-off-by: Roman Gushchin <redacted>Reviewed-by: Andreas Dilger <redacted>
Thank you!