Messages in this thread Patch in this message | | | From | Sweet Tea Dorminy <> | Subject | [PATCH] btrfs: wait between incomplete batch allocations | Date | Wed, 6 Apr 2022 14:24:18 -0400 |
| |
When allocating memory in a loop, each iteration should call memalloc_retry_wait() in order to prevent starving memory-freeing processes (and to mark where allcoation loops are). ext4, f2fs, and xfs all use this function at present for their allocation loops; btrfs ought also.
The bulk page allocation is the only place in btrfs with an allocation retry loop, so add an appropriate call to it.
Suggested-by: David Sterba <dsterba@suse.cz> Signed-off-by: Sweet Tea Dorminy <sweettea-kernel@dorminy.me> --- fs/btrfs/extent_io.c | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c index 9f2ada809dea..4bcc182744e4 100644 --- a/fs/btrfs/extent_io.c +++ b/fs/btrfs/extent_io.c @@ -6,6 +6,7 @@ #include <linux/mm.h> #include <linux/pagemap.h> #include <linux/page-flags.h> +#include <linux/sched/mm.h> #include <linux/spinlock.h> #include <linux/blkdev.h> #include <linux/swap.h> @@ -3159,6 +3160,8 @@ int btrfs_alloc_page_array(unsigned int nr_pages, struct page **page_array) */ if (allocated == last) return -ENOMEM; + + memalloc_retry_wait(GFP_NOFS); } return 0; } -- 2.35.1
| |