[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