]> git.hungrycats.org Git - linux/commitdiff
page_writeback: put account_page_redirty() after set_page_dirty()
authorKonstantin Khebnikov <khlebnikov@yandex-team.ru>
Wed, 11 Feb 2015 23:26:55 +0000 (15:26 -0800)
committerZygo Blaxell <zblaxell@serenity.furryterror.org>
Fri, 27 Feb 2015 05:33:25 +0000 (00:33 -0500)
Helper account_page_redirty() fixes dirty pages counter for redirtied
pages.  This patch puts it after dirtying and prevents temporary
underflows of dirtied pages counters on zone/bdi and current->nr_dirtied.

Signed-off-by: Konstantin Khebnikov <khlebnikov@yandex-team.ru>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
(cherry picked from commit 8d38633c3b4093aca7524945f1e9249d7d3a44da)

fs/btrfs/extent_io.c
mm/page-writeback.c

index 86608437d5c7271dfe3c30275d74526b5d5b5763..07a103c2595d269d387edf31f78cc5396ee5edae 100644 (file)
@@ -1385,8 +1385,8 @@ int extent_range_redirty_for_io(struct inode *inode, u64 start, u64 end)
        while (index <= end_index) {
                page = find_get_page(inode->i_mapping, index);
                BUG_ON(!page); /* Pages should be in the extent_io_tree */
-               account_page_redirty(page);
                __set_page_dirty_nobuffers(page);
+               account_page_redirty(page);
                page_cache_release(page);
                index++;
        }
index 437174a2aaa336e32d26e9afd4ff0e3a8418c566..cbbc7b0f23b13f4f53a92bba4558a1e3dddc4ecc 100644 (file)
@@ -2168,9 +2168,12 @@ EXPORT_SYMBOL(account_page_redirty);
  */
 int redirty_page_for_writepage(struct writeback_control *wbc, struct page *page)
 {
+       int ret;
+
        wbc->pages_skipped++;
+       ret = __set_page_dirty_nobuffers(page);
        account_page_redirty(page);
-       return __set_page_dirty_nobuffers(page);
+       return ret;
 }
 EXPORT_SYMBOL(redirty_page_for_writepage);