Currently do_wp_page contains 265 code lines. It also contains 9 goto statements, of which 5 are targeting labels which are not cleanup related. This makes the function extremely difficult to understand. The following patches are an attempt at breaking the function to its basic components, and making it easier to understand. The patches are straight forward function extractions from do_wp_page. As we extract functions, we remove unneeded parameters and simplify the code as much as possible. However, the functionality is supposed to remain completely unchanged. The patches also attempt to document the functionality of each extracted function. In patch 2, we split the unlock logic to the contain logic relevant to specific needs of each use case, instead of having huge number of conditional decisions in a single unlock flow. Change log: v0 -> v1: - Minor renaming of argument in patch 1 - Instead of having a complex unlock function, unlock the needed parts in the relevant call sites. Simplify code accordingly. - Avoid calling wp_page_copy with the ptl held. - Rename wp_page_shared_vma to wp_page_shared, flip the logic of a check there to goto the end of the function if no function, instead of having a large conditional block. v1 -> v2: - Cosmetical white space changes in patch 4 v2 -> v3: - Rebase to v3.19-rc3 - Add missing Acked-by and CC notations to the commit messages. v3 -> v4: - Rebase to next-20150219 Shachar Raindel (4): mm: Refactor do_wp_page, extract the reuse case mm: Refactor do_wp_page - rewrite the unlock flow mm: refactor do_wp_page, extract the page copy flow mm: Refactor do_wp_page handling of shared vma into a function mm/memory.c | 369 +++++++++++++++++++++++++++++++++++------------------------- 1 file changed, 215 insertions(+), 154 deletions(-) -- 1.7.11.2 -- 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>