[Gluster-devel] Why to fork so many times?

Daniel wangjinxin.java at gmail.com
Tue Jun 7 08:38:38 UTC 2011


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 at nongnu.org
> > https://lists.nongnu.org/mailman/listinfo/gluster-devel
> 






More information about the Gluster-devel mailing list