diff options
author | Peter Zijlstra <peterz@infradead.org> | 2015-06-22 14:16:33 +0200 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2016-09-22 15:25:53 +0200 |
commit | aba37660738325d48c913f3a952a7116d6e6a74b (patch) | |
tree | 42a6a0d45ab43fb2e8db1162fe08b7954790bc92 /fs/Kconfig | |
parent | 11d9684ca638aad99f740ef3abcba2aa4c9290bf (diff) | |
download | op-kernel-dev-aba37660738325d48c913f3a952a7116d6e6a74b.zip op-kernel-dev-aba37660738325d48c913f3a952a7116d6e6a74b.tar.gz |
fs/locks: Replace lg_global with a percpu-rwsem
Replace the global part of the lglock with a percpu-rwsem.
Since fcl_lock is a spinlock and itself nests under i_lock, which too
is a spinlock we cannot acquire sleeping locks at
locks_{insert,remove}_global_locks().
We can however wrap all fcl_lock acquisitions with percpu_down_read
such that all invocations of locks_{insert,remove}_global_locks() have
that read lock held.
This allows us to replace the lg_global part of the lglock with the
write side of the rwsem.
In the absense of writers, percpu_{down,up}_read() are free of atomic
instructions. This further avoids the very long preempt-disable
regions caused by lglock on larger machines.
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: Al Viro <viro@ZenIV.linux.org.uk>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Oleg Nesterov <oleg@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: dave@stgolabs.net
Cc: der.herr@hofr.at
Cc: paulmck@linux.vnet.ibm.com
Cc: riel@redhat.com
Cc: tj@kernel.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'fs/Kconfig')
0 files changed, 0 insertions, 0 deletions