]> git.baikalelectronics.ru Git - kernel.git/commit
GFS2: Fix race in glock lru glock disposal
authorSteven Whitehouse <swhiteho@redhat.com>
Mon, 23 Jun 2014 13:43:32 +0000 (14:43 +0100)
committerSteven Whitehouse <swhiteho@redhat.com>
Fri, 18 Jul 2014 10:12:51 +0000 (11:12 +0100)
commit90f073291f9d35ed96bcfc0ea1df85793697d175
tree6b4331c36b3ccee82d22e62fc133f07ad060e11c
parenta3a8897bdfb20ae90e77db7e48b90d3c204e2205
GFS2: Fix race in glock lru glock disposal

We must not leave items on the LRU list with GLF_LOCK set, since
they can be removed if the glock is brought back into use, which
may then potentially result in a hang, waiting for GLF_LOCK to
clear.

It doesn't happen very often, since it requires a glock that has
not been used for a long time to be brought back into use at the
same moment that the shrinker is part way through disposing of
glocks.

The fix is to set GLF_LOCK at a later time, when we already know
that the other locks can be obtained. Also, we now only release
the lru_lock in case a resched is needed, rather than on every
iteration.

Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
fs/gfs2/glock.c