cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

xfs_trans_ail.c (25119B)


      1// SPDX-License-Identifier: GPL-2.0
      2/*
      3 * Copyright (c) 2000-2002,2005 Silicon Graphics, Inc.
      4 * Copyright (c) 2008 Dave Chinner
      5 * All Rights Reserved.
      6 */
      7#include "xfs.h"
      8#include "xfs_fs.h"
      9#include "xfs_shared.h"
     10#include "xfs_format.h"
     11#include "xfs_log_format.h"
     12#include "xfs_trans_resv.h"
     13#include "xfs_mount.h"
     14#include "xfs_trans.h"
     15#include "xfs_trans_priv.h"
     16#include "xfs_trace.h"
     17#include "xfs_errortag.h"
     18#include "xfs_error.h"
     19#include "xfs_log.h"
     20#include "xfs_log_priv.h"
     21
     22#ifdef DEBUG
     23/*
     24 * Check that the list is sorted as it should be.
     25 *
     26 * Called with the ail lock held, but we don't want to assert fail with it
     27 * held otherwise we'll lock everything up and won't be able to debug the
     28 * cause. Hence we sample and check the state under the AIL lock and return if
     29 * everything is fine, otherwise we drop the lock and run the ASSERT checks.
     30 * Asserts may not be fatal, so pick the lock back up and continue onwards.
     31 */
     32STATIC void
     33xfs_ail_check(
     34	struct xfs_ail		*ailp,
     35	struct xfs_log_item	*lip)
     36	__must_hold(&ailp->ail_lock)
     37{
     38	struct xfs_log_item	*prev_lip;
     39	struct xfs_log_item	*next_lip;
     40	xfs_lsn_t		prev_lsn = NULLCOMMITLSN;
     41	xfs_lsn_t		next_lsn = NULLCOMMITLSN;
     42	xfs_lsn_t		lsn;
     43	bool			in_ail;
     44
     45
     46	if (list_empty(&ailp->ail_head))
     47		return;
     48
     49	/*
     50	 * Sample then check the next and previous entries are valid.
     51	 */
     52	in_ail = test_bit(XFS_LI_IN_AIL, &lip->li_flags);
     53	prev_lip = list_entry(lip->li_ail.prev, struct xfs_log_item, li_ail);
     54	if (&prev_lip->li_ail != &ailp->ail_head)
     55		prev_lsn = prev_lip->li_lsn;
     56	next_lip = list_entry(lip->li_ail.next, struct xfs_log_item, li_ail);
     57	if (&next_lip->li_ail != &ailp->ail_head)
     58		next_lsn = next_lip->li_lsn;
     59	lsn = lip->li_lsn;
     60
     61	if (in_ail &&
     62	    (prev_lsn == NULLCOMMITLSN || XFS_LSN_CMP(prev_lsn, lsn) <= 0) &&
     63	    (next_lsn == NULLCOMMITLSN || XFS_LSN_CMP(next_lsn, lsn) >= 0))
     64		return;
     65
     66	spin_unlock(&ailp->ail_lock);
     67	ASSERT(in_ail);
     68	ASSERT(prev_lsn == NULLCOMMITLSN || XFS_LSN_CMP(prev_lsn, lsn) <= 0);
     69	ASSERT(next_lsn == NULLCOMMITLSN || XFS_LSN_CMP(next_lsn, lsn) >= 0);
     70	spin_lock(&ailp->ail_lock);
     71}
     72#else /* !DEBUG */
     73#define	xfs_ail_check(a,l)
     74#endif /* DEBUG */
     75
     76/*
     77 * Return a pointer to the last item in the AIL.  If the AIL is empty, then
     78 * return NULL.
     79 */
     80static struct xfs_log_item *
     81xfs_ail_max(
     82	struct xfs_ail  *ailp)
     83{
     84	if (list_empty(&ailp->ail_head))
     85		return NULL;
     86
     87	return list_entry(ailp->ail_head.prev, struct xfs_log_item, li_ail);
     88}
     89
     90/*
     91 * Return a pointer to the item which follows the given item in the AIL.  If
     92 * the given item is the last item in the list, then return NULL.
     93 */
     94static struct xfs_log_item *
     95xfs_ail_next(
     96	struct xfs_ail		*ailp,
     97	struct xfs_log_item	*lip)
     98{
     99	if (lip->li_ail.next == &ailp->ail_head)
    100		return NULL;
    101
    102	return list_first_entry(&lip->li_ail, struct xfs_log_item, li_ail);
    103}
    104
    105/*
    106 * This is called by the log manager code to determine the LSN of the tail of
    107 * the log.  This is exactly the LSN of the first item in the AIL.  If the AIL
    108 * is empty, then this function returns 0.
    109 *
    110 * We need the AIL lock in order to get a coherent read of the lsn of the last
    111 * item in the AIL.
    112 */
    113static xfs_lsn_t
    114__xfs_ail_min_lsn(
    115	struct xfs_ail		*ailp)
    116{
    117	struct xfs_log_item	*lip = xfs_ail_min(ailp);
    118
    119	if (lip)
    120		return lip->li_lsn;
    121	return 0;
    122}
    123
    124xfs_lsn_t
    125xfs_ail_min_lsn(
    126	struct xfs_ail		*ailp)
    127{
    128	xfs_lsn_t		lsn;
    129
    130	spin_lock(&ailp->ail_lock);
    131	lsn = __xfs_ail_min_lsn(ailp);
    132	spin_unlock(&ailp->ail_lock);
    133
    134	return lsn;
    135}
    136
    137/*
    138 * Return the maximum lsn held in the AIL, or zero if the AIL is empty.
    139 */
    140static xfs_lsn_t
    141xfs_ail_max_lsn(
    142	struct xfs_ail		*ailp)
    143{
    144	xfs_lsn_t       	lsn = 0;
    145	struct xfs_log_item	*lip;
    146
    147	spin_lock(&ailp->ail_lock);
    148	lip = xfs_ail_max(ailp);
    149	if (lip)
    150		lsn = lip->li_lsn;
    151	spin_unlock(&ailp->ail_lock);
    152
    153	return lsn;
    154}
    155
    156/*
    157 * The cursor keeps track of where our current traversal is up to by tracking
    158 * the next item in the list for us. However, for this to be safe, removing an
    159 * object from the AIL needs to invalidate any cursor that points to it. hence
    160 * the traversal cursor needs to be linked to the struct xfs_ail so that
    161 * deletion can search all the active cursors for invalidation.
    162 */
    163STATIC void
    164xfs_trans_ail_cursor_init(
    165	struct xfs_ail		*ailp,
    166	struct xfs_ail_cursor	*cur)
    167{
    168	cur->item = NULL;
    169	list_add_tail(&cur->list, &ailp->ail_cursors);
    170}
    171
    172/*
    173 * Get the next item in the traversal and advance the cursor.  If the cursor
    174 * was invalidated (indicated by a lip of 1), restart the traversal.
    175 */
    176struct xfs_log_item *
    177xfs_trans_ail_cursor_next(
    178	struct xfs_ail		*ailp,
    179	struct xfs_ail_cursor	*cur)
    180{
    181	struct xfs_log_item	*lip = cur->item;
    182
    183	if ((uintptr_t)lip & 1)
    184		lip = xfs_ail_min(ailp);
    185	if (lip)
    186		cur->item = xfs_ail_next(ailp, lip);
    187	return lip;
    188}
    189
    190/*
    191 * When the traversal is complete, we need to remove the cursor from the list
    192 * of traversing cursors.
    193 */
    194void
    195xfs_trans_ail_cursor_done(
    196	struct xfs_ail_cursor	*cur)
    197{
    198	cur->item = NULL;
    199	list_del_init(&cur->list);
    200}
    201
    202/*
    203 * Invalidate any cursor that is pointing to this item. This is called when an
    204 * item is removed from the AIL. Any cursor pointing to this object is now
    205 * invalid and the traversal needs to be terminated so it doesn't reference a
    206 * freed object. We set the low bit of the cursor item pointer so we can
    207 * distinguish between an invalidation and the end of the list when getting the
    208 * next item from the cursor.
    209 */
    210STATIC void
    211xfs_trans_ail_cursor_clear(
    212	struct xfs_ail		*ailp,
    213	struct xfs_log_item	*lip)
    214{
    215	struct xfs_ail_cursor	*cur;
    216
    217	list_for_each_entry(cur, &ailp->ail_cursors, list) {
    218		if (cur->item == lip)
    219			cur->item = (struct xfs_log_item *)
    220					((uintptr_t)cur->item | 1);
    221	}
    222}
    223
    224/*
    225 * Find the first item in the AIL with the given @lsn by searching in ascending
    226 * LSN order and initialise the cursor to point to the next item for a
    227 * ascending traversal.  Pass a @lsn of zero to initialise the cursor to the
    228 * first item in the AIL. Returns NULL if the list is empty.
    229 */
    230struct xfs_log_item *
    231xfs_trans_ail_cursor_first(
    232	struct xfs_ail		*ailp,
    233	struct xfs_ail_cursor	*cur,
    234	xfs_lsn_t		lsn)
    235{
    236	struct xfs_log_item	*lip;
    237
    238	xfs_trans_ail_cursor_init(ailp, cur);
    239
    240	if (lsn == 0) {
    241		lip = xfs_ail_min(ailp);
    242		goto out;
    243	}
    244
    245	list_for_each_entry(lip, &ailp->ail_head, li_ail) {
    246		if (XFS_LSN_CMP(lip->li_lsn, lsn) >= 0)
    247			goto out;
    248	}
    249	return NULL;
    250
    251out:
    252	if (lip)
    253		cur->item = xfs_ail_next(ailp, lip);
    254	return lip;
    255}
    256
    257static struct xfs_log_item *
    258__xfs_trans_ail_cursor_last(
    259	struct xfs_ail		*ailp,
    260	xfs_lsn_t		lsn)
    261{
    262	struct xfs_log_item	*lip;
    263
    264	list_for_each_entry_reverse(lip, &ailp->ail_head, li_ail) {
    265		if (XFS_LSN_CMP(lip->li_lsn, lsn) <= 0)
    266			return lip;
    267	}
    268	return NULL;
    269}
    270
    271/*
    272 * Find the last item in the AIL with the given @lsn by searching in descending
    273 * LSN order and initialise the cursor to point to that item.  If there is no
    274 * item with the value of @lsn, then it sets the cursor to the last item with an
    275 * LSN lower than @lsn.  Returns NULL if the list is empty.
    276 */
    277struct xfs_log_item *
    278xfs_trans_ail_cursor_last(
    279	struct xfs_ail		*ailp,
    280	struct xfs_ail_cursor	*cur,
    281	xfs_lsn_t		lsn)
    282{
    283	xfs_trans_ail_cursor_init(ailp, cur);
    284	cur->item = __xfs_trans_ail_cursor_last(ailp, lsn);
    285	return cur->item;
    286}
    287
    288/*
    289 * Splice the log item list into the AIL at the given LSN. We splice to the
    290 * tail of the given LSN to maintain insert order for push traversals. The
    291 * cursor is optional, allowing repeated updates to the same LSN to avoid
    292 * repeated traversals.  This should not be called with an empty list.
    293 */
    294static void
    295xfs_ail_splice(
    296	struct xfs_ail		*ailp,
    297	struct xfs_ail_cursor	*cur,
    298	struct list_head	*list,
    299	xfs_lsn_t		lsn)
    300{
    301	struct xfs_log_item	*lip;
    302
    303	ASSERT(!list_empty(list));
    304
    305	/*
    306	 * Use the cursor to determine the insertion point if one is
    307	 * provided.  If not, or if the one we got is not valid,
    308	 * find the place in the AIL where the items belong.
    309	 */
    310	lip = cur ? cur->item : NULL;
    311	if (!lip || (uintptr_t)lip & 1)
    312		lip = __xfs_trans_ail_cursor_last(ailp, lsn);
    313
    314	/*
    315	 * If a cursor is provided, we know we're processing the AIL
    316	 * in lsn order, and future items to be spliced in will
    317	 * follow the last one being inserted now.  Update the
    318	 * cursor to point to that last item, now while we have a
    319	 * reliable pointer to it.
    320	 */
    321	if (cur)
    322		cur->item = list_entry(list->prev, struct xfs_log_item, li_ail);
    323
    324	/*
    325	 * Finally perform the splice.  Unless the AIL was empty,
    326	 * lip points to the item in the AIL _after_ which the new
    327	 * items should go.  If lip is null the AIL was empty, so
    328	 * the new items go at the head of the AIL.
    329	 */
    330	if (lip)
    331		list_splice(list, &lip->li_ail);
    332	else
    333		list_splice(list, &ailp->ail_head);
    334}
    335
    336/*
    337 * Delete the given item from the AIL.  Return a pointer to the item.
    338 */
    339static void
    340xfs_ail_delete(
    341	struct xfs_ail		*ailp,
    342	struct xfs_log_item	*lip)
    343{
    344	xfs_ail_check(ailp, lip);
    345	list_del(&lip->li_ail);
    346	xfs_trans_ail_cursor_clear(ailp, lip);
    347}
    348
    349/*
    350 * Requeue a failed buffer for writeback.
    351 *
    352 * We clear the log item failed state here as well, but we have to be careful
    353 * about reference counts because the only active reference counts on the buffer
    354 * may be the failed log items. Hence if we clear the log item failed state
    355 * before queuing the buffer for IO we can release all active references to
    356 * the buffer and free it, leading to use after free problems in
    357 * xfs_buf_delwri_queue. It makes no difference to the buffer or log items which
    358 * order we process them in - the buffer is locked, and we own the buffer list
    359 * so nothing on them is going to change while we are performing this action.
    360 *
    361 * Hence we can safely queue the buffer for IO before we clear the failed log
    362 * item state, therefore  always having an active reference to the buffer and
    363 * avoiding the transient zero-reference state that leads to use-after-free.
    364 */
    365static inline int
    366xfsaild_resubmit_item(
    367	struct xfs_log_item	*lip,
    368	struct list_head	*buffer_list)
    369{
    370	struct xfs_buf		*bp = lip->li_buf;
    371
    372	if (!xfs_buf_trylock(bp))
    373		return XFS_ITEM_LOCKED;
    374
    375	if (!xfs_buf_delwri_queue(bp, buffer_list)) {
    376		xfs_buf_unlock(bp);
    377		return XFS_ITEM_FLUSHING;
    378	}
    379
    380	/* protected by ail_lock */
    381	list_for_each_entry(lip, &bp->b_li_list, li_bio_list) {
    382		if (bp->b_flags & _XBF_INODES)
    383			clear_bit(XFS_LI_FAILED, &lip->li_flags);
    384		else
    385			xfs_clear_li_failed(lip);
    386	}
    387
    388	xfs_buf_unlock(bp);
    389	return XFS_ITEM_SUCCESS;
    390}
    391
    392static inline uint
    393xfsaild_push_item(
    394	struct xfs_ail		*ailp,
    395	struct xfs_log_item	*lip)
    396{
    397	/*
    398	 * If log item pinning is enabled, skip the push and track the item as
    399	 * pinned. This can help induce head-behind-tail conditions.
    400	 */
    401	if (XFS_TEST_ERROR(false, ailp->ail_log->l_mp, XFS_ERRTAG_LOG_ITEM_PIN))
    402		return XFS_ITEM_PINNED;
    403
    404	/*
    405	 * Consider the item pinned if a push callback is not defined so the
    406	 * caller will force the log. This should only happen for intent items
    407	 * as they are unpinned once the associated done item is committed to
    408	 * the on-disk log.
    409	 */
    410	if (!lip->li_ops->iop_push)
    411		return XFS_ITEM_PINNED;
    412	if (test_bit(XFS_LI_FAILED, &lip->li_flags))
    413		return xfsaild_resubmit_item(lip, &ailp->ail_buf_list);
    414	return lip->li_ops->iop_push(lip, &ailp->ail_buf_list);
    415}
    416
    417static long
    418xfsaild_push(
    419	struct xfs_ail		*ailp)
    420{
    421	struct xfs_mount	*mp = ailp->ail_log->l_mp;
    422	struct xfs_ail_cursor	cur;
    423	struct xfs_log_item	*lip;
    424	xfs_lsn_t		lsn;
    425	xfs_lsn_t		target;
    426	long			tout;
    427	int			stuck = 0;
    428	int			flushing = 0;
    429	int			count = 0;
    430
    431	/*
    432	 * If we encountered pinned items or did not finish writing out all
    433	 * buffers the last time we ran, force a background CIL push to get the
    434	 * items unpinned in the near future. We do not wait on the CIL push as
    435	 * that could stall us for seconds if there is enough background IO
    436	 * load. Stalling for that long when the tail of the log is pinned and
    437	 * needs flushing will hard stop the transaction subsystem when log
    438	 * space runs out.
    439	 */
    440	if (ailp->ail_log_flush && ailp->ail_last_pushed_lsn == 0 &&
    441	    (!list_empty_careful(&ailp->ail_buf_list) ||
    442	     xfs_ail_min_lsn(ailp))) {
    443		ailp->ail_log_flush = 0;
    444
    445		XFS_STATS_INC(mp, xs_push_ail_flush);
    446		xlog_cil_flush(ailp->ail_log);
    447	}
    448
    449	spin_lock(&ailp->ail_lock);
    450
    451	/*
    452	 * If we have a sync push waiter, we always have to push till the AIL is
    453	 * empty. Update the target to point to the end of the AIL so that
    454	 * capture updates that occur after the sync push waiter has gone to
    455	 * sleep.
    456	 */
    457	if (waitqueue_active(&ailp->ail_empty)) {
    458		lip = xfs_ail_max(ailp);
    459		if (lip)
    460			target = lip->li_lsn;
    461	} else {
    462		/* barrier matches the ail_target update in xfs_ail_push() */
    463		smp_rmb();
    464		target = ailp->ail_target;
    465		ailp->ail_target_prev = target;
    466	}
    467
    468	/* we're done if the AIL is empty or our push has reached the end */
    469	lip = xfs_trans_ail_cursor_first(ailp, &cur, ailp->ail_last_pushed_lsn);
    470	if (!lip)
    471		goto out_done;
    472
    473	XFS_STATS_INC(mp, xs_push_ail);
    474
    475	lsn = lip->li_lsn;
    476	while ((XFS_LSN_CMP(lip->li_lsn, target) <= 0)) {
    477		int	lock_result;
    478
    479		/*
    480		 * Note that iop_push may unlock and reacquire the AIL lock.  We
    481		 * rely on the AIL cursor implementation to be able to deal with
    482		 * the dropped lock.
    483		 */
    484		lock_result = xfsaild_push_item(ailp, lip);
    485		switch (lock_result) {
    486		case XFS_ITEM_SUCCESS:
    487			XFS_STATS_INC(mp, xs_push_ail_success);
    488			trace_xfs_ail_push(lip);
    489
    490			ailp->ail_last_pushed_lsn = lsn;
    491			break;
    492
    493		case XFS_ITEM_FLUSHING:
    494			/*
    495			 * The item or its backing buffer is already being
    496			 * flushed.  The typical reason for that is that an
    497			 * inode buffer is locked because we already pushed the
    498			 * updates to it as part of inode clustering.
    499			 *
    500			 * We do not want to stop flushing just because lots
    501			 * of items are already being flushed, but we need to
    502			 * re-try the flushing relatively soon if most of the
    503			 * AIL is being flushed.
    504			 */
    505			XFS_STATS_INC(mp, xs_push_ail_flushing);
    506			trace_xfs_ail_flushing(lip);
    507
    508			flushing++;
    509			ailp->ail_last_pushed_lsn = lsn;
    510			break;
    511
    512		case XFS_ITEM_PINNED:
    513			XFS_STATS_INC(mp, xs_push_ail_pinned);
    514			trace_xfs_ail_pinned(lip);
    515
    516			stuck++;
    517			ailp->ail_log_flush++;
    518			break;
    519		case XFS_ITEM_LOCKED:
    520			XFS_STATS_INC(mp, xs_push_ail_locked);
    521			trace_xfs_ail_locked(lip);
    522
    523			stuck++;
    524			break;
    525		default:
    526			ASSERT(0);
    527			break;
    528		}
    529
    530		count++;
    531
    532		/*
    533		 * Are there too many items we can't do anything with?
    534		 *
    535		 * If we are skipping too many items because we can't flush
    536		 * them or they are already being flushed, we back off and
    537		 * given them time to complete whatever operation is being
    538		 * done. i.e. remove pressure from the AIL while we can't make
    539		 * progress so traversals don't slow down further inserts and
    540		 * removals to/from the AIL.
    541		 *
    542		 * The value of 100 is an arbitrary magic number based on
    543		 * observation.
    544		 */
    545		if (stuck > 100)
    546			break;
    547
    548		lip = xfs_trans_ail_cursor_next(ailp, &cur);
    549		if (lip == NULL)
    550			break;
    551		lsn = lip->li_lsn;
    552	}
    553
    554out_done:
    555	xfs_trans_ail_cursor_done(&cur);
    556	spin_unlock(&ailp->ail_lock);
    557
    558	if (xfs_buf_delwri_submit_nowait(&ailp->ail_buf_list))
    559		ailp->ail_log_flush++;
    560
    561	if (!count || XFS_LSN_CMP(lsn, target) >= 0) {
    562		/*
    563		 * We reached the target or the AIL is empty, so wait a bit
    564		 * longer for I/O to complete and remove pushed items from the
    565		 * AIL before we start the next scan from the start of the AIL.
    566		 */
    567		tout = 50;
    568		ailp->ail_last_pushed_lsn = 0;
    569	} else if (((stuck + flushing) * 100) / count > 90) {
    570		/*
    571		 * Either there is a lot of contention on the AIL or we are
    572		 * stuck due to operations in progress. "Stuck" in this case
    573		 * is defined as >90% of the items we tried to push were stuck.
    574		 *
    575		 * Backoff a bit more to allow some I/O to complete before
    576		 * restarting from the start of the AIL. This prevents us from
    577		 * spinning on the same items, and if they are pinned will all
    578		 * the restart to issue a log force to unpin the stuck items.
    579		 */
    580		tout = 20;
    581		ailp->ail_last_pushed_lsn = 0;
    582	} else {
    583		/*
    584		 * Assume we have more work to do in a short while.
    585		 */
    586		tout = 10;
    587	}
    588
    589	return tout;
    590}
    591
    592static int
    593xfsaild(
    594	void		*data)
    595{
    596	struct xfs_ail	*ailp = data;
    597	long		tout = 0;	/* milliseconds */
    598	unsigned int	noreclaim_flag;
    599
    600	noreclaim_flag = memalloc_noreclaim_save();
    601	set_freezable();
    602
    603	while (1) {
    604		if (tout && tout <= 20)
    605			set_current_state(TASK_KILLABLE);
    606		else
    607			set_current_state(TASK_INTERRUPTIBLE);
    608
    609		/*
    610		 * Check kthread_should_stop() after we set the task state to
    611		 * guarantee that we either see the stop bit and exit or the
    612		 * task state is reset to runnable such that it's not scheduled
    613		 * out indefinitely and detects the stop bit at next iteration.
    614		 * A memory barrier is included in above task state set to
    615		 * serialize again kthread_stop().
    616		 */
    617		if (kthread_should_stop()) {
    618			__set_current_state(TASK_RUNNING);
    619
    620			/*
    621			 * The caller forces out the AIL before stopping the
    622			 * thread in the common case, which means the delwri
    623			 * queue is drained. In the shutdown case, the queue may
    624			 * still hold relogged buffers that haven't been
    625			 * submitted because they were pinned since added to the
    626			 * queue.
    627			 *
    628			 * Log I/O error processing stales the underlying buffer
    629			 * and clears the delwri state, expecting the buf to be
    630			 * removed on the next submission attempt. That won't
    631			 * happen if we're shutting down, so this is the last
    632			 * opportunity to release such buffers from the queue.
    633			 */
    634			ASSERT(list_empty(&ailp->ail_buf_list) ||
    635			       xlog_is_shutdown(ailp->ail_log));
    636			xfs_buf_delwri_cancel(&ailp->ail_buf_list);
    637			break;
    638		}
    639
    640		spin_lock(&ailp->ail_lock);
    641
    642		/*
    643		 * Idle if the AIL is empty and we are not racing with a target
    644		 * update. We check the AIL after we set the task to a sleep
    645		 * state to guarantee that we either catch an ail_target update
    646		 * or that a wake_up resets the state to TASK_RUNNING.
    647		 * Otherwise, we run the risk of sleeping indefinitely.
    648		 *
    649		 * The barrier matches the ail_target update in xfs_ail_push().
    650		 */
    651		smp_rmb();
    652		if (!xfs_ail_min(ailp) &&
    653		    ailp->ail_target == ailp->ail_target_prev &&
    654		    list_empty(&ailp->ail_buf_list)) {
    655			spin_unlock(&ailp->ail_lock);
    656			freezable_schedule();
    657			tout = 0;
    658			continue;
    659		}
    660		spin_unlock(&ailp->ail_lock);
    661
    662		if (tout)
    663			freezable_schedule_timeout(msecs_to_jiffies(tout));
    664
    665		__set_current_state(TASK_RUNNING);
    666
    667		try_to_freeze();
    668
    669		tout = xfsaild_push(ailp);
    670	}
    671
    672	memalloc_noreclaim_restore(noreclaim_flag);
    673	return 0;
    674}
    675
    676/*
    677 * This routine is called to move the tail of the AIL forward.  It does this by
    678 * trying to flush items in the AIL whose lsns are below the given
    679 * threshold_lsn.
    680 *
    681 * The push is run asynchronously in a workqueue, which means the caller needs
    682 * to handle waiting on the async flush for space to become available.
    683 * We don't want to interrupt any push that is in progress, hence we only queue
    684 * work if we set the pushing bit appropriately.
    685 *
    686 * We do this unlocked - we only need to know whether there is anything in the
    687 * AIL at the time we are called. We don't need to access the contents of
    688 * any of the objects, so the lock is not needed.
    689 */
    690void
    691xfs_ail_push(
    692	struct xfs_ail		*ailp,
    693	xfs_lsn_t		threshold_lsn)
    694{
    695	struct xfs_log_item	*lip;
    696
    697	lip = xfs_ail_min(ailp);
    698	if (!lip || xlog_is_shutdown(ailp->ail_log) ||
    699	    XFS_LSN_CMP(threshold_lsn, ailp->ail_target) <= 0)
    700		return;
    701
    702	/*
    703	 * Ensure that the new target is noticed in push code before it clears
    704	 * the XFS_AIL_PUSHING_BIT.
    705	 */
    706	smp_wmb();
    707	xfs_trans_ail_copy_lsn(ailp, &ailp->ail_target, &threshold_lsn);
    708	smp_wmb();
    709
    710	wake_up_process(ailp->ail_task);
    711}
    712
    713/*
    714 * Push out all items in the AIL immediately
    715 */
    716void
    717xfs_ail_push_all(
    718	struct xfs_ail  *ailp)
    719{
    720	xfs_lsn_t       threshold_lsn = xfs_ail_max_lsn(ailp);
    721
    722	if (threshold_lsn)
    723		xfs_ail_push(ailp, threshold_lsn);
    724}
    725
    726/*
    727 * Push out all items in the AIL immediately and wait until the AIL is empty.
    728 */
    729void
    730xfs_ail_push_all_sync(
    731	struct xfs_ail  *ailp)
    732{
    733	struct xfs_log_item	*lip;
    734	DEFINE_WAIT(wait);
    735
    736	spin_lock(&ailp->ail_lock);
    737	while ((lip = xfs_ail_max(ailp)) != NULL) {
    738		prepare_to_wait(&ailp->ail_empty, &wait, TASK_UNINTERRUPTIBLE);
    739		wake_up_process(ailp->ail_task);
    740		spin_unlock(&ailp->ail_lock);
    741		schedule();
    742		spin_lock(&ailp->ail_lock);
    743	}
    744	spin_unlock(&ailp->ail_lock);
    745
    746	finish_wait(&ailp->ail_empty, &wait);
    747}
    748
    749void
    750xfs_ail_update_finish(
    751	struct xfs_ail		*ailp,
    752	xfs_lsn_t		old_lsn) __releases(ailp->ail_lock)
    753{
    754	struct xlog		*log = ailp->ail_log;
    755
    756	/* if the tail lsn hasn't changed, don't do updates or wakeups. */
    757	if (!old_lsn || old_lsn == __xfs_ail_min_lsn(ailp)) {
    758		spin_unlock(&ailp->ail_lock);
    759		return;
    760	}
    761
    762	if (!xlog_is_shutdown(log))
    763		xlog_assign_tail_lsn_locked(log->l_mp);
    764
    765	if (list_empty(&ailp->ail_head))
    766		wake_up_all(&ailp->ail_empty);
    767	spin_unlock(&ailp->ail_lock);
    768	xfs_log_space_wake(log->l_mp);
    769}
    770
    771/*
    772 * xfs_trans_ail_update - bulk AIL insertion operation.
    773 *
    774 * @xfs_trans_ail_update takes an array of log items that all need to be
    775 * positioned at the same LSN in the AIL. If an item is not in the AIL, it will
    776 * be added.  Otherwise, it will be repositioned  by removing it and re-adding
    777 * it to the AIL. If we move the first item in the AIL, update the log tail to
    778 * match the new minimum LSN in the AIL.
    779 *
    780 * This function takes the AIL lock once to execute the update operations on
    781 * all the items in the array, and as such should not be called with the AIL
    782 * lock held. As a result, once we have the AIL lock, we need to check each log
    783 * item LSN to confirm it needs to be moved forward in the AIL.
    784 *
    785 * To optimise the insert operation, we delete all the items from the AIL in
    786 * the first pass, moving them into a temporary list, then splice the temporary
    787 * list into the correct position in the AIL. This avoids needing to do an
    788 * insert operation on every item.
    789 *
    790 * This function must be called with the AIL lock held.  The lock is dropped
    791 * before returning.
    792 */
    793void
    794xfs_trans_ail_update_bulk(
    795	struct xfs_ail		*ailp,
    796	struct xfs_ail_cursor	*cur,
    797	struct xfs_log_item	**log_items,
    798	int			nr_items,
    799	xfs_lsn_t		lsn) __releases(ailp->ail_lock)
    800{
    801	struct xfs_log_item	*mlip;
    802	xfs_lsn_t		tail_lsn = 0;
    803	int			i;
    804	LIST_HEAD(tmp);
    805
    806	ASSERT(nr_items > 0);		/* Not required, but true. */
    807	mlip = xfs_ail_min(ailp);
    808
    809	for (i = 0; i < nr_items; i++) {
    810		struct xfs_log_item *lip = log_items[i];
    811		if (test_and_set_bit(XFS_LI_IN_AIL, &lip->li_flags)) {
    812			/* check if we really need to move the item */
    813			if (XFS_LSN_CMP(lsn, lip->li_lsn) <= 0)
    814				continue;
    815
    816			trace_xfs_ail_move(lip, lip->li_lsn, lsn);
    817			if (mlip == lip && !tail_lsn)
    818				tail_lsn = lip->li_lsn;
    819
    820			xfs_ail_delete(ailp, lip);
    821		} else {
    822			trace_xfs_ail_insert(lip, 0, lsn);
    823		}
    824		lip->li_lsn = lsn;
    825		list_add(&lip->li_ail, &tmp);
    826	}
    827
    828	if (!list_empty(&tmp))
    829		xfs_ail_splice(ailp, cur, &tmp, lsn);
    830
    831	xfs_ail_update_finish(ailp, tail_lsn);
    832}
    833
    834/* Insert a log item into the AIL. */
    835void
    836xfs_trans_ail_insert(
    837	struct xfs_ail		*ailp,
    838	struct xfs_log_item	*lip,
    839	xfs_lsn_t		lsn)
    840{
    841	spin_lock(&ailp->ail_lock);
    842	xfs_trans_ail_update_bulk(ailp, NULL, &lip, 1, lsn);
    843}
    844
    845/*
    846 * Delete one log item from the AIL.
    847 *
    848 * If this item was at the tail of the AIL, return the LSN of the log item so
    849 * that we can use it to check if the LSN of the tail of the log has moved
    850 * when finishing up the AIL delete process in xfs_ail_update_finish().
    851 */
    852xfs_lsn_t
    853xfs_ail_delete_one(
    854	struct xfs_ail		*ailp,
    855	struct xfs_log_item	*lip)
    856{
    857	struct xfs_log_item	*mlip = xfs_ail_min(ailp);
    858	xfs_lsn_t		lsn = lip->li_lsn;
    859
    860	trace_xfs_ail_delete(lip, mlip->li_lsn, lip->li_lsn);
    861	xfs_ail_delete(ailp, lip);
    862	clear_bit(XFS_LI_IN_AIL, &lip->li_flags);
    863	lip->li_lsn = 0;
    864
    865	if (mlip == lip)
    866		return lsn;
    867	return 0;
    868}
    869
    870void
    871xfs_trans_ail_delete(
    872	struct xfs_log_item	*lip,
    873	int			shutdown_type)
    874{
    875	struct xfs_ail		*ailp = lip->li_ailp;
    876	struct xlog		*log = ailp->ail_log;
    877	xfs_lsn_t		tail_lsn;
    878
    879	spin_lock(&ailp->ail_lock);
    880	if (!test_bit(XFS_LI_IN_AIL, &lip->li_flags)) {
    881		spin_unlock(&ailp->ail_lock);
    882		if (shutdown_type && !xlog_is_shutdown(log)) {
    883			xfs_alert_tag(log->l_mp, XFS_PTAG_AILDELETE,
    884	"%s: attempting to delete a log item that is not in the AIL",
    885					__func__);
    886			xlog_force_shutdown(log, shutdown_type);
    887		}
    888		return;
    889	}
    890
    891	/* xfs_ail_update_finish() drops the AIL lock */
    892	xfs_clear_li_failed(lip);
    893	tail_lsn = xfs_ail_delete_one(ailp, lip);
    894	xfs_ail_update_finish(ailp, tail_lsn);
    895}
    896
    897int
    898xfs_trans_ail_init(
    899	xfs_mount_t	*mp)
    900{
    901	struct xfs_ail	*ailp;
    902
    903	ailp = kmem_zalloc(sizeof(struct xfs_ail), KM_MAYFAIL);
    904	if (!ailp)
    905		return -ENOMEM;
    906
    907	ailp->ail_log = mp->m_log;
    908	INIT_LIST_HEAD(&ailp->ail_head);
    909	INIT_LIST_HEAD(&ailp->ail_cursors);
    910	spin_lock_init(&ailp->ail_lock);
    911	INIT_LIST_HEAD(&ailp->ail_buf_list);
    912	init_waitqueue_head(&ailp->ail_empty);
    913
    914	ailp->ail_task = kthread_run(xfsaild, ailp, "xfsaild/%s",
    915				mp->m_super->s_id);
    916	if (IS_ERR(ailp->ail_task))
    917		goto out_free_ailp;
    918
    919	mp->m_ail = ailp;
    920	return 0;
    921
    922out_free_ailp:
    923	kmem_free(ailp);
    924	return -ENOMEM;
    925}
    926
    927void
    928xfs_trans_ail_destroy(
    929	xfs_mount_t	*mp)
    930{
    931	struct xfs_ail	*ailp = mp->m_ail;
    932
    933	kthread_stop(ailp->ail_task);
    934	kmem_free(ailp);
    935}