于 2012年11月06日 20:55, Richard W.M. Jones 写道:
On Tue, Nov 06, 2012 at 07:50:33PM +0800, Gao feng wrote:
> 于 2012年11月06日 17:11, Richard W.M. Jones 写道:
>> On Tue, Nov 06, 2012 at 04:54:59PM +0800, Gao feng wrote:
>>> Because libvirt_lxc create a thread to mount fuse filesystem.
>>> and then libvirt_lxc will try to access the fuse filesystem.
>>>
>>> Without waiting,libvirt_lxc may access fuse before it is mounted.
>>>
>>> And I can't find a better way to make accessing fuse after the fuse
>>> being mounted,because fuse_main will return until fuse being unmounted,so
>>> I don't know how to pass message to tell libvirt_lxc whether the fuse is
>>> mounted success.
>>
>> Oh I see. This is solvable, but I believe that you cannot use
>> fuse_main. You have to look at the fuse sources (quite complex!) and
>> do the individual fuse operations.
>>
>> Have a look at how libguestfs does it ...
>>
>>
https://github.com/libguestfs/libguestfs/blob/master/src/fuse.c#L911
>>
http://libguestfs.org/guestfs.3.html#mount-local
>>
>
>
> Thanks for the information.
>
> Can fuse_mount & fuse_new & fuse_loop avoid the waiting?
>
> It seems has the same problem.
It waits, but it doesn't busy wait in a loop. The first access to the
filesystem hangs until the thread which is handling the filesystem is
listening for requests.
It makes me confuse.
There are two threads(A and B).
thread A mounts fuse filesystem on mountpoint /mnt/fuse.
thread B try to access file /mnt/fuse/meminfo. and we don't
know which thread will execute first.
The information I got from your comment is that because thread A
doesn't mount fuse to /mnt/fuse, when thread B access to the
/mnt/fuse/meminfo,it will hang. I am right?
If I am right,I don't think this can be implemented by fuse.
because the access of fuse file will make a fuse session message,
if thread A doesn't call fuse_session_receive_buf to receive this message,
The access of the fuse file will failed,not hang.
Maybe I misunderstand something.
Can you explain this for me?
Thanks!