Lines Matching refs:ailp

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