Zach BrownandMark Fasheh c8f8feb7f8 scoutfs: invalidate dentries as locks are dropped
Today we use unconditional dentry revalidation to provide directory
entry consistency.  Any time the vfs tries to use a cached dentry we
tell it to drop it and perform a lookup.  This hits our item cache which
is kept consistent by the locks.

This would just be a waste of cpu if it weren't for how heavy weight the
vfs revalidation->lookup path is here.  It doesn't just invalidate the
entry it uses shrink_dcache_parent() to drop all the cached entries in
the subtree rooted at the cached entry.

We saw 22 second long cpu livelocks in this shrink_dcache_parent() when
creating and archiving empty files.

Instead lets let the vfs use dcache entries.  We only invalidate them as
we're dropping the lock that covers them.  (Today coarse inode locks
cover all the entries in batches of inodes.)   We can use d_drop() to
remove entries from the cache to stop them from satisfying lookup
without trying to free all the dentries under them.

Signed-off-by: Zach Brown <zab@versity.com>
2017-12-08 13:22:11 -06:00
S
Description
No description provided
7.7 MiB
Languages
C 86.4%
Shell 10%
Roff 2.5%
TeX 0.8%
Makefile 0.3%