Nathaniel W. Turner 6c06f072c2 xfs: copy li_lsn before dropping AIL lock
Access to log items on the AIL is generally protected by m_ail_lock;
this is particularly needed when we're getting or setting the 64-bit
li_lsn on a 32-bit platform.  This patch fixes a couple places where we
were accessing the log item after dropping the AIL lock on 32-bit
machines.

This can result in a partially-zeroed log->l_tail_lsn if
xfs_trans_ail_delete is racing with xfs_trans_ail_update, and in at
least some cases, this can leave the l_tail_lsn with a zero cycle
number, which means xlog_space_left will think the log is full (unless
CONFIG_XFS_DEBUG is set, in which case we'll trip an ASSERT), leading to
processes stuck forever in xlog_grant_log_space.

Thanks to Adrian VanderSpek for first spotting the race potential and to
Dave Chinner for debug assistance.

Signed-off-by: Nathaniel W. Turner <nate@houseofnate.net>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Alex Elder <aelder@sgi.com>
2009-11-17 10:26:49 -06:00
..
2009-03-30 10:21:31 +02:00
2009-06-10 17:07:47 +02:00
2009-06-10 17:07:47 +02:00
2009-09-01 12:45:48 -05:00
2009-08-31 14:46:21 -05:00
2009-06-10 17:07:47 +02:00
2009-03-29 19:26:46 +02:00
2008-07-28 16:58:35 +10:00
2008-02-07 18:14:38 +11:00
2009-03-29 09:55:42 +02:00
2009-03-29 09:51:14 +02:00
2009-03-29 09:51:08 +02:00
2009-03-29 09:55:42 +02:00
2009-03-29 09:55:42 +02:00
2009-03-29 09:51:08 +02:00
2008-12-01 11:37:35 +11:00
2008-10-30 17:53:24 +11:00
2009-06-08 15:35:48 +02:00
2009-03-29 09:55:42 +02:00
2009-09-01 12:46:16 -05:00
2009-09-01 12:46:16 -05:00
2009-08-31 14:46:22 -05:00
2009-06-10 17:07:47 +02:00
2009-04-06 18:49:12 +02:00
2009-03-16 08:19:29 +01:00
2009-06-08 15:33:32 +02:00
2009-03-29 09:55:42 +02:00
2009-09-01 12:45:57 -05:00
2009-09-01 12:45:57 -05:00
2009-08-31 14:46:22 -05:00
2009-09-01 12:46:16 -05:00
2009-03-29 09:55:42 +02:00
2009-06-08 15:33:32 +02:00
2009-06-10 17:07:47 +02:00
2008-10-30 16:55:13 +11:00