• Home
  • Raw
  • Download

Lines Matching refs:ailp

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