]> git.proxmox.com Git - mirror_zfs.git/commit - config/kernel.m4
Add zfs_sb_prune_aliases() function
authorBrian Behlendorf <behlendorf1@llnl.gov>
Thu, 18 Jun 2015 16:21:19 +0000 (09:21 -0700)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Mon, 22 Jun 2015 17:22:49 +0000 (10:22 -0700)
commit218b4e0a7608f7ef37ec72042a68c45e539a5d1c
tree749c64001d694546ef2104418ad05249c8b35912
parent4c6a70091030847ca5d6933916255194483ce91f
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
config/kernel-d-prune-aliases.m4 [new file with mode: 0644]
config/kernel.m4
module/zfs/zfs_vfsops.c