Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux
[platform/adaptation/renesas_rcar/renesas_kernel.git] / fs / xfs / xfs_trans_ail.c
1 /*
2  * Copyright (c) 2000-2002,2005 Silicon Graphics, Inc.
3  * Copyright (c) 2008 Dave Chinner
4  * All Rights Reserved.
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License as
8  * published by the Free Software Foundation.
9  *
10  * This program is distributed in the hope that it would be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write the Free Software Foundation,
17  * Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
18  */
19 #include "xfs.h"
20 #include "xfs_fs.h"
21 #include "xfs_types.h"
22 #include "xfs_log.h"
23 #include "xfs_inum.h"
24 #include "xfs_trans.h"
25 #include "xfs_sb.h"
26 #include "xfs_ag.h"
27 #include "xfs_mount.h"
28 #include "xfs_trans_priv.h"
29 #include "xfs_error.h"
30
31 #ifdef DEBUG
32 /*
33  * Check that the list is sorted as it should be.
34  */
35 STATIC void
36 xfs_ail_check(
37         struct xfs_ail  *ailp,
38         xfs_log_item_t  *lip)
39 {
40         xfs_log_item_t  *prev_lip;
41
42         if (list_empty(&ailp->xa_ail))
43                 return;
44
45         /*
46          * Check the next and previous entries are valid.
47          */
48         ASSERT((lip->li_flags & XFS_LI_IN_AIL) != 0);
49         prev_lip = list_entry(lip->li_ail.prev, xfs_log_item_t, li_ail);
50         if (&prev_lip->li_ail != &ailp->xa_ail)
51                 ASSERT(XFS_LSN_CMP(prev_lip->li_lsn, lip->li_lsn) <= 0);
52
53         prev_lip = list_entry(lip->li_ail.next, xfs_log_item_t, li_ail);
54         if (&prev_lip->li_ail != &ailp->xa_ail)
55                 ASSERT(XFS_LSN_CMP(prev_lip->li_lsn, lip->li_lsn) >= 0);
56
57
58 #ifdef XFS_TRANS_DEBUG
59         /*
60          * Walk the list checking lsn ordering, and that every entry has the
61          * XFS_LI_IN_AIL flag set. This is really expensive, so only do it
62          * when specifically debugging the transaction subsystem.
63          */
64         prev_lip = list_entry(&ailp->xa_ail, xfs_log_item_t, li_ail);
65         list_for_each_entry(lip, &ailp->xa_ail, li_ail) {
66                 if (&prev_lip->li_ail != &ailp->xa_ail)
67                         ASSERT(XFS_LSN_CMP(prev_lip->li_lsn, lip->li_lsn) <= 0);
68                 ASSERT((lip->li_flags & XFS_LI_IN_AIL) != 0);
69                 prev_lip = lip;
70         }
71 #endif /* XFS_TRANS_DEBUG */
72 }
73 #else /* !DEBUG */
74 #define xfs_ail_check(a,l)
75 #endif /* DEBUG */
76
77 /*
78  * Return a pointer to the first item in the AIL.  If the AIL is empty, then
79  * return NULL.
80  */
81 static xfs_log_item_t *
82 xfs_ail_min(
83         struct xfs_ail  *ailp)
84 {
85         if (list_empty(&ailp->xa_ail))
86                 return NULL;
87
88         return list_first_entry(&ailp->xa_ail, xfs_log_item_t, li_ail);
89 }
90
91  /*
92  * Return a pointer to the last item in the AIL.  If the AIL is empty, then
93  * return NULL.
94  */
95 static xfs_log_item_t *
96 xfs_ail_max(
97         struct xfs_ail  *ailp)
98 {
99         if (list_empty(&ailp->xa_ail))
100                 return NULL;
101
102         return list_entry(ailp->xa_ail.prev, xfs_log_item_t, li_ail);
103 }
104
105 /*
106  * Return a pointer to the item which follows the given item in the AIL.  If
107  * the given item is the last item in the list, then return NULL.
108  */
109 static xfs_log_item_t *
110 xfs_ail_next(
111         struct xfs_ail  *ailp,
112         xfs_log_item_t  *lip)
113 {
114         if (lip->li_ail.next == &ailp->xa_ail)
115                 return NULL;
116
117         return list_first_entry(&lip->li_ail, xfs_log_item_t, li_ail);
118 }
119
120 /*
121  * This is called by the log manager code to determine the LSN of the tail of
122  * the log.  This is exactly the LSN of the first item in the AIL.  If the AIL
123  * is empty, then this function returns 0.
124  *
125  * We need the AIL lock in order to get a coherent read of the lsn of the last
126  * item in the AIL.
127  */
128 xfs_lsn_t
129 xfs_ail_min_lsn(
130         struct xfs_ail  *ailp)
131 {
132         xfs_lsn_t       lsn = 0;
133         xfs_log_item_t  *lip;
134
135         spin_lock(&ailp->xa_lock);
136         lip = xfs_ail_min(ailp);
137         if (lip)
138                 lsn = lip->li_lsn;
139         spin_unlock(&ailp->xa_lock);
140
141         return lsn;
142 }
143
144 /*
145  * Return the maximum lsn held in the AIL, or zero if the AIL is empty.
146  */
147 static xfs_lsn_t
148 xfs_ail_max_lsn(
149         struct xfs_ail  *ailp)
150 {
151         xfs_lsn_t       lsn = 0;
152         xfs_log_item_t  *lip;
153
154         spin_lock(&ailp->xa_lock);
155         lip = xfs_ail_max(ailp);
156         if (lip)
157                 lsn = lip->li_lsn;
158         spin_unlock(&ailp->xa_lock);
159
160         return lsn;
161 }
162
163 /*
164  * The cursor keeps track of where our current traversal is up to by tracking
165  * the next item in the list for us. However, for this to be safe, removing an
166  * object from the AIL needs to invalidate any cursor that points to it. hence
167  * the traversal cursor needs to be linked to the struct xfs_ail so that
168  * deletion can search all the active cursors for invalidation.
169  */
170 STATIC void
171 xfs_trans_ail_cursor_init(
172         struct xfs_ail          *ailp,
173         struct xfs_ail_cursor   *cur)
174 {
175         cur->item = NULL;
176         list_add_tail(&cur->list, &ailp->xa_cursors);
177 }
178
179 /*
180  * Get the next item in the traversal and advance the cursor.  If the cursor
181  * was invalidated (indicated by a lip of 1), restart the traversal.
182  */
183 struct xfs_log_item *
184 xfs_trans_ail_cursor_next(
185         struct xfs_ail          *ailp,
186         struct xfs_ail_cursor   *cur)
187 {
188         struct xfs_log_item     *lip = cur->item;
189
190         if ((__psint_t)lip & 1)
191                 lip = xfs_ail_min(ailp);
192         if (lip)
193                 cur->item = xfs_ail_next(ailp, lip);
194         return lip;
195 }
196
197 /*
198  * When the traversal is complete, we need to remove the cursor from the list
199  * of traversing cursors.
200  */
201 void
202 xfs_trans_ail_cursor_done(
203         struct xfs_ail          *ailp,
204         struct xfs_ail_cursor   *cur)
205 {
206         cur->item = NULL;
207         list_del_init(&cur->list);
208 }
209
210 /*
211  * Invalidate any cursor that is pointing to this item. This is called when an
212  * item is removed from the AIL. Any cursor pointing to this object is now
213  * invalid and the traversal needs to be terminated so it doesn't reference a
214  * freed object. We set the low bit of the cursor item pointer so we can
215  * distinguish between an invalidation and the end of the list when getting the
216  * next item from the cursor.
217  */
218 STATIC void
219 xfs_trans_ail_cursor_clear(
220         struct xfs_ail          *ailp,
221         struct xfs_log_item     *lip)
222 {
223         struct xfs_ail_cursor   *cur;
224
225         list_for_each_entry(cur, &ailp->xa_cursors, list) {
226                 if (cur->item == lip)
227                         cur->item = (struct xfs_log_item *)
228                                         ((__psint_t)cur->item | 1);
229         }
230 }
231
232 /*
233  * Find the first item in the AIL with the given @lsn by searching in ascending
234  * LSN order and initialise the cursor to point to the next item for a
235  * ascending traversal.  Pass a @lsn of zero to initialise the cursor to the
236  * first item in the AIL. Returns NULL if the list is empty.
237  */
238 xfs_log_item_t *
239 xfs_trans_ail_cursor_first(
240         struct xfs_ail          *ailp,
241         struct xfs_ail_cursor   *cur,
242         xfs_lsn_t               lsn)
243 {
244         xfs_log_item_t          *lip;
245
246         xfs_trans_ail_cursor_init(ailp, cur);
247
248         if (lsn == 0) {
249                 lip = xfs_ail_min(ailp);
250                 goto out;
251         }
252
253         list_for_each_entry(lip, &ailp->xa_ail, li_ail) {
254                 if (XFS_LSN_CMP(lip->li_lsn, lsn) >= 0)
255                         goto out;
256         }
257         return NULL;
258
259 out:
260         if (lip)
261                 cur->item = xfs_ail_next(ailp, lip);
262         return lip;
263 }
264
265 static struct xfs_log_item *
266 __xfs_trans_ail_cursor_last(
267         struct xfs_ail          *ailp,
268         xfs_lsn_t               lsn)
269 {
270         xfs_log_item_t          *lip;
271
272         list_for_each_entry_reverse(lip, &ailp->xa_ail, li_ail) {
273                 if (XFS_LSN_CMP(lip->li_lsn, lsn) <= 0)
274                         return lip;
275         }
276         return NULL;
277 }
278
279 /*
280  * Find the last item in the AIL with the given @lsn by searching in descending
281  * LSN order and initialise the cursor to point to that item.  If there is no
282  * item with the value of @lsn, then it sets the cursor to the last item with an
283  * LSN lower than @lsn.  Returns NULL if the list is empty.
284  */
285 struct xfs_log_item *
286 xfs_trans_ail_cursor_last(
287         struct xfs_ail          *ailp,
288         struct xfs_ail_cursor   *cur,
289         xfs_lsn_t               lsn)
290 {
291         xfs_trans_ail_cursor_init(ailp, cur);
292         cur->item = __xfs_trans_ail_cursor_last(ailp, lsn);
293         return cur->item;
294 }
295
296 /*
297  * Splice the log item list into the AIL at the given LSN. We splice to the
298  * tail of the given LSN to maintain insert order for push traversals. The
299  * cursor is optional, allowing repeated updates to the same LSN to avoid
300  * repeated traversals.  This should not be called with an empty list.
301  */
302 static void
303 xfs_ail_splice(
304         struct xfs_ail          *ailp,
305         struct xfs_ail_cursor   *cur,
306         struct list_head        *list,
307         xfs_lsn_t               lsn)
308 {
309         struct xfs_log_item     *lip;
310
311         ASSERT(!list_empty(list));
312
313         /*
314          * Use the cursor to determine the insertion point if one is
315          * provided.  If not, or if the one we got is not valid,
316          * find the place in the AIL where the items belong.
317          */
318         lip = cur ? cur->item : NULL;
319         if (!lip || (__psint_t) lip & 1)
320                 lip = __xfs_trans_ail_cursor_last(ailp, lsn);
321
322         /*
323          * If a cursor is provided, we know we're processing the AIL
324          * in lsn order, and future items to be spliced in will
325          * follow the last one being inserted now.  Update the
326          * cursor to point to that last item, now while we have a
327          * reliable pointer to it.
328          */
329         if (cur)
330                 cur->item = list_entry(list->prev, struct xfs_log_item, li_ail);
331
332         /*
333          * Finally perform the splice.  Unless the AIL was empty,
334          * lip points to the item in the AIL _after_ which the new
335          * items should go.  If lip is null the AIL was empty, so
336          * the new items go at the head of the AIL.
337          */
338         if (lip)
339                 list_splice(list, &lip->li_ail);
340         else
341                 list_splice(list, &ailp->xa_ail);
342 }
343
344 /*
345  * Delete the given item from the AIL.  Return a pointer to the item.
346  */
347 static void
348 xfs_ail_delete(
349         struct xfs_ail  *ailp,
350         xfs_log_item_t  *lip)
351 {
352         xfs_ail_check(ailp, lip);
353         list_del(&lip->li_ail);
354         xfs_trans_ail_cursor_clear(ailp, lip);
355 }
356
357 static long
358 xfsaild_push(
359         struct xfs_ail          *ailp)
360 {
361         xfs_mount_t             *mp = ailp->xa_mount;
362         struct xfs_ail_cursor   cur;
363         xfs_log_item_t          *lip;
364         xfs_lsn_t               lsn;
365         xfs_lsn_t               target;
366         long                    tout = 10;
367         int                     stuck = 0;
368         int                     count = 0;
369         int                     push_xfsbufd = 0;
370
371         /*
372          * If last time we ran we encountered pinned items, force the log first
373          * and wait for it before pushing again.
374          */
375         spin_lock(&ailp->xa_lock);
376         if (ailp->xa_last_pushed_lsn == 0 && ailp->xa_log_flush &&
377             !list_empty(&ailp->xa_ail)) {
378                 ailp->xa_log_flush = 0;
379                 spin_unlock(&ailp->xa_lock);
380                 XFS_STATS_INC(xs_push_ail_flush);
381                 xfs_log_force(mp, XFS_LOG_SYNC);
382                 spin_lock(&ailp->xa_lock);
383         }
384
385         target = ailp->xa_target;
386         lip = xfs_trans_ail_cursor_first(ailp, &cur, ailp->xa_last_pushed_lsn);
387         if (!lip || XFS_FORCED_SHUTDOWN(mp)) {
388                 /*
389                  * AIL is empty or our push has reached the end.
390                  */
391                 xfs_trans_ail_cursor_done(ailp, &cur);
392                 spin_unlock(&ailp->xa_lock);
393                 goto out_done;
394         }
395
396         XFS_STATS_INC(xs_push_ail);
397
398         /*
399          * While the item we are looking at is below the given threshold
400          * try to flush it out. We'd like not to stop until we've at least
401          * tried to push on everything in the AIL with an LSN less than
402          * the given threshold.
403          *
404          * However, we will stop after a certain number of pushes and wait
405          * for a reduced timeout to fire before pushing further. This
406          * prevents use from spinning when we can't do anything or there is
407          * lots of contention on the AIL lists.
408          */
409         lsn = lip->li_lsn;
410         while ((XFS_LSN_CMP(lip->li_lsn, target) <= 0)) {
411                 int     lock_result;
412                 /*
413                  * If we can lock the item without sleeping, unlock the AIL
414                  * lock and flush the item.  Then re-grab the AIL lock so we
415                  * can look for the next item on the AIL. List changes are
416                  * handled by the AIL lookup functions internally
417                  *
418                  * If we can't lock the item, either its holder will flush it
419                  * or it is already being flushed or it is being relogged.  In
420                  * any of these case it is being taken care of and we can just
421                  * skip to the next item in the list.
422                  */
423                 lock_result = IOP_TRYLOCK(lip);
424                 spin_unlock(&ailp->xa_lock);
425                 switch (lock_result) {
426                 case XFS_ITEM_SUCCESS:
427                         XFS_STATS_INC(xs_push_ail_success);
428                         IOP_PUSH(lip);
429                         ailp->xa_last_pushed_lsn = lsn;
430                         break;
431
432                 case XFS_ITEM_PUSHBUF:
433                         XFS_STATS_INC(xs_push_ail_pushbuf);
434
435                         if (!IOP_PUSHBUF(lip)) {
436                                 stuck++;
437                                 flush_log = 1;
438                         } else {
439                                 ailp->xa_last_pushed_lsn = lsn;
440                         }
441                         push_xfsbufd = 1;
442                         break;
443
444                 case XFS_ITEM_PINNED:
445                         XFS_STATS_INC(xs_push_ail_pinned);
446                         stuck++;
447                         ailp->xa_log_flush++;
448                         break;
449
450                 case XFS_ITEM_LOCKED:
451                         XFS_STATS_INC(xs_push_ail_locked);
452                         stuck++;
453                         break;
454
455                 default:
456                         ASSERT(0);
457                         break;
458                 }
459
460                 spin_lock(&ailp->xa_lock);
461                 /* should we bother continuing? */
462                 if (XFS_FORCED_SHUTDOWN(mp))
463                         break;
464                 ASSERT(mp->m_log);
465
466                 count++;
467
468                 /*
469                  * Are there too many items we can't do anything with?
470                  * If we we are skipping too many items because we can't flush
471                  * them or they are already being flushed, we back off and
472                  * given them time to complete whatever operation is being
473                  * done. i.e. remove pressure from the AIL while we can't make
474                  * progress so traversals don't slow down further inserts and
475                  * removals to/from the AIL.
476                  *
477                  * The value of 100 is an arbitrary magic number based on
478                  * observation.
479                  */
480                 if (stuck > 100)
481                         break;
482
483                 lip = xfs_trans_ail_cursor_next(ailp, &cur);
484                 if (lip == NULL)
485                         break;
486                 lsn = lip->li_lsn;
487         }
488         xfs_trans_ail_cursor_done(ailp, &cur);
489         spin_unlock(&ailp->xa_lock);
490
491         if (push_xfsbufd) {
492                 /* we've got delayed write buffers to flush */
493                 wake_up_process(mp->m_ddev_targp->bt_task);
494         }
495
496         /* assume we have more work to do in a short while */
497 out_done:
498         if (!count) {
499                 /* We're past our target or empty, so idle */
500                 ailp->xa_last_pushed_lsn = 0;
501                 ailp->xa_log_flush = 0;
502
503                 tout = 50;
504         } else if (XFS_LSN_CMP(lsn, target) >= 0) {
505                 /*
506                  * We reached the target so wait a bit longer for I/O to
507                  * complete and remove pushed items from the AIL before we
508                  * start the next scan from the start of the AIL.
509                  */
510                 tout = 50;
511                 ailp->xa_last_pushed_lsn = 0;
512         } else if ((stuck * 100) / count > 90) {
513                 /*
514                  * Either there is a lot of contention on the AIL or we
515                  * are stuck due to operations in progress. "Stuck" in this
516                  * case is defined as >90% of the items we tried to push
517                  * were stuck.
518                  *
519                  * Backoff a bit more to allow some I/O to complete before
520                  * restarting from the start of the AIL. This prevents us
521                  * from spinning on the same items, and if they are pinned will
522                  * all the restart to issue a log force to unpin the stuck
523                  * items.
524                  */
525                 tout = 20;
526                 ailp->xa_last_pushed_lsn = 0;
527         }
528
529         return tout;
530 }
531
532 static int
533 xfsaild(
534         void            *data)
535 {
536         struct xfs_ail  *ailp = data;
537         long            tout = 0;       /* milliseconds */
538
539         while (!kthread_should_stop()) {
540                 if (tout && tout <= 20)
541                         __set_current_state(TASK_KILLABLE);
542                 else
543                         __set_current_state(TASK_INTERRUPTIBLE);
544                 schedule_timeout(tout ?
545                                  msecs_to_jiffies(tout) : MAX_SCHEDULE_TIMEOUT);
546
547                 try_to_freeze();
548
549                 tout = xfsaild_push(ailp);
550         }
551
552         return 0;
553 }
554
555 /*
556  * This routine is called to move the tail of the AIL forward.  It does this by
557  * trying to flush items in the AIL whose lsns are below the given
558  * threshold_lsn.
559  *
560  * The push is run asynchronously in a workqueue, which means the caller needs
561  * to handle waiting on the async flush for space to become available.
562  * We don't want to interrupt any push that is in progress, hence we only queue
563  * work if we set the pushing bit approriately.
564  *
565  * We do this unlocked - we only need to know whether there is anything in the
566  * AIL at the time we are called. We don't need to access the contents of
567  * any of the objects, so the lock is not needed.
568  */
569 void
570 xfs_ail_push(
571         struct xfs_ail  *ailp,
572         xfs_lsn_t       threshold_lsn)
573 {
574         xfs_log_item_t  *lip;
575
576         lip = xfs_ail_min(ailp);
577         if (!lip || XFS_FORCED_SHUTDOWN(ailp->xa_mount) ||
578             XFS_LSN_CMP(threshold_lsn, ailp->xa_target) <= 0)
579                 return;
580
581         /*
582          * Ensure that the new target is noticed in push code before it clears
583          * the XFS_AIL_PUSHING_BIT.
584          */
585         smp_wmb();
586         xfs_trans_ail_copy_lsn(ailp, &ailp->xa_target, &threshold_lsn);
587         smp_wmb();
588
589         wake_up_process(ailp->xa_task);
590 }
591
592 /*
593  * Push out all items in the AIL immediately
594  */
595 void
596 xfs_ail_push_all(
597         struct xfs_ail  *ailp)
598 {
599         xfs_lsn_t       threshold_lsn = xfs_ail_max_lsn(ailp);
600
601         if (threshold_lsn)
602                 xfs_ail_push(ailp, threshold_lsn);
603 }
604
605 /*
606  * This is to be called when an item is unlocked that may have
607  * been in the AIL.  It will wake up the first member of the AIL
608  * wait list if this item's unlocking might allow it to progress.
609  * If the item is in the AIL, then we need to get the AIL lock
610  * while doing our checking so we don't race with someone going
611  * to sleep waiting for this event in xfs_trans_push_ail().
612  */
613 void
614 xfs_trans_unlocked_item(
615         struct xfs_ail  *ailp,
616         xfs_log_item_t  *lip)
617 {
618         xfs_log_item_t  *min_lip;
619
620         /*
621          * If we're forcibly shutting down, we may have
622          * unlocked log items arbitrarily. The last thing
623          * we want to do is to move the tail of the log
624          * over some potentially valid data.
625          */
626         if (!(lip->li_flags & XFS_LI_IN_AIL) ||
627             XFS_FORCED_SHUTDOWN(ailp->xa_mount)) {
628                 return;
629         }
630
631         /*
632          * This is the one case where we can call into xfs_ail_min()
633          * without holding the AIL lock because we only care about the
634          * case where we are at the tail of the AIL.  If the object isn't
635          * at the tail, it doesn't matter what result we get back.  This
636          * is slightly racy because since we were just unlocked, we could
637          * go to sleep between the call to xfs_ail_min and the call to
638          * xfs_log_move_tail, have someone else lock us, commit to us disk,
639          * move us out of the tail of the AIL, and then we wake up.  However,
640          * the call to xfs_log_move_tail() doesn't do anything if there's
641          * not enough free space to wake people up so we're safe calling it.
642          */
643         min_lip = xfs_ail_min(ailp);
644
645         if (min_lip == lip)
646                 xfs_log_move_tail(ailp->xa_mount, 1);
647 }       /* xfs_trans_unlocked_item */
648
649 /*
650  * xfs_trans_ail_update - bulk AIL insertion operation.
651  *
652  * @xfs_trans_ail_update takes an array of log items that all need to be
653  * positioned at the same LSN in the AIL. If an item is not in the AIL, it will
654  * be added.  Otherwise, it will be repositioned  by removing it and re-adding
655  * it to the AIL. If we move the first item in the AIL, update the log tail to
656  * match the new minimum LSN in the AIL.
657  *
658  * This function takes the AIL lock once to execute the update operations on
659  * all the items in the array, and as such should not be called with the AIL
660  * lock held. As a result, once we have the AIL lock, we need to check each log
661  * item LSN to confirm it needs to be moved forward in the AIL.
662  *
663  * To optimise the insert operation, we delete all the items from the AIL in
664  * the first pass, moving them into a temporary list, then splice the temporary
665  * list into the correct position in the AIL. This avoids needing to do an
666  * insert operation on every item.
667  *
668  * This function must be called with the AIL lock held.  The lock is dropped
669  * before returning.
670  */
671 void
672 xfs_trans_ail_update_bulk(
673         struct xfs_ail          *ailp,
674         struct xfs_ail_cursor   *cur,
675         struct xfs_log_item     **log_items,
676         int                     nr_items,
677         xfs_lsn_t               lsn) __releases(ailp->xa_lock)
678 {
679         xfs_log_item_t          *mlip;
680         xfs_lsn_t               tail_lsn;
681         int                     mlip_changed = 0;
682         int                     i;
683         LIST_HEAD(tmp);
684
685         ASSERT(nr_items > 0);           /* Not required, but true. */
686         mlip = xfs_ail_min(ailp);
687
688         for (i = 0; i < nr_items; i++) {
689                 struct xfs_log_item *lip = log_items[i];
690                 if (lip->li_flags & XFS_LI_IN_AIL) {
691                         /* check if we really need to move the item */
692                         if (XFS_LSN_CMP(lsn, lip->li_lsn) <= 0)
693                                 continue;
694
695                         xfs_ail_delete(ailp, lip);
696                         if (mlip == lip)
697                                 mlip_changed = 1;
698                 } else {
699                         lip->li_flags |= XFS_LI_IN_AIL;
700                 }
701                 lip->li_lsn = lsn;
702                 list_add(&lip->li_ail, &tmp);
703         }
704
705         if (!list_empty(&tmp))
706                 xfs_ail_splice(ailp, cur, &tmp, lsn);
707
708         if (!mlip_changed) {
709                 spin_unlock(&ailp->xa_lock);
710                 return;
711         }
712
713         /*
714          * It is not safe to access mlip after the AIL lock is dropped, so we
715          * must get a copy of li_lsn before we do so.  This is especially
716          * important on 32-bit platforms where accessing and updating 64-bit
717          * values like li_lsn is not atomic.
718          */
719         mlip = xfs_ail_min(ailp);
720         tail_lsn = mlip->li_lsn;
721         spin_unlock(&ailp->xa_lock);
722         xfs_log_move_tail(ailp->xa_mount, tail_lsn);
723 }
724
725 /*
726  * xfs_trans_ail_delete_bulk - remove multiple log items from the AIL
727  *
728  * @xfs_trans_ail_delete_bulk takes an array of log items that all need to
729  * removed from the AIL. The caller is already holding the AIL lock, and done
730  * all the checks necessary to ensure the items passed in via @log_items are
731  * ready for deletion. This includes checking that the items are in the AIL.
732  *
733  * For each log item to be removed, unlink it  from the AIL, clear the IN_AIL
734  * flag from the item and reset the item's lsn to 0. If we remove the first
735  * item in the AIL, update the log tail to match the new minimum LSN in the
736  * AIL.
737  *
738  * This function will not drop the AIL lock until all items are removed from
739  * the AIL to minimise the amount of lock traffic on the AIL. This does not
740  * greatly increase the AIL hold time, but does significantly reduce the amount
741  * of traffic on the lock, especially during IO completion.
742  *
743  * This function must be called with the AIL lock held.  The lock is dropped
744  * before returning.
745  */
746 void
747 xfs_trans_ail_delete_bulk(
748         struct xfs_ail          *ailp,
749         struct xfs_log_item     **log_items,
750         int                     nr_items) __releases(ailp->xa_lock)
751 {
752         xfs_log_item_t          *mlip;
753         xfs_lsn_t               tail_lsn;
754         int                     mlip_changed = 0;
755         int                     i;
756
757         mlip = xfs_ail_min(ailp);
758
759         for (i = 0; i < nr_items; i++) {
760                 struct xfs_log_item *lip = log_items[i];
761                 if (!(lip->li_flags & XFS_LI_IN_AIL)) {
762                         struct xfs_mount        *mp = ailp->xa_mount;
763
764                         spin_unlock(&ailp->xa_lock);
765                         if (!XFS_FORCED_SHUTDOWN(mp)) {
766                                 xfs_alert_tag(mp, XFS_PTAG_AILDELETE,
767                 "%s: attempting to delete a log item that is not in the AIL",
768                                                 __func__);
769                                 xfs_force_shutdown(mp, SHUTDOWN_CORRUPT_INCORE);
770                         }
771                         return;
772                 }
773
774                 xfs_ail_delete(ailp, lip);
775                 lip->li_flags &= ~XFS_LI_IN_AIL;
776                 lip->li_lsn = 0;
777                 if (mlip == lip)
778                         mlip_changed = 1;
779         }
780
781         if (!mlip_changed) {
782                 spin_unlock(&ailp->xa_lock);
783                 return;
784         }
785
786         /*
787          * It is not safe to access mlip after the AIL lock is dropped, so we
788          * must get a copy of li_lsn before we do so.  This is especially
789          * important on 32-bit platforms where accessing and updating 64-bit
790          * values like li_lsn is not atomic. It is possible we've emptied the
791          * AIL here, so if that is the case, pass an LSN of 0 to the tail move.
792          */
793         mlip = xfs_ail_min(ailp);
794         tail_lsn = mlip ? mlip->li_lsn : 0;
795         spin_unlock(&ailp->xa_lock);
796         xfs_log_move_tail(ailp->xa_mount, tail_lsn);
797 }
798
799 /*
800  * The active item list (AIL) is a doubly linked list of log
801  * items sorted by ascending lsn.  The base of the list is
802  * a forw/back pointer pair embedded in the xfs mount structure.
803  * The base is initialized with both pointers pointing to the
804  * base.  This case always needs to be distinguished, because
805  * the base has no lsn to look at.  We almost always insert
806  * at the end of the list, so on inserts we search from the
807  * end of the list to find where the new item belongs.
808  */
809
810 /*
811  * Initialize the doubly linked list to point only to itself.
812  */
813 int
814 xfs_trans_ail_init(
815         xfs_mount_t     *mp)
816 {
817         struct xfs_ail  *ailp;
818
819         ailp = kmem_zalloc(sizeof(struct xfs_ail), KM_MAYFAIL);
820         if (!ailp)
821                 return ENOMEM;
822
823         ailp->xa_mount = mp;
824         INIT_LIST_HEAD(&ailp->xa_ail);
825         INIT_LIST_HEAD(&ailp->xa_cursors);
826         spin_lock_init(&ailp->xa_lock);
827
828         ailp->xa_task = kthread_run(xfsaild, ailp, "xfsaild/%s",
829                         ailp->xa_mount->m_fsname);
830         if (IS_ERR(ailp->xa_task))
831                 goto out_free_ailp;
832
833         mp->m_ail = ailp;
834         return 0;
835
836 out_free_ailp:
837         kmem_free(ailp);
838         return ENOMEM;
839 }
840
841 void
842 xfs_trans_ail_destroy(
843         xfs_mount_t     *mp)
844 {
845         struct xfs_ail  *ailp = mp->m_ail;
846
847         kthread_stop(ailp->xa_task);
848         kmem_free(ailp);
849 }