diff options
Diffstat (limited to 'fs/xfs/xfs_trans.c')
| -rw-r--r-- | fs/xfs/xfs_trans.c | 129 | 
1 files changed, 0 insertions, 129 deletions
| diff --git a/fs/xfs/xfs_trans.c b/fs/xfs/xfs_trans.c index 828da4ac4316..bdf3704dc301 100644 --- a/fs/xfs/xfs_trans.c +++ b/fs/xfs/xfs_trans.c @@ -725,135 +725,6 @@ xfs_trans_free_items(  	}  } -static inline void -xfs_log_item_batch_insert( -	struct xfs_ail		*ailp, -	struct xfs_ail_cursor	*cur, -	struct xfs_log_item	**log_items, -	int			nr_items, -	xfs_lsn_t		commit_lsn) -{ -	int	i; - -	spin_lock(&ailp->ail_lock); -	/* xfs_trans_ail_update_bulk drops ailp->ail_lock */ -	xfs_trans_ail_update_bulk(ailp, cur, log_items, nr_items, commit_lsn); - -	for (i = 0; i < nr_items; i++) { -		struct xfs_log_item *lip = log_items[i]; - -		if (lip->li_ops->iop_unpin) -			lip->li_ops->iop_unpin(lip, 0); -	} -} - -/* - * Bulk operation version of xfs_trans_committed that takes a log vector of - * items to insert into the AIL. This uses bulk AIL insertion techniques to - * minimise lock traffic. - * - * If we are called with the aborted flag set, it is because a log write during - * a CIL checkpoint commit has failed. In this case, all the items in the - * checkpoint have already gone through iop_committed and iop_committing, which - * means that checkpoint commit abort handling is treated exactly the same - * as an iclog write error even though we haven't started any IO yet. Hence in - * this case all we need to do is iop_committed processing, followed by an - * iop_unpin(aborted) call. - * - * The AIL cursor is used to optimise the insert process. If commit_lsn is not - * at the end of the AIL, the insert cursor avoids the need to walk - * the AIL to find the insertion point on every xfs_log_item_batch_insert() - * call. This saves a lot of needless list walking and is a net win, even - * though it slightly increases that amount of AIL lock traffic to set it up - * and tear it down. - */ -void -xfs_trans_committed_bulk( -	struct xfs_ail		*ailp, -	struct list_head	*lv_chain, -	xfs_lsn_t		commit_lsn, -	bool			aborted) -{ -#define LOG_ITEM_BATCH_SIZE	32 -	struct xfs_log_item	*log_items[LOG_ITEM_BATCH_SIZE]; -	struct xfs_log_vec	*lv; -	struct xfs_ail_cursor	cur; -	int			i = 0; - -	spin_lock(&ailp->ail_lock); -	xfs_trans_ail_cursor_last(ailp, &cur, commit_lsn); -	spin_unlock(&ailp->ail_lock); - -	/* unpin all the log items */ -	list_for_each_entry(lv, lv_chain, lv_list) { -		struct xfs_log_item	*lip = lv->lv_item; -		xfs_lsn_t		item_lsn; - -		if (aborted) -			set_bit(XFS_LI_ABORTED, &lip->li_flags); - -		if (lip->li_ops->flags & XFS_ITEM_RELEASE_WHEN_COMMITTED) { -			lip->li_ops->iop_release(lip); -			continue; -		} - -		if (lip->li_ops->iop_committed) -			item_lsn = lip->li_ops->iop_committed(lip, commit_lsn); -		else -			item_lsn = commit_lsn; - -		/* item_lsn of -1 means the item needs no further processing */ -		if (XFS_LSN_CMP(item_lsn, (xfs_lsn_t)-1) == 0) -			continue; - -		/* -		 * if we are aborting the operation, no point in inserting the -		 * object into the AIL as we are in a shutdown situation. -		 */ -		if (aborted) { -			ASSERT(xlog_is_shutdown(ailp->ail_log)); -			if (lip->li_ops->iop_unpin) -				lip->li_ops->iop_unpin(lip, 1); -			continue; -		} - -		if (item_lsn != commit_lsn) { - -			/* -			 * Not a bulk update option due to unusual item_lsn. -			 * Push into AIL immediately, rechecking the lsn once -			 * we have the ail lock. Then unpin the item. This does -			 * not affect the AIL cursor the bulk insert path is -			 * using. -			 */ -			spin_lock(&ailp->ail_lock); -			if (XFS_LSN_CMP(item_lsn, lip->li_lsn) > 0) -				xfs_trans_ail_update(ailp, lip, item_lsn); -			else -				spin_unlock(&ailp->ail_lock); -			if (lip->li_ops->iop_unpin) -				lip->li_ops->iop_unpin(lip, 0); -			continue; -		} - -		/* Item is a candidate for bulk AIL insert.  */ -		log_items[i++] = lv->lv_item; -		if (i >= LOG_ITEM_BATCH_SIZE) { -			xfs_log_item_batch_insert(ailp, &cur, log_items, -					LOG_ITEM_BATCH_SIZE, commit_lsn); -			i = 0; -		} -	} - -	/* make sure we insert the remainder! */ -	if (i) -		xfs_log_item_batch_insert(ailp, &cur, log_items, i, commit_lsn); - -	spin_lock(&ailp->ail_lock); -	xfs_trans_ail_cursor_done(&cur); -	spin_unlock(&ailp->ail_lock); -} -  /*   * Sort transaction items prior to running precommit operations. This will   * attempt to order the items such that they will always be locked in the same |