mirror_zfs/include/linux
Chunwei Chen 8e71ab99dc Batch free zpl_posix_acl_release
Currently every calls to zpl_posix_acl_release will schedule a delayed task,
and each delayed task will add a timer. This used to be fine except for
possibly bad performance impact.

However, in Linux 4.8, a new timer wheel implementation[1] is introduced. In
this new implementation, the larger the delay, the less accuracy the timer is.
So when we have a flood of timer from zpl_posix_acl_release, they will expire
at the same time. Couple with the fact that task_expire will do linear search
with lock held. This causes an extreme amount of contention inside interrupt
and would actually lockup the system.

We fix this by doing batch free to prevent a flood of delayed task. Every call
to zpl_posix_acl_release will put the posix_acl to be freed on a lockless
list. Every batch window, 1 sec, the zpl_posix_acl_free will fire up and free
every posix_acl that passed the grace period on the list. This way, we only
have one delayed task every second.

[1] https://lwn.net/Articles/646950/

Signed-off-by: Chunwei Chen <david.chen@osnexus.com>
2016-11-07 11:04:44 -08:00
..
blkdev_compat.h Fix lookup_bdev() on Ubuntu 2016-10-26 10:30:43 -07:00
dcache_compat.h cstyle: Resolve C style issues 2013-12-18 16:46:35 -08:00
kmap_compat.h Add compatibility layer for {kmap,kunmap}_atomic 2015-08-24 10:13:25 -07:00
Makefile.am Add parity generation/rebuild using 128-bits NEON for Aarch64 2016-10-03 09:44:00 -07:00
mod_compat.h Linux compat: Grsecurity kernel 2016-08-22 10:05:45 -07:00
simd_aarch64.h Add parity generation/rebuild using 128-bits NEON for Aarch64 2016-10-03 09:44:00 -07:00
simd_x86.h Add support for AVX-512 family of instruction sets 2016-08-16 14:10:33 -07:00
utsname_compat.h Update utsname support 2014-10-17 14:58:57 -07:00
vfs_compat.h Batch free zpl_posix_acl_release 2016-11-07 11:04:44 -08:00
xattr_compat.h Linux 4.7 compat: handler->set() takes both dentry and inode 2016-06-01 18:10:06 -07:00