xfs: use a cursor for bulk AIL insertion
commitf5d5ee3686ab928549370e4e584a2c32ef708a37
authorDave Chinner <dchinner@redhat.com>
Tue, 18 Oct 2011 14:23:16 +0000 (18 10:23 -0400)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 25 Oct 2011 05:10:16 +0000 (25 07:10 +0200)
tree1ae2d2d4b69f4ebd8d5b52189c3d944c5bf139e4
parenteedc6389bb43769e82f2779dabd45865d2b892e4
xfs: use a cursor for bulk AIL insertion

commit 1d8c95a363bf8cd4d4182dd19c01693b635311c2 upstream

xfs: use a cursor for bulk AIL insertion

Delayed logging can insert tens of thousands of log items into the
AIL at the same LSN. When the committing of log commit records
occur, we can get insertions occurring at an LSN that is not at the
end of the AIL. If there are thousands of items in the AIL on the
tail LSN, each insertion has to walk the AIL to find the correct
place to insert the new item into the AIL. This can consume large
amounts of CPU time and block other operations from occurring while
the traversals are in progress.

To avoid this repeated walk, use a AIL cursor to record
where we should be inserting the new items into the AIL without
having to repeat the walk. The cursor infrastructure already
provides this functionality for push walks, so is a simple extension
of existing code. While this will not avoid the initial walk, it
will avoid repeating it tens of thousands of times during a single
checkpoint commit.

This version includes logic improvements from Christoph Hellwig.

Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Alex Elder <aelder@sgi.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
fs/xfs/xfs_trans.c
fs/xfs/xfs_trans_ail.c
fs/xfs/xfs_trans_priv.h