xfs: Pull EFI/EFD handling out from under the AIL lock
authorDave Chinner <dchinner@redhat.com>
Mon, 20 Dec 2010 00:59:49 +0000 (11:59 +1100)
committerDave Chinner <david@fromorbit.com>
Mon, 20 Dec 2010 00:59:49 +0000 (11:59 +1100)
commitb199c8a4ba11879df87daad496ceee41fdc6aa82
tree8652785ca70788e3cc43272be72f21123adafbe7
parent9c5f8414efd5eeed9f498d4170337a3eb126341f
xfs: Pull EFI/EFD handling out from under the AIL lock

EFI/EFD interactions are protected from races by the AIL lock. They
are the only type of log items that require the the AIL lock to
serialise internal state, so they need to be separated from the AIL
lock before we can do bulk insert operations on the AIL.

To acheive this, convert the counter of the number of extents in the
EFI to an atomic so it can be safely manipulated by EFD processing
without locks. Also, convert the EFI state flag manipulations to use
atomic bit operations so no locks are needed to record state
changes. Finally, use the state bits to determine when it is safe to
free the EFI and clean up the code to do this neatly.

Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
fs/xfs/xfs_extfree_item.c
fs/xfs/xfs_extfree_item.h
fs/xfs/xfs_log_recover.c
fs/xfs/xfs_trans_extfree.c