Lines Matching refs:ailp

34 	struct xfs_ail		*ailp,  in xfs_ail_check()  argument
36 __must_hold(&ailp->ail_lock) in xfs_ail_check()
46 if (list_empty(&ailp->ail_head)) in xfs_ail_check()
54 if (&prev_lip->li_ail != &ailp->ail_head) in xfs_ail_check()
57 if (&next_lip->li_ail != &ailp->ail_head) in xfs_ail_check()
66 spin_unlock(&ailp->ail_lock); in xfs_ail_check()
70 spin_lock(&ailp->ail_lock); in xfs_ail_check()
82 struct xfs_ail *ailp) in xfs_ail_max() argument
84 if (list_empty(&ailp->ail_head)) in xfs_ail_max()
87 return list_entry(ailp->ail_head.prev, struct xfs_log_item, li_ail); in xfs_ail_max()
96 struct xfs_ail *ailp, in xfs_ail_next() argument
99 if (lip->li_ail.next == &ailp->ail_head) in xfs_ail_next()
115 struct xfs_ail *ailp) in __xfs_ail_min_lsn() argument
117 struct xfs_log_item *lip = xfs_ail_min(ailp); in __xfs_ail_min_lsn()
126 struct xfs_ail *ailp) in xfs_ail_min_lsn() argument
130 spin_lock(&ailp->ail_lock); in xfs_ail_min_lsn()
131 lsn = __xfs_ail_min_lsn(ailp); in xfs_ail_min_lsn()
132 spin_unlock(&ailp->ail_lock); in xfs_ail_min_lsn()
142 struct xfs_ail *ailp) in xfs_ail_max_lsn() argument
147 spin_lock(&ailp->ail_lock); in xfs_ail_max_lsn()
148 lip = xfs_ail_max(ailp); in xfs_ail_max_lsn()
151 spin_unlock(&ailp->ail_lock); in xfs_ail_max_lsn()
165 struct xfs_ail *ailp, in xfs_trans_ail_cursor_init() argument
169 list_add_tail(&cur->list, &ailp->ail_cursors); in xfs_trans_ail_cursor_init()
178 struct xfs_ail *ailp, in xfs_trans_ail_cursor_next() argument
184 lip = xfs_ail_min(ailp); in xfs_trans_ail_cursor_next()
186 cur->item = xfs_ail_next(ailp, lip); in xfs_trans_ail_cursor_next()
212 struct xfs_ail *ailp, in xfs_trans_ail_cursor_clear() argument
217 list_for_each_entry(cur, &ailp->ail_cursors, list) { in xfs_trans_ail_cursor_clear()
232 struct xfs_ail *ailp, in xfs_trans_ail_cursor_first() argument
238 xfs_trans_ail_cursor_init(ailp, cur); in xfs_trans_ail_cursor_first()
241 lip = xfs_ail_min(ailp); in xfs_trans_ail_cursor_first()
245 list_for_each_entry(lip, &ailp->ail_head, li_ail) { in xfs_trans_ail_cursor_first()
253 cur->item = xfs_ail_next(ailp, lip); in xfs_trans_ail_cursor_first()
259 struct xfs_ail *ailp, in __xfs_trans_ail_cursor_last() argument
264 list_for_each_entry_reverse(lip, &ailp->ail_head, li_ail) { in __xfs_trans_ail_cursor_last()
279 struct xfs_ail *ailp, in xfs_trans_ail_cursor_last() argument
283 xfs_trans_ail_cursor_init(ailp, cur); in xfs_trans_ail_cursor_last()
284 cur->item = __xfs_trans_ail_cursor_last(ailp, lsn); in xfs_trans_ail_cursor_last()
296 struct xfs_ail *ailp, in xfs_ail_splice() argument
312 lip = __xfs_trans_ail_cursor_last(ailp, lsn); in xfs_ail_splice()
333 list_splice(list, &ailp->ail_head); in xfs_ail_splice()
341 struct xfs_ail *ailp, in xfs_ail_delete() argument
344 xfs_ail_check(ailp, lip); in xfs_ail_delete()
346 xfs_trans_ail_cursor_clear(ailp, lip); in xfs_ail_delete()
394 struct xfs_ail *ailp, in xfsaild_push_item() argument
401 if (XFS_TEST_ERROR(false, ailp->ail_log->l_mp, XFS_ERRTAG_LOG_ITEM_PIN)) in xfsaild_push_item()
413 return xfsaild_resubmit_item(lip, &ailp->ail_buf_list); in xfsaild_push_item()
414 return lip->li_ops->iop_push(lip, &ailp->ail_buf_list); in xfsaild_push_item()
419 struct xfs_ail *ailp) in xfsaild_push() argument
421 struct xfs_mount *mp = ailp->ail_log->l_mp; in xfsaild_push()
440 if (ailp->ail_log_flush && ailp->ail_last_pushed_lsn == 0 && in xfsaild_push()
441 (!list_empty_careful(&ailp->ail_buf_list) || in xfsaild_push()
442 xfs_ail_min_lsn(ailp))) { in xfsaild_push()
443 ailp->ail_log_flush = 0; in xfsaild_push()
446 xlog_cil_flush(ailp->ail_log); in xfsaild_push()
449 spin_lock(&ailp->ail_lock); in xfsaild_push()
457 if (waitqueue_active(&ailp->ail_empty)) { in xfsaild_push()
458 lip = xfs_ail_max(ailp); in xfsaild_push()
464 target = ailp->ail_target; in xfsaild_push()
465 ailp->ail_target_prev = target; in xfsaild_push()
469 lip = xfs_trans_ail_cursor_first(ailp, &cur, ailp->ail_last_pushed_lsn); in xfsaild_push()
486 lock_result = xfsaild_push_item(ailp, lip); in xfsaild_push()
492 ailp->ail_last_pushed_lsn = lsn; in xfsaild_push()
511 ailp->ail_last_pushed_lsn = lsn; in xfsaild_push()
519 ailp->ail_log_flush++; in xfsaild_push()
550 lip = xfs_trans_ail_cursor_next(ailp, &cur); in xfsaild_push()
558 spin_unlock(&ailp->ail_lock); in xfsaild_push()
560 if (xfs_buf_delwri_submit_nowait(&ailp->ail_buf_list)) in xfsaild_push()
561 ailp->ail_log_flush++; in xfsaild_push()
570 ailp->ail_last_pushed_lsn = 0; in xfsaild_push()
583 ailp->ail_last_pushed_lsn = 0; in xfsaild_push()
598 struct xfs_ail *ailp = data; in xfsaild() local
636 ASSERT(list_empty(&ailp->ail_buf_list) || in xfsaild()
637 xlog_is_shutdown(ailp->ail_log)); in xfsaild()
638 xfs_buf_delwri_cancel(&ailp->ail_buf_list); in xfsaild()
642 spin_lock(&ailp->ail_lock); in xfsaild()
654 if (!xfs_ail_min(ailp) && in xfsaild()
655 ailp->ail_target == ailp->ail_target_prev && in xfsaild()
656 list_empty(&ailp->ail_buf_list)) { in xfsaild()
657 spin_unlock(&ailp->ail_lock); in xfsaild()
662 spin_unlock(&ailp->ail_lock); in xfsaild()
671 tout = xfsaild_push(ailp); in xfsaild()
694 struct xfs_ail *ailp, in xfs_ail_push() argument
699 lip = xfs_ail_min(ailp); in xfs_ail_push()
700 if (!lip || xlog_is_shutdown(ailp->ail_log) || in xfs_ail_push()
701 XFS_LSN_CMP(threshold_lsn, ailp->ail_target) <= 0) in xfs_ail_push()
709 xfs_trans_ail_copy_lsn(ailp, &ailp->ail_target, &threshold_lsn); in xfs_ail_push()
712 wake_up_process(ailp->ail_task); in xfs_ail_push()
720 struct xfs_ail *ailp) in xfs_ail_push_all() argument
722 xfs_lsn_t threshold_lsn = xfs_ail_max_lsn(ailp); in xfs_ail_push_all()
725 xfs_ail_push(ailp, threshold_lsn); in xfs_ail_push_all()
733 struct xfs_ail *ailp) in xfs_ail_push_all_sync() argument
737 spin_lock(&ailp->ail_lock); in xfs_ail_push_all_sync()
738 while (xfs_ail_max(ailp) != NULL) { in xfs_ail_push_all_sync()
739 prepare_to_wait(&ailp->ail_empty, &wait, TASK_UNINTERRUPTIBLE); in xfs_ail_push_all_sync()
740 wake_up_process(ailp->ail_task); in xfs_ail_push_all_sync()
741 spin_unlock(&ailp->ail_lock); in xfs_ail_push_all_sync()
743 spin_lock(&ailp->ail_lock); in xfs_ail_push_all_sync()
745 spin_unlock(&ailp->ail_lock); in xfs_ail_push_all_sync()
747 finish_wait(&ailp->ail_empty, &wait); in xfs_ail_push_all_sync()
752 struct xfs_ail *ailp, in xfs_ail_update_finish() argument
753 xfs_lsn_t old_lsn) __releases(ailp->ail_lock) in xfs_ail_update_finish()
755 struct xlog *log = ailp->ail_log; in xfs_ail_update_finish()
758 if (!old_lsn || old_lsn == __xfs_ail_min_lsn(ailp)) { in xfs_ail_update_finish()
759 spin_unlock(&ailp->ail_lock); in xfs_ail_update_finish()
766 if (list_empty(&ailp->ail_head)) in xfs_ail_update_finish()
767 wake_up_all(&ailp->ail_empty); in xfs_ail_update_finish()
768 spin_unlock(&ailp->ail_lock); in xfs_ail_update_finish()
796 struct xfs_ail *ailp, in xfs_trans_ail_update_bulk() argument
800 xfs_lsn_t lsn) __releases(ailp->ail_lock) in xfs_trans_ail_update_bulk()
808 mlip = xfs_ail_min(ailp); in xfs_trans_ail_update_bulk()
821 xfs_ail_delete(ailp, lip); in xfs_trans_ail_update_bulk()
830 xfs_ail_splice(ailp, cur, &tmp, lsn); in xfs_trans_ail_update_bulk()
832 xfs_ail_update_finish(ailp, tail_lsn); in xfs_trans_ail_update_bulk()
838 struct xfs_ail *ailp, in xfs_trans_ail_insert() argument
842 spin_lock(&ailp->ail_lock); in xfs_trans_ail_insert()
843 xfs_trans_ail_update_bulk(ailp, NULL, &lip, 1, lsn); in xfs_trans_ail_insert()
855 struct xfs_ail *ailp, in xfs_ail_delete_one() argument
858 struct xfs_log_item *mlip = xfs_ail_min(ailp); in xfs_ail_delete_one()
862 xfs_ail_delete(ailp, lip); in xfs_ail_delete_one()
876 struct xfs_ail *ailp = lip->li_ailp; in xfs_trans_ail_delete() local
877 struct xlog *log = ailp->ail_log; in xfs_trans_ail_delete()
880 spin_lock(&ailp->ail_lock); in xfs_trans_ail_delete()
882 spin_unlock(&ailp->ail_lock); in xfs_trans_ail_delete()
894 tail_lsn = xfs_ail_delete_one(ailp, lip); in xfs_trans_ail_delete()
895 xfs_ail_update_finish(ailp, tail_lsn); in xfs_trans_ail_delete()
902 struct xfs_ail *ailp; in xfs_trans_ail_init() local
904 ailp = kmem_zalloc(sizeof(struct xfs_ail), KM_MAYFAIL); in xfs_trans_ail_init()
905 if (!ailp) in xfs_trans_ail_init()
908 ailp->ail_log = mp->m_log; in xfs_trans_ail_init()
909 INIT_LIST_HEAD(&ailp->ail_head); in xfs_trans_ail_init()
910 INIT_LIST_HEAD(&ailp->ail_cursors); in xfs_trans_ail_init()
911 spin_lock_init(&ailp->ail_lock); in xfs_trans_ail_init()
912 INIT_LIST_HEAD(&ailp->ail_buf_list); in xfs_trans_ail_init()
913 init_waitqueue_head(&ailp->ail_empty); in xfs_trans_ail_init()
915 ailp->ail_task = kthread_run(xfsaild, ailp, "xfsaild/%s", in xfs_trans_ail_init()
917 if (IS_ERR(ailp->ail_task)) in xfs_trans_ail_init()
920 mp->m_ail = ailp; in xfs_trans_ail_init()
924 kmem_free(ailp); in xfs_trans_ail_init()
932 struct xfs_ail *ailp = mp->m_ail; in xfs_trans_ail_destroy() local
934 kthread_stop(ailp->ail_task); in xfs_trans_ail_destroy()
935 kmem_free(ailp); in xfs_trans_ail_destroy()