HomeFreeBSD

Add zfs_sb_prune_aliases() function

Description

Add zfs_sb_prune_aliases() function

For kernels which do not implement a per-suberblock shrinker,
those older than Linux 3.1, the shrink_dcache_parent() function
was used to attempt to reclaim dentries. This was found not be
entirely reliable and could lead to performance issues on older
kernels running meta-data heavy workloads.

To address this issue a zfs_sb_prune_aliases() function has been
added to implement this functionality. It relies on traversing
the list of znodes for a filesystem and adding them to a private
list with a reference held. The private list can then be safely
walked outside the z_znodes_lock to prune dentires and drop the
last reference so the inode can be freed.

This provides the same synchronous behavior as the per-filesystem
shrinker and has the advantage of depending on only long standing
interfaces.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Tim Chase <tim@chase2k.com>
Closes #3501

Details

Provenance
Brian Behlendorf <behlendorf1@llnl.gov>Authored on Jun 18 2015, 4:21 PM
Parents
rG4c6a70091030: Increase the number of iput taskq threads
Branches
Unknown
Tags
Unknown

Event Timeline

Brian Behlendorf <behlendorf1@llnl.gov> committed rG218b4e0a7608: Add zfs_sb_prune_aliases() function (authored by Brian Behlendorf <behlendorf1@llnl.gov>).Jun 22 2015, 5:22 PM