diff options
author | Brian Behlendorf <[email protected]> | 2015-06-18 09:21:19 -0700 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2015-06-22 10:22:49 -0700 |
commit | 218b4e0a7608f7ef37ec72042a68c45e539a5d1c (patch) | |
tree | 749c64001d694546ef2104418ad05249c8b35912 /lib | |
parent | 4c6a70091030847ca5d6933916255194483ce91f (diff) |
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 <[email protected]>
Signed-off-by: Tim Chase <[email protected]>
Closes #3501
Diffstat (limited to 'lib')
0 files changed, 0 insertions, 0 deletions