xfs: aborted buf items can be in the AIL.
authorDave Chinner <dchinner@redhat.com>
Tue, 3 Sep 2013 11:47:37 +0000 (21:47 +1000)
committerBen Myers <bpm@sgi.com>
Tue, 10 Sep 2013 18:58:07 +0000 (13:58 -0500)
commit46f9d2eb37849a328011b182729990d2db3f4d52
tree0a471bd1ca18c7579679474f3f539cd4367db00d
parentfdd3cceef46f2c18c618669cfae5c0f47d6982f9
xfs: aborted buf items can be in the AIL.

Saw this on generic/270 after a DQALLOC transaction overrun
shutdown:

XFS: Assertion failed: !(bip->bli_item.li_flags & XFS_LI_IN_AIL), file: fs/xfs/xfs_buf_item.c, line: 952
.....
 xfs_buf_item_relse+0x4f/0xd0
 xfs_buf_item_unlock+0x1b4/0x1e0
 xfs_trans_free_items+0x7d/0xb0
 xfs_trans_cancel+0x13c/0x1b0
 xfs_symlink+0x37e/0xa60
....

When a transaction abort occured.

If we are aborting a transaction and trigger this code path, then
the item may be dirty. If the item is dirty, then it may be in the
AIL. Hence if we are aborting, we need to check if the item is in
the AIL and remove it before freeing it.

Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Mark Tinguely <tinguely@sgi.com>
Signed-off-by: Ben Myers <bpm@sgi.com>
fs/xfs/xfs_buf_item.c