On Tuesday 07 June 2011 10:54 AM, Daniel wrote:
Hello hackers: I am learning glusterfs and get one question when I reading contrib/fuse-lib/mount.c fuse_mnt_add_mount(). Why does it fork four times and the grand-grand-child exec("/bin/mount")? What is the benefit and the consideration?
As I see it, it forks thrice. Here is what I understand from the code: +---------------------+ | fuse_mnt_add_mount()|<------------------------------+ | fork and wait for | | | child to return | | +-----+---------------+ | | | | | X | / \ | /if \ | /sync-\ NO +---------------------------+ | X mtab X-------->| Do async ops by returning | | \ == 1/ fork() | from here so that parent | | \ / | does not wait. But before | | \ / | doing that, create a dummy| | X | parent to wait for child | | | YES | that does the /bin/mount | | | +------------+--------------+ | | fork() | | V | | +-----+----------+ | fork() -> Parent returns here. | Child: execl | v | /bin/mount with| +---------------+ | -f option to | |dummy parent: | | only populate | fork() | fork and wait | | mtab but don't |<--------+ for /bin/mount| | actually mount | | to return | | anything. | +---------------+ +----------------+ HTH, Pavan
Thank you Daniel _______________________________________________ Gluster-devel mailing list Gluster-devel@xxxxxxxxxx https://lists.nongnu.org/mailman/listinfo/gluster-devel