Lines Matching refs:ailp

37 	struct xfs_ail	*ailp,  in xfs_ail_check()  argument
42 if (list_empty(&ailp->xa_ail)) in xfs_ail_check()
50 if (&prev_lip->li_ail != &ailp->xa_ail) in xfs_ail_check()
54 if (&prev_lip->li_ail != &ailp->xa_ail) in xfs_ail_check()
69 struct xfs_ail *ailp) in xfs_ail_max() argument
71 if (list_empty(&ailp->xa_ail)) in xfs_ail_max()
74 return list_entry(ailp->xa_ail.prev, xfs_log_item_t, li_ail); in xfs_ail_max()
83 struct xfs_ail *ailp, in xfs_ail_next() argument
86 if (lip->li_ail.next == &ailp->xa_ail) in xfs_ail_next()
102 struct xfs_ail *ailp) in xfs_ail_min_lsn() argument
107 spin_lock(&ailp->xa_lock); in xfs_ail_min_lsn()
108 lip = xfs_ail_min(ailp); in xfs_ail_min_lsn()
111 spin_unlock(&ailp->xa_lock); in xfs_ail_min_lsn()
121 struct xfs_ail *ailp) in xfs_ail_max_lsn() argument
126 spin_lock(&ailp->xa_lock); in xfs_ail_max_lsn()
127 lip = xfs_ail_max(ailp); in xfs_ail_max_lsn()
130 spin_unlock(&ailp->xa_lock); in xfs_ail_max_lsn()
144 struct xfs_ail *ailp, in xfs_trans_ail_cursor_init() argument
148 list_add_tail(&cur->list, &ailp->xa_cursors); in xfs_trans_ail_cursor_init()
157 struct xfs_ail *ailp, in xfs_trans_ail_cursor_next() argument
163 lip = xfs_ail_min(ailp); in xfs_trans_ail_cursor_next()
165 cur->item = xfs_ail_next(ailp, lip); in xfs_trans_ail_cursor_next()
191 struct xfs_ail *ailp, in xfs_trans_ail_cursor_clear() argument
196 list_for_each_entry(cur, &ailp->xa_cursors, list) { in xfs_trans_ail_cursor_clear()
211 struct xfs_ail *ailp, in xfs_trans_ail_cursor_first() argument
217 xfs_trans_ail_cursor_init(ailp, cur); in xfs_trans_ail_cursor_first()
220 lip = xfs_ail_min(ailp); in xfs_trans_ail_cursor_first()
224 list_for_each_entry(lip, &ailp->xa_ail, li_ail) { in xfs_trans_ail_cursor_first()
232 cur->item = xfs_ail_next(ailp, lip); in xfs_trans_ail_cursor_first()
238 struct xfs_ail *ailp, in __xfs_trans_ail_cursor_last() argument
243 list_for_each_entry_reverse(lip, &ailp->xa_ail, li_ail) { in __xfs_trans_ail_cursor_last()
258 struct xfs_ail *ailp, in xfs_trans_ail_cursor_last() argument
262 xfs_trans_ail_cursor_init(ailp, cur); in xfs_trans_ail_cursor_last()
263 cur->item = __xfs_trans_ail_cursor_last(ailp, lsn); in xfs_trans_ail_cursor_last()
275 struct xfs_ail *ailp, in xfs_ail_splice() argument
291 lip = __xfs_trans_ail_cursor_last(ailp, lsn); in xfs_ail_splice()
312 list_splice(list, &ailp->xa_ail); in xfs_ail_splice()
320 struct xfs_ail *ailp, in xfs_ail_delete() argument
323 xfs_ail_check(ailp, lip); in xfs_ail_delete()
325 xfs_trans_ail_cursor_clear(ailp, lip); in xfs_ail_delete()
330 struct xfs_ail *ailp) in xfsaild_push() argument
332 xfs_mount_t *mp = ailp->xa_mount; in xfsaild_push()
347 if (ailp->xa_log_flush && ailp->xa_last_pushed_lsn == 0 && in xfsaild_push()
348 (!list_empty_careful(&ailp->xa_buf_list) || in xfsaild_push()
349 xfs_ail_min_lsn(ailp))) { in xfsaild_push()
350 ailp->xa_log_flush = 0; in xfsaild_push()
356 spin_lock(&ailp->xa_lock); in xfsaild_push()
360 target = ailp->xa_target; in xfsaild_push()
361 ailp->xa_target_prev = target; in xfsaild_push()
363 lip = xfs_trans_ail_cursor_first(ailp, &cur, ailp->xa_last_pushed_lsn); in xfsaild_push()
370 spin_unlock(&ailp->xa_lock); in xfsaild_push()
385 lock_result = lip->li_ops->iop_push(lip, &ailp->xa_buf_list); in xfsaild_push()
391 ailp->xa_last_pushed_lsn = lsn; in xfsaild_push()
410 ailp->xa_last_pushed_lsn = lsn; in xfsaild_push()
418 ailp->xa_log_flush++; in xfsaild_push()
449 lip = xfs_trans_ail_cursor_next(ailp, &cur); in xfsaild_push()
455 spin_unlock(&ailp->xa_lock); in xfsaild_push()
457 if (xfs_buf_delwri_submit_nowait(&ailp->xa_buf_list)) in xfsaild_push()
458 ailp->xa_log_flush++; in xfsaild_push()
468 ailp->xa_last_pushed_lsn = 0; in xfsaild_push()
481 ailp->xa_last_pushed_lsn = 0; in xfsaild_push()
496 struct xfs_ail *ailp = data; in xfsaild() local
507 spin_lock(&ailp->xa_lock); in xfsaild()
519 if (!xfs_ail_min(ailp) && in xfsaild()
520 ailp->xa_target == ailp->xa_target_prev) { in xfsaild()
521 spin_unlock(&ailp->xa_lock); in xfsaild()
526 spin_unlock(&ailp->xa_lock); in xfsaild()
535 tout = xfsaild_push(ailp); in xfsaild()
557 struct xfs_ail *ailp, in xfs_ail_push() argument
562 lip = xfs_ail_min(ailp); in xfs_ail_push()
563 if (!lip || XFS_FORCED_SHUTDOWN(ailp->xa_mount) || in xfs_ail_push()
564 XFS_LSN_CMP(threshold_lsn, ailp->xa_target) <= 0) in xfs_ail_push()
572 xfs_trans_ail_copy_lsn(ailp, &ailp->xa_target, &threshold_lsn); in xfs_ail_push()
575 wake_up_process(ailp->xa_task); in xfs_ail_push()
583 struct xfs_ail *ailp) in xfs_ail_push_all() argument
585 xfs_lsn_t threshold_lsn = xfs_ail_max_lsn(ailp); in xfs_ail_push_all()
588 xfs_ail_push(ailp, threshold_lsn); in xfs_ail_push_all()
596 struct xfs_ail *ailp) in xfs_ail_push_all_sync() argument
601 spin_lock(&ailp->xa_lock); in xfs_ail_push_all_sync()
602 while ((lip = xfs_ail_max(ailp)) != NULL) { in xfs_ail_push_all_sync()
603 prepare_to_wait(&ailp->xa_empty, &wait, TASK_UNINTERRUPTIBLE); in xfs_ail_push_all_sync()
604 ailp->xa_target = lip->li_lsn; in xfs_ail_push_all_sync()
605 wake_up_process(ailp->xa_task); in xfs_ail_push_all_sync()
606 spin_unlock(&ailp->xa_lock); in xfs_ail_push_all_sync()
608 spin_lock(&ailp->xa_lock); in xfs_ail_push_all_sync()
610 spin_unlock(&ailp->xa_lock); in xfs_ail_push_all_sync()
612 finish_wait(&ailp->xa_empty, &wait); in xfs_ail_push_all_sync()
639 struct xfs_ail *ailp, in xfs_trans_ail_update_bulk() argument
643 xfs_lsn_t lsn) __releases(ailp->xa_lock) in xfs_trans_ail_update_bulk()
651 mlip = xfs_ail_min(ailp); in xfs_trans_ail_update_bulk()
661 xfs_ail_delete(ailp, lip); in xfs_trans_ail_update_bulk()
673 xfs_ail_splice(ailp, cur, &tmp, lsn); in xfs_trans_ail_update_bulk()
676 if (!XFS_FORCED_SHUTDOWN(ailp->xa_mount)) in xfs_trans_ail_update_bulk()
677 xlog_assign_tail_lsn_locked(ailp->xa_mount); in xfs_trans_ail_update_bulk()
678 spin_unlock(&ailp->xa_lock); in xfs_trans_ail_update_bulk()
680 xfs_log_space_wake(ailp->xa_mount); in xfs_trans_ail_update_bulk()
682 spin_unlock(&ailp->xa_lock); in xfs_trans_ail_update_bulk()
709 struct xfs_ail *ailp, in xfs_trans_ail_delete_bulk() argument
712 int shutdown_type) __releases(ailp->xa_lock) in xfs_trans_ail_delete_bulk()
718 mlip = xfs_ail_min(ailp); in xfs_trans_ail_delete_bulk()
723 struct xfs_mount *mp = ailp->xa_mount; in xfs_trans_ail_delete_bulk()
725 spin_unlock(&ailp->xa_lock); in xfs_trans_ail_delete_bulk()
736 xfs_ail_delete(ailp, lip); in xfs_trans_ail_delete_bulk()
744 if (!XFS_FORCED_SHUTDOWN(ailp->xa_mount)) in xfs_trans_ail_delete_bulk()
745 xlog_assign_tail_lsn_locked(ailp->xa_mount); in xfs_trans_ail_delete_bulk()
746 if (list_empty(&ailp->xa_ail)) in xfs_trans_ail_delete_bulk()
747 wake_up_all(&ailp->xa_empty); in xfs_trans_ail_delete_bulk()
748 spin_unlock(&ailp->xa_lock); in xfs_trans_ail_delete_bulk()
750 xfs_log_space_wake(ailp->xa_mount); in xfs_trans_ail_delete_bulk()
752 spin_unlock(&ailp->xa_lock); in xfs_trans_ail_delete_bulk()
760 struct xfs_ail *ailp; in xfs_trans_ail_init() local
762 ailp = kmem_zalloc(sizeof(struct xfs_ail), KM_MAYFAIL); in xfs_trans_ail_init()
763 if (!ailp) in xfs_trans_ail_init()
766 ailp->xa_mount = mp; in xfs_trans_ail_init()
767 INIT_LIST_HEAD(&ailp->xa_ail); in xfs_trans_ail_init()
768 INIT_LIST_HEAD(&ailp->xa_cursors); in xfs_trans_ail_init()
769 spin_lock_init(&ailp->xa_lock); in xfs_trans_ail_init()
770 INIT_LIST_HEAD(&ailp->xa_buf_list); in xfs_trans_ail_init()
771 init_waitqueue_head(&ailp->xa_empty); in xfs_trans_ail_init()
773 ailp->xa_task = kthread_run(xfsaild, ailp, "xfsaild/%s", in xfs_trans_ail_init()
774 ailp->xa_mount->m_fsname); in xfs_trans_ail_init()
775 if (IS_ERR(ailp->xa_task)) in xfs_trans_ail_init()
778 mp->m_ail = ailp; in xfs_trans_ail_init()
782 kmem_free(ailp); in xfs_trans_ail_init()
790 struct xfs_ail *ailp = mp->m_ail; in xfs_trans_ail_destroy() local
792 kthread_stop(ailp->xa_task); in xfs_trans_ail_destroy()
793 kmem_free(ailp); in xfs_trans_ail_destroy()