I wonder if anyone could have a look at the new info uncovered at issue #25.
There is a racecondition that crashes debug=2 builds of zfs-fuse
directly at launch, on certain setups. It has been established (see
comments) that this race can be suppressed by inserting 'magic sleeps'.
However, I'm currently at a loss as to what subsystems are interacting
in the first place.
Now I now that some of the guys (Emmanuel?) have been looking at
replacing the onnv-gate included version of libumem with 'stock' libumem
in the past? Perhaps they can look at this with their prior insight in
the working of libumem / it's integration with zfs-fuse.
--- some detail (head to the bug report for more:
http://zfs-fuse.net/issues/25)
Of note seems that the daemon SIGABRTs on the VM_SLEEP | VMC_IDENTIFIER
allocation for taskq_id_arena in taskq_init /reliably/. This appears to
be some kind of a special one, for some reason.
Further more my comments about static (shared/duplicated) data might
trigger someone with additional info. This is certainly not a threading
issue (well, not libpthread anyway).
Any help greatly appreciated.
Seth
http://zfs-fuse.sourcearchive.com/documentation/0.6.0~betaplus-p433snapshot/
(who put this there?)
--
To post to this group, send email to zfs-...@googlegroups.com
To visit our Web site, click on http://zfs-fuse.net/
Thanks for sharing these thoughts. It helps my understanding a bit
--
To post to this group, send email to zfs-...@googlegroups.com
To visit our Web site, click on http://zfs-fuse.net/
--
To post to this group, send email to zfs-...@googlegroups.com
To visit our Web site, click on http://zfs-fuse.net/
Ok, I was able to reproduce it at will by using a remote host (and it was very very slow actually but it crashed everytime I launched zfs-fuse this way !).
So the easiest fix is simply to replace VM_SLEEP by VM_NOSLEEP in taskq_init. Anyway this just means that the memory allocation can go to sleep if the memory is not available when you pass VM_SLEEP, it might be usefull in kernel mode while some memory is freed, but here when you just start zfs-fuse it's probably totally uselss.
With just this single VM_SLEEP replaced, it works all the time.
Notice that I had to do this already in taskq_create_common (taskq.c too), there is a comment for zfs-fuse explaining why.
The only real issue here is that it's very hard to reproduce if you don't have the right machine for it !
--
To post to this group, send email to zfs-...@googlegroups.com
To visit our Web site, click on http://zfs-fuse.net/
So I went and retested my own setup ($0.085 down the drain for less than
10 minutes :))
It works fine now.
I pushed (cherry-pick) the relevant commit to zfs-fuse.net/official
master branches. So pulling the official master should get you the fix.
Closing
Emmanuel Anne wrote:
> I don't think I have admin rights on this, so do it, I'll push my
> commit...
>
> 2010/2/13 sgheeren <sghe...@hotmail.com <mailto:sghe...@hotmail.com>>
>
> Emmanuel Anne wrote:
>> Ok, I was able to reproduce it at will by using a remote host
>> (and it was very very slow actually but it crashed everytime I
>> launched zfs-fuse this way !).
>>
>> So the easiest fix is simply to replace VM_SLEEP by VM_NOSLEEP in
>> taskq_init. Anyway this just means that the memory allocation can
>> go to sleep if the memory is not available when you pass
>> VM_SLEEP, it might be usefull in kernel mode while some memory is
>> freed, but here when you just start zfs-fuse it's probably
>> totally uselss.
>>
>> With just this single VM_SLEEP replaced, it works all the time.
> Good thinking
>
>> Notice that I had to do this already in taskq_create_common
>> (taskq.c too), there is a comment for zfs-fuse explaining why.
> Even better thinking. Now why'd I not think of that myself :)
>>
>> The only real issue here is that it's very hard to reproduce if
>> you don't have the right machine for it !
> It's always like that with timing issues.
>
> Thanks again for thinking along. I think you can mark that issue
> as closed/up for retest? I will do it if you prefer
> --
> To post to this group, send email to zfs-...@googlegroups.com
> <mailto:zfs-...@googlegroups.com>