On Fri, 27 Mar 2015 13:39:38 +0200 "Kirill A. Shutemov" <kirill.shutemov@xxxxxxxxxxxxxxx> wrote: > set_recommended_min_free_kbytes() adjusts zone water marks to be suitable > for khugepaged. We avoid doing this if khugepaged is disabled, but don't > catch the case when khugepaged is failed to start. > > Let's address this by checking khugepaged_thread instead of > khugepaged_enabled() in set_recommended_min_free_kbytes(). > It's NULL if the kernel thread is stopped or failed to start. > hm, why didn't khugepaged start up? Is this a theoretical by-code-inspection thing or has the problem been observed in real life? > --- a/mm/huge_memory.c > +++ b/mm/huge_memory.c > @@ -110,7 +110,8 @@ static int set_recommended_min_free_kbytes(void) > int nr_zones = 0; > unsigned long recommended_min; > > - if (!khugepaged_enabled()) > + /* khugepaged thread has stopped to failed to start */ > + if (!khugepaged_thread) > return 0; > > for_each_populated_zone(zone) Fair enough, but take a look at start_khugepaged(): : static int start_khugepaged(void) : { : int err = 0; : if (khugepaged_enabled()) { : if (!khugepaged_thread) : khugepaged_thread = kthread_run(khugepaged, NULL, : "khugepaged"); : if (unlikely(IS_ERR(khugepaged_thread))) { : pr_err("khugepaged: kthread_run(khugepaged) failed\n"); : err = PTR_ERR(khugepaged_thread); : khugepaged_thread = NULL; -->> stop here : } : : if (!list_empty(&khugepaged_scan.mm_head)) : wake_up_interruptible(&khugepaged_wait); : : set_recommended_min_free_kbytes(); : } else if (khugepaged_thread) { : kthread_stop(khugepaged_thread); : khugepaged_thread = NULL; : } : : return err; : } -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>