diff options
| -rw-r--r-- | fs/xfs/linux-2.6/xfs_buf.c | 20 |
1 files changed, 9 insertions, 11 deletions
diff --git a/fs/xfs/linux-2.6/xfs_buf.c b/fs/xfs/linux-2.6/xfs_buf.c index 2eef165f4f39..478ca1547ee5 100644 --- a/fs/xfs/linux-2.6/xfs_buf.c +++ b/fs/xfs/linux-2.6/xfs_buf.c | |||
| @@ -915,8 +915,6 @@ xfs_buf_lock( | |||
| 915 | 915 | ||
| 916 | if (atomic_read(&bp->b_pin_count) && (bp->b_flags & XBF_STALE)) | 916 | if (atomic_read(&bp->b_pin_count) && (bp->b_flags & XBF_STALE)) |
| 917 | xfs_log_force(bp->b_target->bt_mount, 0); | 917 | xfs_log_force(bp->b_target->bt_mount, 0); |
| 918 | if (atomic_read(&bp->b_io_remaining)) | ||
| 919 | blk_flush_plug(current); | ||
| 920 | down(&bp->b_sema); | 918 | down(&bp->b_sema); |
| 921 | XB_SET_OWNER(bp); | 919 | XB_SET_OWNER(bp); |
| 922 | 920 | ||
| @@ -1305,8 +1303,6 @@ xfs_buf_iowait( | |||
| 1305 | { | 1303 | { |
| 1306 | trace_xfs_buf_iowait(bp, _RET_IP_); | 1304 | trace_xfs_buf_iowait(bp, _RET_IP_); |
| 1307 | 1305 | ||
| 1308 | if (atomic_read(&bp->b_io_remaining)) | ||
| 1309 | blk_flush_plug(current); | ||
| 1310 | wait_for_completion(&bp->b_iowait); | 1306 | wait_for_completion(&bp->b_iowait); |
| 1311 | 1307 | ||
| 1312 | trace_xfs_buf_iowait_done(bp, _RET_IP_); | 1308 | trace_xfs_buf_iowait_done(bp, _RET_IP_); |
| @@ -1743,8 +1739,8 @@ xfsbufd( | |||
| 1743 | do { | 1739 | do { |
| 1744 | long age = xfs_buf_age_centisecs * msecs_to_jiffies(10); | 1740 | long age = xfs_buf_age_centisecs * msecs_to_jiffies(10); |
| 1745 | long tout = xfs_buf_timer_centisecs * msecs_to_jiffies(10); | 1741 | long tout = xfs_buf_timer_centisecs * msecs_to_jiffies(10); |
| 1746 | int count = 0; | ||
| 1747 | struct list_head tmp; | 1742 | struct list_head tmp; |
| 1743 | struct blk_plug plug; | ||
| 1748 | 1744 | ||
| 1749 | if (unlikely(freezing(current))) { | 1745 | if (unlikely(freezing(current))) { |
| 1750 | set_bit(XBT_FORCE_SLEEP, &target->bt_flags); | 1746 | set_bit(XBT_FORCE_SLEEP, &target->bt_flags); |
| @@ -1760,16 +1756,15 @@ xfsbufd( | |||
| 1760 | 1756 | ||
| 1761 | xfs_buf_delwri_split(target, &tmp, age); | 1757 | xfs_buf_delwri_split(target, &tmp, age); |
| 1762 | list_sort(NULL, &tmp, xfs_buf_cmp); | 1758 | list_sort(NULL, &tmp, xfs_buf_cmp); |
| 1759 | |||
| 1760 | blk_start_plug(&plug); | ||
| 1763 | while (!list_empty(&tmp)) { | 1761 | while (!list_empty(&tmp)) { |
| 1764 | struct xfs_buf *bp; | 1762 | struct xfs_buf *bp; |
| 1765 | bp = list_first_entry(&tmp, struct xfs_buf, b_list); | 1763 | bp = list_first_entry(&tmp, struct xfs_buf, b_list); |
| 1766 | list_del_init(&bp->b_list); | 1764 | list_del_init(&bp->b_list); |
| 1767 | xfs_bdstrat_cb(bp); | 1765 | xfs_bdstrat_cb(bp); |
| 1768 | count++; | ||
| 1769 | } | 1766 | } |
| 1770 | if (count) | 1767 | blk_finish_plug(&plug); |
| 1771 | blk_flush_plug(current); | ||
| 1772 | |||
| 1773 | } while (!kthread_should_stop()); | 1768 | } while (!kthread_should_stop()); |
| 1774 | 1769 | ||
| 1775 | return 0; | 1770 | return 0; |
| @@ -1789,6 +1784,7 @@ xfs_flush_buftarg( | |||
| 1789 | int pincount = 0; | 1784 | int pincount = 0; |
| 1790 | LIST_HEAD(tmp_list); | 1785 | LIST_HEAD(tmp_list); |
| 1791 | LIST_HEAD(wait_list); | 1786 | LIST_HEAD(wait_list); |
| 1787 | struct blk_plug plug; | ||
| 1792 | 1788 | ||
| 1793 | xfs_buf_runall_queues(xfsconvertd_workqueue); | 1789 | xfs_buf_runall_queues(xfsconvertd_workqueue); |
| 1794 | xfs_buf_runall_queues(xfsdatad_workqueue); | 1790 | xfs_buf_runall_queues(xfsdatad_workqueue); |
| @@ -1803,6 +1799,8 @@ xfs_flush_buftarg( | |||
| 1803 | * we do that after issuing all the IO. | 1799 | * we do that after issuing all the IO. |
| 1804 | */ | 1800 | */ |
| 1805 | list_sort(NULL, &tmp_list, xfs_buf_cmp); | 1801 | list_sort(NULL, &tmp_list, xfs_buf_cmp); |
| 1802 | |||
| 1803 | blk_start_plug(&plug); | ||
| 1806 | while (!list_empty(&tmp_list)) { | 1804 | while (!list_empty(&tmp_list)) { |
| 1807 | bp = list_first_entry(&tmp_list, struct xfs_buf, b_list); | 1805 | bp = list_first_entry(&tmp_list, struct xfs_buf, b_list); |
| 1808 | ASSERT(target == bp->b_target); | 1806 | ASSERT(target == bp->b_target); |
| @@ -1813,10 +1811,10 @@ xfs_flush_buftarg( | |||
| 1813 | } | 1811 | } |
| 1814 | xfs_bdstrat_cb(bp); | 1812 | xfs_bdstrat_cb(bp); |
| 1815 | } | 1813 | } |
| 1814 | blk_finish_plug(&plug); | ||
| 1816 | 1815 | ||
| 1817 | if (wait) { | 1816 | if (wait) { |
| 1818 | /* Expedite and wait for IO to complete. */ | 1817 | /* Wait for IO to complete. */ |
| 1819 | blk_flush_plug(current); | ||
| 1820 | while (!list_empty(&wait_list)) { | 1818 | while (!list_empty(&wait_list)) { |
| 1821 | bp = list_first_entry(&wait_list, struct xfs_buf, b_list); | 1819 | bp = list_first_entry(&wait_list, struct xfs_buf, b_list); |
| 1822 | 1820 | ||
