diff options
author | Brian Foster <bfoster@redhat.com> | 2015-08-19 10:01:08 +1000 |
---|---|---|
committer | Dave Chinner <david@fromorbit.com> | 2015-08-19 10:01:08 +1000 |
commit | 146e54b71ea4b998d65c25964807ff6792bbf436 (patch) | |
tree | 2fc5a2db363067cbdec6718318769d188c11a161 /fs/xfs/xfs_trans_priv.h | |
parent | f307080a626569f89bc8fbad9f936b307aded877 (diff) | |
download | linux-stable-146e54b71ea4b998d65c25964807ff6792bbf436.tar.gz linux-stable-146e54b71ea4b998d65c25964807ff6792bbf436.tar.bz2 linux-stable-146e54b71ea4b998d65c25964807ff6792bbf436.zip |
xfs: add helper to conditionally remove items from the AIL
Several areas of code duplicate a pattern where we take the AIL lock,
check whether an item is in the AIL and remove it if so. Create a new
helper for this pattern and use it where appropriate.
Signed-off-by: Brian Foster <bfoster@redhat.com>
Diffstat (limited to 'fs/xfs/xfs_trans_priv.h')
-rw-r--r-- | fs/xfs/xfs_trans_priv.h | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/fs/xfs/xfs_trans_priv.h b/fs/xfs/xfs_trans_priv.h index 1b736294558a..49931b72da8a 100644 --- a/fs/xfs/xfs_trans_priv.h +++ b/fs/xfs/xfs_trans_priv.h @@ -119,6 +119,21 @@ xfs_trans_ail_delete( xfs_trans_ail_delete_bulk(ailp, &lip, 1, shutdown_type); } +static inline void +xfs_trans_ail_remove( + struct xfs_log_item *lip, + int shutdown_type) +{ + struct xfs_ail *ailp = lip->li_ailp; + + spin_lock(&ailp->xa_lock); + /* xfs_trans_ail_delete() drops the AIL lock */ + if (lip->li_flags & XFS_LI_IN_AIL) + xfs_trans_ail_delete(ailp, lip, shutdown_type); + else + spin_unlock(&ailp->xa_lock); +} + void xfs_ail_push(struct xfs_ail *, xfs_lsn_t); void xfs_ail_push_all(struct xfs_ail *); void xfs_ail_push_all_sync(struct xfs_ail *); |