diff options
Diffstat (limited to 'fs/nilfs2/segment.c')
| -rw-r--r-- | fs/nilfs2/segment.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/fs/nilfs2/segment.c b/fs/nilfs2/segment.c index bd88a7461063..9f6b486b6c01 100644 --- a/fs/nilfs2/segment.c +++ b/fs/nilfs2/segment.c | |||
| @@ -665,7 +665,7 @@ static size_t nilfs_lookup_dirty_data_buffers(struct inode *inode, | |||
| 665 | 665 | ||
| 666 | bh = head = page_buffers(page); | 666 | bh = head = page_buffers(page); |
| 667 | do { | 667 | do { |
| 668 | if (!buffer_dirty(bh)) | 668 | if (!buffer_dirty(bh) || buffer_async_write(bh)) |
| 669 | continue; | 669 | continue; |
| 670 | get_bh(bh); | 670 | get_bh(bh); |
| 671 | list_add_tail(&bh->b_assoc_buffers, listp); | 671 | list_add_tail(&bh->b_assoc_buffers, listp); |
| @@ -699,7 +699,8 @@ static void nilfs_lookup_dirty_node_buffers(struct inode *inode, | |||
| 699 | for (i = 0; i < pagevec_count(&pvec); i++) { | 699 | for (i = 0; i < pagevec_count(&pvec); i++) { |
| 700 | bh = head = page_buffers(pvec.pages[i]); | 700 | bh = head = page_buffers(pvec.pages[i]); |
| 701 | do { | 701 | do { |
| 702 | if (buffer_dirty(bh)) { | 702 | if (buffer_dirty(bh) && |
| 703 | !buffer_async_write(bh)) { | ||
| 703 | get_bh(bh); | 704 | get_bh(bh); |
| 704 | list_add_tail(&bh->b_assoc_buffers, | 705 | list_add_tail(&bh->b_assoc_buffers, |
| 705 | listp); | 706 | listp); |
| @@ -1579,6 +1580,7 @@ static void nilfs_segctor_prepare_write(struct nilfs_sc_info *sci) | |||
| 1579 | 1580 | ||
| 1580 | list_for_each_entry(bh, &segbuf->sb_segsum_buffers, | 1581 | list_for_each_entry(bh, &segbuf->sb_segsum_buffers, |
| 1581 | b_assoc_buffers) { | 1582 | b_assoc_buffers) { |
| 1583 | set_buffer_async_write(bh); | ||
| 1582 | if (bh->b_page != bd_page) { | 1584 | if (bh->b_page != bd_page) { |
| 1583 | if (bd_page) { | 1585 | if (bd_page) { |
| 1584 | lock_page(bd_page); | 1586 | lock_page(bd_page); |
| @@ -1592,6 +1594,7 @@ static void nilfs_segctor_prepare_write(struct nilfs_sc_info *sci) | |||
| 1592 | 1594 | ||
| 1593 | list_for_each_entry(bh, &segbuf->sb_payload_buffers, | 1595 | list_for_each_entry(bh, &segbuf->sb_payload_buffers, |
| 1594 | b_assoc_buffers) { | 1596 | b_assoc_buffers) { |
| 1597 | set_buffer_async_write(bh); | ||
| 1595 | if (bh == segbuf->sb_super_root) { | 1598 | if (bh == segbuf->sb_super_root) { |
| 1596 | if (bh->b_page != bd_page) { | 1599 | if (bh->b_page != bd_page) { |
| 1597 | lock_page(bd_page); | 1600 | lock_page(bd_page); |
| @@ -1677,6 +1680,7 @@ static void nilfs_abort_logs(struct list_head *logs, int err) | |||
| 1677 | list_for_each_entry(segbuf, logs, sb_list) { | 1680 | list_for_each_entry(segbuf, logs, sb_list) { |
| 1678 | list_for_each_entry(bh, &segbuf->sb_segsum_buffers, | 1681 | list_for_each_entry(bh, &segbuf->sb_segsum_buffers, |
| 1679 | b_assoc_buffers) { | 1682 | b_assoc_buffers) { |
| 1683 | clear_buffer_async_write(bh); | ||
| 1680 | if (bh->b_page != bd_page) { | 1684 | if (bh->b_page != bd_page) { |
| 1681 | if (bd_page) | 1685 | if (bd_page) |
| 1682 | end_page_writeback(bd_page); | 1686 | end_page_writeback(bd_page); |
| @@ -1686,6 +1690,7 @@ static void nilfs_abort_logs(struct list_head *logs, int err) | |||
| 1686 | 1690 | ||
| 1687 | list_for_each_entry(bh, &segbuf->sb_payload_buffers, | 1691 | list_for_each_entry(bh, &segbuf->sb_payload_buffers, |
| 1688 | b_assoc_buffers) { | 1692 | b_assoc_buffers) { |
| 1693 | clear_buffer_async_write(bh); | ||
| 1689 | if (bh == segbuf->sb_super_root) { | 1694 | if (bh == segbuf->sb_super_root) { |
| 1690 | if (bh->b_page != bd_page) { | 1695 | if (bh->b_page != bd_page) { |
| 1691 | end_page_writeback(bd_page); | 1696 | end_page_writeback(bd_page); |
| @@ -1755,6 +1760,7 @@ static void nilfs_segctor_complete_write(struct nilfs_sc_info *sci) | |||
| 1755 | b_assoc_buffers) { | 1760 | b_assoc_buffers) { |
| 1756 | set_buffer_uptodate(bh); | 1761 | set_buffer_uptodate(bh); |
| 1757 | clear_buffer_dirty(bh); | 1762 | clear_buffer_dirty(bh); |
| 1763 | clear_buffer_async_write(bh); | ||
| 1758 | if (bh->b_page != bd_page) { | 1764 | if (bh->b_page != bd_page) { |
| 1759 | if (bd_page) | 1765 | if (bd_page) |
| 1760 | end_page_writeback(bd_page); | 1766 | end_page_writeback(bd_page); |
| @@ -1776,6 +1782,7 @@ static void nilfs_segctor_complete_write(struct nilfs_sc_info *sci) | |||
| 1776 | b_assoc_buffers) { | 1782 | b_assoc_buffers) { |
| 1777 | set_buffer_uptodate(bh); | 1783 | set_buffer_uptodate(bh); |
| 1778 | clear_buffer_dirty(bh); | 1784 | clear_buffer_dirty(bh); |
| 1785 | clear_buffer_async_write(bh); | ||
| 1779 | clear_buffer_delay(bh); | 1786 | clear_buffer_delay(bh); |
| 1780 | clear_buffer_nilfs_volatile(bh); | 1787 | clear_buffer_nilfs_volatile(bh); |
| 1781 | clear_buffer_nilfs_redirected(bh); | 1788 | clear_buffer_nilfs_redirected(bh); |
