[XFS] Use atomics for iclog reference counting
authorDavid Chinner <dgc@sgi.com>
Thu, 6 Mar 2008 02:44:14 +0000 (13:44 +1100)
committerLachlan McIlroy <lachlan@redback.melbourne.sgi.com>
Fri, 18 Apr 2008 01:38:10 +0000 (11:38 +1000)
commit155cc6b784a959ed456fe46dca522e1d28b3b718
treee88b9041570f299497a6f9aac7e01797affed205
parentb589334c7a1fff85d2f009d5db4c34fad48925e9
[XFS] Use atomics for iclog reference counting

Now that we update the log tail LSN less frequently on transaction
completion, we pass the contention straight to the global log state lock
(l_iclog_lock) during transaction completion.

We currently have to take this lock to decrement the iclog reference
count. there is a reference count on each iclog, so we need to take þhe
global lock for all refcount changes.

When large numbers of processes are all doing small trnasctions, the iclog
reference counts will be quite high, and the state change that absolutely
requires the l_iclog_lock is the except rather than the norm.

Change the reference counting on the iclogs to use atomic_inc/dec so that
we can use atomic_dec_and_lock during transaction completion and avoid the
need for grabbing the l_iclog_lock for every reference count decrement
except the one that matters - the last.

SGI-PV: 975671
SGI-Modid: xfs-linux-melb:xfs-kern:30505a

Signed-off-by: David Chinner <dgc@sgi.com>
Signed-off-by: Tim Shimmin <tes@sgi.com>
Signed-off-by: Lachlan McIlroy <lachlan@sgi.com>
fs/xfs/xfs_log.c
fs/xfs/xfs_log_priv.h