From mboxrd@z Thu Jan 1 00:00:00 1970 From: Steven Whitehouse Date: Wed, 26 Jul 2017 17:11:59 +0100 Subject: [Cluster-devel] [GFS2 PATCH] GFS2: Don't waste time locking lru_lock for non-lru glocks In-Reply-To: <563121229.34658408.1501085419976.JavaMail.zimbra@redhat.com> References: <563121229.34658408.1501085419976.JavaMail.zimbra@redhat.com> Message-ID: <24b4c3d3-7fd6-6294-fd4a-0ccd352274aa@redhat.com> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Hi, Looks good. Acked-by: Steven Whitehouse Steve. On 26/07/17 17:10, Bob Peterson wrote: > Hi, > > 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, thus reducing lru_lock contention. > > Signed-off-by: Bob Peterson > --- > 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); >