Thank you, Pavan. It clarifies most of my doubts. Only I can't find the branch of 'if sync-mtab == 1'. And I thought it was without "YES fork()". Could you explain more about that, please? Thanks a lot. Dan On Tue, 2011-06-07 at 12:29 +0530, Pavan T C wrote: > 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 >