Commit 2b3cf093 authored by Brian Foster's avatar Brian Foster Committed by Darrick J. Wong
Browse files

xfs: combine xfs_trans_ail_[remove|delete]()



Now that the functions and callers of
xfs_trans_ail_[remove|delete]() have been fixed up appropriately,
the only difference between the two is the shutdown behavior. There
are only a few callers of the _remove() variant, so make the
shutdown conditional on the parameter and combine the two functions.

Suggested-by: default avatarDave Chinner <david@fromorbit.com>
Signed-off-by: default avatarBrian Foster <bfoster@redhat.com>
Reviewed-by: default avatarDave Chinner <dchinner@redhat.com>
Reviewed-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarAllison Collins <allison.henderson@oracle.com>
Signed-off-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
parent 6af0479d
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -558,7 +558,7 @@ xfs_buf_item_put(
	 * state.
	 */
	if (aborted)
		xfs_trans_ail_remove(lip);
		xfs_trans_ail_delete(lip, 0);
	xfs_buf_item_relse(bip->bli_buf);
	return true;
}
+1 −1
Original line number Diff line number Diff line
@@ -1162,7 +1162,7 @@ xfs_qm_dqflush(

out_abort:
	dqp->dq_flags &= ~XFS_DQ_DIRTY;
	xfs_trans_ail_remove(lip);
	xfs_trans_ail_delete(lip, 0);
	xfs_force_shutdown(mp, SHUTDOWN_CORRUPT_INCORE);
out_unlock:
	xfs_dqfunlock(dqp);
+1 −1
Original line number Diff line number Diff line
@@ -343,7 +343,7 @@ xfs_qm_qoff_logitem_relse(
	ASSERT(test_bit(XFS_LI_IN_AIL, &lip->li_flags) ||
	       test_bit(XFS_LI_ABORTED, &lip->li_flags) ||
	       XFS_FORCED_SHUTDOWN(lip->li_mountp));
	xfs_trans_ail_remove(lip);
	xfs_trans_ail_delete(lip, 0);
	kmem_free(lip->li_lv_shadow);
	kmem_free(qoff);
}
+1 −1
Original line number Diff line number Diff line
@@ -768,7 +768,7 @@ xfs_iflush_abort(
	struct xfs_inode_log_item *iip = ip->i_itemp;

	if (iip) {
		xfs_trans_ail_remove(&iip->ili_item);
		xfs_trans_ail_delete(&iip->ili_item, 0);
		iip->ili_logged = 0;
		/*
		 * Clear the ili_last_fields bits now that we know that the
+2 −22
Original line number Diff line number Diff line
@@ -841,27 +841,6 @@ xfs_ail_delete_one(
	return 0;
}

/**
 * Remove a log items from the AIL
 *
 * @xfs_trans_ail_delete_bulk takes an array of log items that all need to
 * removed from the AIL. The caller is already holding the AIL lock, and done
 * all the checks necessary to ensure the items passed in via @log_items are
 * ready for deletion. This includes checking that the items are in the AIL.
 *
 * For each log item to be removed, unlink it  from the AIL, clear the IN_AIL
 * flag from the item and reset the item's lsn to 0. If we remove the first
 * item in the AIL, update the log tail to match the new minimum LSN in the
 * AIL.
 *
 * This function will not drop the AIL lock until all items are removed from
 * the AIL to minimise the amount of lock traffic on the AIL. This does not
 * greatly increase the AIL hold time, but does significantly reduce the amount
 * of traffic on the lock, especially during IO completion.
 *
 * This function must be called with the AIL lock held.  The lock is dropped
 * before returning.
 */
void
xfs_trans_ail_delete(
	struct xfs_log_item	*lip,
@@ -874,7 +853,7 @@ xfs_trans_ail_delete(
	spin_lock(&ailp->ail_lock);
	if (!test_bit(XFS_LI_IN_AIL, &lip->li_flags)) {
		spin_unlock(&ailp->ail_lock);
		if (!XFS_FORCED_SHUTDOWN(mp)) {
		if (shutdown_type && !XFS_FORCED_SHUTDOWN(mp)) {
			xfs_alert_tag(mp, XFS_PTAG_AILDELETE,
	"%s: attempting to delete a log item that is not in the AIL",
					__func__);
@@ -883,6 +862,7 @@ xfs_trans_ail_delete(
		return;
	}

	/* xfs_ail_update_finish() drops the AIL lock */
	tail_lsn = xfs_ail_delete_one(ailp, lip);
	xfs_ail_update_finish(ailp, tail_lsn);
}
Loading