]> git.baikalelectronics.ru Git - kernel.git/commit
locks: move file_lock_list to a set of percpu hlist_heads and convert file_lock_lock...
authorJeff Layton <jlayton@redhat.com>
Fri, 21 Jun 2013 12:58:22 +0000 (08:58 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Mon, 8 Jul 2013 09:36:42 +0000 (13:36 +0400)
commit39e12401e6a96b773666e75f86bc507a2c2b00c3
tree6a1c54cdca608ad75db6282cc4c0c7a6bb5f7673
parentdd1e026f97912d3f1e069a81132ae2a069023e3f
locks: move file_lock_list to a set of percpu hlist_heads and convert file_lock_lock to an lglock

The file_lock_list is only used for /proc/locks. The vastly common case
is for locks to be put onto the list and come off again, without ever
being traversed.

Help optimize for this use-case by moving to percpu hlist_head-s. At the
same time, we can make the locking less contentious by moving to an
lglock. When iterating over the lists for /proc/locks, we must take the
global lock and then iterate over each CPU's list in turn.

This change necessitates a new fl_link_cpu field to keep track of which
CPU the entry is on. On x86_64 at least, this field is placed within an
existing hole in the struct to avoid growing the size.

Signed-off-by: Jeff Layton <jlayton@redhat.com>
Acked-by: J. Bruce Fields <bfields@fieldses.org>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/locks.c
include/linux/fs.h