lowmemorykiller: use for_each_thread instead of buggy while_each_thread
Couple of cases were reported few months ago, where the cpu was blocked on the following call stack for /seconds/ after which the watchdog fires. test_task_flag(p = 0xE14ABF00, ?) lowmem_shrink(?, sc = 0xD7A03C04) shrink_slab(shrink = 0xD7A03C04, nr_pages_scanned = 0, lru_pages = 120) try_to_free_pages(zonelist = 0xC1116440, ?, ?, ?) __alloc_pages_nodemask(?, order = 0, ?, nodemask = 0x0) __do_page_cache_readahead(mapping = 0xEB819364, filp = 0xCC16DC00, offset = ra_submit(?, ?, ?) filemap_fault(vma = 0xC105D240, vmf = 0xD7A03DC8) There weren't any dumps to analyse the case, but this can be a possible reason. while_each_thread is known to be buggy and can result in the function looping forever if the task exits, even when protected with rcu_read_lock. Use for_each_thread instead. More details on the problems with while_each_thread can be found at https://lkml.org/lkml/2013/12/2/320 Change-Id: I5eb6e4b463f81142a2a7824db389201357432ec7 Signed-off-by:Vinayak Menon <vinmenon@codeaurora.org>
Loading
Please register or sign in to comment