On Wed, 4 Apr 2018 16:23:29 +0200 Michal Hocko <mhocko@xxxxxxxxxx> wrote: > > > > I tried it out, I did the following: > > > > set_current_oom_origin(); > > for (i = 0; i < nr_pages; i++) { > > struct page *page; > > /* > > * __GFP_RETRY_MAYFAIL flag makes sure that the allocation fails > > * gracefully without invoking oom-killer and the system is not > > * destabilized. > > */ > > bpage = kzalloc_node(ALIGN(sizeof(*bpage), cache_line_size()), > > GFP_KERNEL | __GFP_RETRY_MAYFAIL, > > cpu_to_node(cpu)); > > if (!bpage) > > goto free_pages; > > > > list_add(&bpage->list, pages); > > > > page = alloc_pages_node(cpu_to_node(cpu), > > GFP_KERNEL | __GFP_RETRY_MAYFAIL, 0); > > if (!page) > > goto free_pages; > > if (fatal_signal_pending()) > fgoto free_pages; I originally was going to remove the RETRY_MAYFAIL, but adding this check (at the end of the loop though) appears to have OOM consistently kill this task. I still like to keep RETRY_MAYFAIL, because it wont trigger OOM if nothing comes in and tries to do an allocation, but instead will fail nicely with -ENOMEM. -- Steve > > > bpage->page = page_address(page); > > rb_init_page(bpage->page); > > } > > clear_current_oom_origin();