Linux kernel do_fork function source code analysis