Source-Changes-D archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: CVS commit: src/sys/kern
On Oct 2, 2011, at 3:26 PM, Adam Hamsik wrote:
>
> On Oct,Sunday 2 2011, at 3:00 PM, Juergen Hannken-Illjes wrote:
>
>> Module Name: src
>> Committed By: hannken
>> Date: Sun Oct 2 13:00:07 UTC 2011
>>
>> Modified Files:
>> src/sys/kern: vfs_vnode.c
>>
>> Log Message:
>> The path getnewvnode()->getcleanvnode()->vclean()->VOP_LOCK() will panic
>> if the vnode we want to clean is a layered vnode and the caller already
>> locked its lower vnode.
>>
>> Change getnewvnode() to always allocate a fresh vnode and add a helper
>> thread (vdrain) to keep the number of allocated vnodes within desiredvnodes.
>>
>> Rename getcleanvnode() to cleanvnode() and let it take a vnode from the
>> lists, clean and free it.
>
> Thanks for doing this. This should help zfs too I saw couple of
> panics with zfs which were caused by this.
>
> Have you done any benchmarks ? when I proposed solution like this
> main objection was then before vnodes were not allocated from storage
> pool every time(sometime we reused already allocated one). And this may
> affect performance.
I didn't run any benchmark.
As getnewvnode() gets called when a file system sets up a new (not yet cached)
vnode I suppose there are other operations taking much more time like reading
an inode from disk, setting up the inode, creating the genfs_node etc.
We also save the time spent in cleaning the vnode which is now done async to
the allocation.
>>
>> Reviewed by: David Holland <dholland%netbsd.org@localhost>
>>
>> Should fix:
>> PR #19110 (nullfs mounts over NFS cause lock manager problems)
>> PR #34102 (ffs panic in NetBSD 3.0_STABLE)
>> PR #45115 (lock error panic when build.sh*3 and daily script is running)
>> PR #45355 (Reader/writer lock error: rw_vector_enter: locking against
>> myself)
<snip>
>
> Regards
>
> Adam.
>
--
Juergen Hannken-Illjes - hannken%eis.cs.tu-bs.de@localhost - TU Braunschweig
(Germany)
Home |
Main Index |
Thread Index |
Old Index