diff options
Diffstat (limited to 'fs/xfs/linux-2.6')
-rw-r--r-- | fs/xfs/linux-2.6/xfs_buf.c | 15 | ||||
-rw-r--r-- | fs/xfs/linux-2.6/xfs_buf.h | 4 |
2 files changed, 9 insertions, 10 deletions
diff --git a/fs/xfs/linux-2.6/xfs_buf.c b/fs/xfs/linux-2.6/xfs_buf.c index 946b00bf3841..168eecd8127e 100644 --- a/fs/xfs/linux-2.6/xfs_buf.c +++ b/fs/xfs/linux-2.6/xfs_buf.c | |||
@@ -1687,14 +1687,15 @@ STATIC int | |||
1687 | xfs_buf_delwri_split( | 1687 | xfs_buf_delwri_split( |
1688 | xfs_buftarg_t *target, | 1688 | xfs_buftarg_t *target, |
1689 | struct list_head *list, | 1689 | struct list_head *list, |
1690 | unsigned long age, | 1690 | unsigned long age) |
1691 | int flags) | ||
1692 | { | 1691 | { |
1693 | xfs_buf_t *bp, *n; | 1692 | xfs_buf_t *bp, *n; |
1694 | struct list_head *dwq = &target->bt_delwrite_queue; | 1693 | struct list_head *dwq = &target->bt_delwrite_queue; |
1695 | spinlock_t *dwlk = &target->bt_delwrite_lock; | 1694 | spinlock_t *dwlk = &target->bt_delwrite_lock; |
1696 | int skipped = 0; | 1695 | int skipped = 0; |
1696 | int force; | ||
1697 | 1697 | ||
1698 | force = test_and_clear_bit(XBT_FORCE_FLUSH, &target->bt_flags); | ||
1698 | INIT_LIST_HEAD(list); | 1699 | INIT_LIST_HEAD(list); |
1699 | spin_lock(dwlk); | 1700 | spin_lock(dwlk); |
1700 | list_for_each_entry_safe(bp, n, dwq, b_list) { | 1701 | list_for_each_entry_safe(bp, n, dwq, b_list) { |
@@ -1702,7 +1703,7 @@ xfs_buf_delwri_split( | |||
1702 | ASSERT(bp->b_flags & XBF_DELWRI); | 1703 | ASSERT(bp->b_flags & XBF_DELWRI); |
1703 | 1704 | ||
1704 | if (!xfs_buf_ispin(bp) && !xfs_buf_cond_lock(bp)) { | 1705 | if (!xfs_buf_ispin(bp) && !xfs_buf_cond_lock(bp)) { |
1705 | if (!(flags & XBT_FORCE_FLUSH) && | 1706 | if (!force && |
1706 | time_before(jiffies, bp->b_queuetime + age)) { | 1707 | time_before(jiffies, bp->b_queuetime + age)) { |
1707 | xfs_buf_unlock(bp); | 1708 | xfs_buf_unlock(bp); |
1708 | break; | 1709 | break; |
@@ -1744,9 +1745,7 @@ xfsbufd( | |||
1744 | xfs_buf_timer_centisecs * msecs_to_jiffies(10)); | 1745 | xfs_buf_timer_centisecs * msecs_to_jiffies(10)); |
1745 | 1746 | ||
1746 | xfs_buf_delwri_split(target, &tmp, | 1747 | xfs_buf_delwri_split(target, &tmp, |
1747 | xfs_buf_age_centisecs * msecs_to_jiffies(10), | 1748 | xfs_buf_age_centisecs * msecs_to_jiffies(10)); |
1748 | test_bit(XBT_FORCE_FLUSH, &target->bt_flags) | ||
1749 | ? XBT_FORCE_FLUSH : 0); | ||
1750 | 1749 | ||
1751 | count = 0; | 1750 | count = 0; |
1752 | while (!list_empty(&tmp)) { | 1751 | while (!list_empty(&tmp)) { |
@@ -1763,7 +1762,6 @@ xfsbufd( | |||
1763 | if (count) | 1762 | if (count) |
1764 | blk_run_address_space(target->bt_mapping); | 1763 | blk_run_address_space(target->bt_mapping); |
1765 | 1764 | ||
1766 | clear_bit(XBT_FORCE_FLUSH, &target->bt_flags); | ||
1767 | } while (!kthread_should_stop()); | 1765 | } while (!kthread_should_stop()); |
1768 | 1766 | ||
1769 | return 0; | 1767 | return 0; |
@@ -1786,7 +1784,8 @@ xfs_flush_buftarg( | |||
1786 | xfs_buf_runall_queues(xfsdatad_workqueue); | 1784 | xfs_buf_runall_queues(xfsdatad_workqueue); |
1787 | xfs_buf_runall_queues(xfslogd_workqueue); | 1785 | xfs_buf_runall_queues(xfslogd_workqueue); |
1788 | 1786 | ||
1789 | pincount = xfs_buf_delwri_split(target, &tmp, 0, XBT_FORCE_FLUSH); | 1787 | set_bit(XBT_FORCE_FLUSH, &target->bt_flags); |
1788 | pincount = xfs_buf_delwri_split(target, &tmp, 0); | ||
1790 | 1789 | ||
1791 | /* | 1790 | /* |
1792 | * Dropped the delayed write list lock, now walk the temporary list | 1791 | * Dropped the delayed write list lock, now walk the temporary list |
diff --git a/fs/xfs/linux-2.6/xfs_buf.h b/fs/xfs/linux-2.6/xfs_buf.h index 9dd235cb0107..9e8ef8fef39f 100644 --- a/fs/xfs/linux-2.6/xfs_buf.h +++ b/fs/xfs/linux-2.6/xfs_buf.h | |||
@@ -69,8 +69,8 @@ typedef enum { | |||
69 | } xfs_buf_flags_t; | 69 | } xfs_buf_flags_t; |
70 | 70 | ||
71 | typedef enum { | 71 | typedef enum { |
72 | XBT_FORCE_SLEEP = (0 << 1), | 72 | XBT_FORCE_SLEEP = 0, |
73 | XBT_FORCE_FLUSH = (1 << 1), | 73 | XBT_FORCE_FLUSH = 1, |
74 | } xfs_buftarg_flags_t; | 74 | } xfs_buftarg_flags_t; |
75 | 75 | ||
76 | typedef struct xfs_bufhash { | 76 | typedef struct xfs_bufhash { |