xfs: make AIL target updates and compares 32bit safe.
authorDave Chinner <dchinner@redhat.com>
Fri, 6 May 2011 02:54:07 +0000 (02:54 +0000)
committerAlex Elder <aelder@sgi.com>
Mon, 9 May 2011 23:35:04 +0000 (18:35 -0500)
commitfe0da767311933d1c1907cb8d326beea7a3cbd9c
treee48cc699e05b10c61b332023a3ab8107a5d5a01a
parent50e86686dfb287d720af8b0f977202d205c04215
xfs: make AIL target updates and compares 32bit safe.

The recent conversion of the xfsaild functionality to a work queue
introduced a hard-to-hit log space grant hang. One of the problems
noticed was that updates of the push target are not 32 bit safe as
the target is a 64 bit value.

We cannot copy a 64 bit LSN without the possibility of corrupting
the result when racing with another updating thread. We have
function to do this update safely without needing to care about
32/64 bit issues - xfs_trans_ail_copy_lsn() - so use that when
updating the AIL push target.

Also move the reading of the target in the push work inside the AIL
lock, and use XFS_LSN_CMP() for the unlocked comparison during work
termination to close read holes as well.

Signed-off-by: Dave Chinner <david@fromorbit.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Alex Elder <aelder@sgi.com>
(cherry picked from commit fd5670f22fce247754243cf2ed41941e5762d990)
fs/xfs/xfs_trans_ail.c