Lines Matching refs:ailp

33 	struct xfs_ail		*ailp,
35 __must_hold(&ailp->ail_lock)
45 if (list_empty(&ailp->ail_head))
53 if (&prev_lip->li_ail != &ailp->ail_head)
56 if (&next_lip->li_ail != &ailp->ail_head)
65 spin_unlock(&ailp->ail_lock);
69 spin_lock(&ailp->ail_lock);
81 struct xfs_ail *ailp)
83 if (list_empty(&ailp->ail_head))
86 return list_entry(ailp->ail_head.prev, struct xfs_log_item, li_ail);
95 struct xfs_ail *ailp,
98 if (lip->li_ail.next == &ailp->ail_head)
114 struct xfs_ail *ailp)
116 struct xfs_log_item *lip = xfs_ail_min(ailp);
125 struct xfs_ail *ailp)
129 spin_lock(&ailp->ail_lock);
130 lsn = __xfs_ail_min_lsn(ailp);
131 spin_unlock(&ailp->ail_lock);
141 struct xfs_ail *ailp)
146 spin_lock(&ailp->ail_lock);
147 lip = xfs_ail_max(ailp);
150 spin_unlock(&ailp->ail_lock);
164 struct xfs_ail *ailp,
168 list_add_tail(&cur->list, &ailp->ail_cursors);
177 struct xfs_ail *ailp,
183 lip = xfs_ail_min(ailp);
185 cur->item = xfs_ail_next(ailp, lip);
211 struct xfs_ail *ailp,
216 list_for_each_entry(cur, &ailp->ail_cursors, list) {
231 struct xfs_ail *ailp,
237 xfs_trans_ail_cursor_init(ailp, cur);
240 lip = xfs_ail_min(ailp);
244 list_for_each_entry(lip, &ailp->ail_head, li_ail) {
252 cur->item = xfs_ail_next(ailp, lip);
258 struct xfs_ail *ailp,
263 list_for_each_entry_reverse(lip, &ailp->ail_head, li_ail) {
278 struct xfs_ail *ailp,
282 xfs_trans_ail_cursor_init(ailp, cur);
283 cur->item = __xfs_trans_ail_cursor_last(ailp, lsn);
295 struct xfs_ail *ailp,
311 lip = __xfs_trans_ail_cursor_last(ailp, lsn);
332 list_splice(list, &ailp->ail_head);
340 struct xfs_ail *ailp,
343 xfs_ail_check(ailp, lip);
345 xfs_trans_ail_cursor_clear(ailp, lip);
393 struct xfs_ail *ailp,
400 if (XFS_TEST_ERROR(false, ailp->ail_mount, XFS_ERRTAG_LOG_ITEM_PIN))
412 return xfsaild_resubmit_item(lip, &ailp->ail_buf_list);
413 return lip->li_ops->iop_push(lip, &ailp->ail_buf_list);
418 struct xfs_ail *ailp)
420 xfs_mount_t *mp = ailp->ail_mount;
435 if (ailp->ail_log_flush && ailp->ail_last_pushed_lsn == 0 &&
436 (!list_empty_careful(&ailp->ail_buf_list) ||
437 xfs_ail_min_lsn(ailp))) {
438 ailp->ail_log_flush = 0;
444 spin_lock(&ailp->ail_lock);
448 target = ailp->ail_target;
449 ailp->ail_target_prev = target;
452 lip = xfs_trans_ail_cursor_first(ailp, &cur, ailp->ail_last_pushed_lsn);
467 lock_result = xfsaild_push_item(ailp, lip);
473 ailp->ail_last_pushed_lsn = lsn;
492 ailp->ail_last_pushed_lsn = lsn;
500 ailp->ail_log_flush++;
531 lip = xfs_trans_ail_cursor_next(ailp, &cur);
539 spin_unlock(&ailp->ail_lock);
541 if (xfs_buf_delwri_submit_nowait(&ailp->ail_buf_list))
542 ailp->ail_log_flush++;
551 ailp->ail_last_pushed_lsn = 0;
564 ailp->ail_last_pushed_lsn = 0;
579 struct xfs_ail *ailp = data;
617 ASSERT(list_empty(&ailp->ail_buf_list) ||
618 XFS_FORCED_SHUTDOWN(ailp->ail_mount));
619 xfs_buf_delwri_cancel(&ailp->ail_buf_list);
623 spin_lock(&ailp->ail_lock);
635 if (!xfs_ail_min(ailp) &&
636 ailp->ail_target == ailp->ail_target_prev &&
637 list_empty(&ailp->ail_buf_list)) {
638 spin_unlock(&ailp->ail_lock);
643 spin_unlock(&ailp->ail_lock);
652 tout = xfsaild_push(ailp);
675 struct xfs_ail *ailp,
680 lip = xfs_ail_min(ailp);
681 if (!lip || XFS_FORCED_SHUTDOWN(ailp->ail_mount) ||
682 XFS_LSN_CMP(threshold_lsn, ailp->ail_target) <= 0)
690 xfs_trans_ail_copy_lsn(ailp, &ailp->ail_target, &threshold_lsn);
693 wake_up_process(ailp->ail_task);
701 struct xfs_ail *ailp)
703 xfs_lsn_t threshold_lsn = xfs_ail_max_lsn(ailp);
706 xfs_ail_push(ailp, threshold_lsn);
714 struct xfs_ail *ailp)
719 spin_lock(&ailp->ail_lock);
720 while ((lip = xfs_ail_max(ailp)) != NULL) {
721 prepare_to_wait(&ailp->ail_empty, &wait, TASK_UNINTERRUPTIBLE);
722 ailp->ail_target = lip->li_lsn;
723 wake_up_process(ailp->ail_task);
724 spin_unlock(&ailp->ail_lock);
726 spin_lock(&ailp->ail_lock);
728 spin_unlock(&ailp->ail_lock);
730 finish_wait(&ailp->ail_empty, &wait);
735 struct xfs_ail *ailp,
736 xfs_lsn_t old_lsn) __releases(ailp->ail_lock)
738 struct xfs_mount *mp = ailp->ail_mount;
741 if (!old_lsn || old_lsn == __xfs_ail_min_lsn(ailp)) {
742 spin_unlock(&ailp->ail_lock);
749 if (list_empty(&ailp->ail_head))
750 wake_up_all(&ailp->ail_empty);
751 spin_unlock(&ailp->ail_lock);
779 struct xfs_ail *ailp,
783 xfs_lsn_t lsn) __releases(ailp->ail_lock)
791 mlip = xfs_ail_min(ailp);
804 xfs_ail_delete(ailp, lip);
813 xfs_ail_splice(ailp, cur, &tmp, lsn);
815 xfs_ail_update_finish(ailp, tail_lsn);
821 struct xfs_ail *ailp,
825 spin_lock(&ailp->ail_lock);
826 xfs_trans_ail_update_bulk(ailp, NULL, &lip, 1, lsn);
838 struct xfs_ail *ailp,
841 struct xfs_log_item *mlip = xfs_ail_min(ailp);
845 xfs_ail_delete(ailp, lip);
859 struct xfs_ail *ailp = lip->li_ailp;
860 struct xfs_mount *mp = ailp->ail_mount;
863 spin_lock(&ailp->ail_lock);
865 spin_unlock(&ailp->ail_lock);
877 tail_lsn = xfs_ail_delete_one(ailp, lip);
878 xfs_ail_update_finish(ailp, tail_lsn);
885 struct xfs_ail *ailp;
887 ailp = kmem_zalloc(sizeof(struct xfs_ail), KM_MAYFAIL);
888 if (!ailp)
891 ailp->ail_mount = mp;
892 INIT_LIST_HEAD(&ailp->ail_head);
893 INIT_LIST_HEAD(&ailp->ail_cursors);
894 spin_lock_init(&ailp->ail_lock);
895 INIT_LIST_HEAD(&ailp->ail_buf_list);
896 init_waitqueue_head(&ailp->ail_empty);
898 ailp->ail_task = kthread_run(xfsaild, ailp, "xfsaild/%s",
899 ailp->ail_mount->m_super->s_id);
900 if (IS_ERR(ailp->ail_task))
903 mp->m_ail = ailp;
907 kmem_free(ailp);
915 struct xfs_ail *ailp = mp->m_ail;
917 kthread_stop(ailp->ail_task);
918 kmem_free(ailp);