diff options
author | Bob Peterson <rpeterso@redhat.com> | 2017-07-26 10:57:35 -0500 |
---|---|---|
committer | Bob Peterson <rpeterso@redhat.com> | 2017-08-09 09:36:39 -0500 |
commit | 645ebd49f0583f91234aa043ef71ddebe7e8351e (patch) | |
tree | d9c6acfb9b5f38574a8ed924c1a1eccf8de5e2cf /fs/gfs2/glock.c | |
parent | 2d821a8b7192ed9d2ea0c30f3cb62b58aa46cf41 (diff) | |
download | talos-obmc-linux-645ebd49f0583f91234aa043ef71ddebe7e8351e.tar.gz talos-obmc-linux-645ebd49f0583f91234aa043ef71ddebe7e8351e.zip |
GFS2: Don't waste time locking lru_lock for non-lru glocks
Before this patch, glock_dq would call gfs2_glock_remove_from_lru.
For glocks that are never put on the LRU, such as the transaction
glock, this just takes the spin_lock, determines there's nothing to
be done because the list is empty, then unlocks again. This was
causing unnecessary lock contention on the lru_lock spin_lock.
This patch adds a check for GLOF_LRU in the glops before taking
the spin_lock.
Signed-off-by: Bob Peterson <rpeterso@redhat.com>
Diffstat (limited to 'fs/gfs2/glock.c')
-rw-r--r-- | fs/gfs2/glock.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/fs/gfs2/glock.c b/fs/gfs2/glock.c index c38ab6c81898..1029340fc8ba 100644 --- a/fs/gfs2/glock.c +++ b/fs/gfs2/glock.c @@ -150,6 +150,9 @@ void gfs2_glock_add_to_lru(struct gfs2_glock *gl) static void gfs2_glock_remove_from_lru(struct gfs2_glock *gl) { + if (!(gl->gl_ops->go_flags & GLOF_LRU)) + return; + spin_lock(&lru_lock); if (!list_empty(&gl->gl_lru)) { list_del_init(&gl->gl_lru); |