GFS2: Use lockref for glocks
authorSteven Whitehouse <swhiteho@redhat.com>
Tue, 15 Oct 2013 14:18:08 +0000 (15:18 +0100)
committerSteven Whitehouse <swhiteho@redhat.com>
Tue, 15 Oct 2013 14:18:08 +0000 (15:18 +0100)
commite66cf161098a634dc96e32d0089c5767cf25668a
tree36b99a83164748b67f14b711f3e4812c22f54484
parente46c772dbafc2059b0c7ee87c6a7232baadaf6c7
GFS2: Use lockref for glocks

Currently glocks have an atomic reference count and also a spinlock
which covers various internal fields, such as the state. This intent of
this patch is to replace the spinlock and the atomic reference count
with a lockref structure. This contains a spinlock which we can continue
to use as before, and a reference counter which is used in conjuction
with the spinlock to replace the previous atomic counter.

As a result of this there are some new rules for reference counting on
glocks. We need to distinguish between reference count changes under
gl_spin (which are now just increment or decrement of the new counter,
provided the count cannot hit zero) and those which are outside of
gl_spin, but which now take gl_spin internally.

The conversion is relatively straight forward. There is probably some
further clean up which can be done, but the priority at this stage is to
make the change in as simple a manner as possible.

A consequence of this change is that the reference count is being
decoupled from the lru list processing. This should allow future
adoption of the lru_list code with glocks in due course.

The reason for using the "dead" state and not just relying on 0 being
the "invalid state" is so that in due course 0 ref counts can be
allowable. The intent is to eventually be able to remove the ref count
changes which are currently hidden away in state_change().

Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
fs/gfs2/glock.c
fs/gfs2/glock.h
fs/gfs2/glops.c
fs/gfs2/incore.h
include/linux/lockref.h
lib/lockref.c