From: Andrew Morton <[EMAIL PROTECTED]>

Account for the number of byte writes which this process caused to not happen
after all.

Cc: Jay Lan <[EMAIL PROTECTED]>
Cc: Shailabh Nagar <[EMAIL PROTECTED]>
Cc: Balbir Singh <[EMAIL PROTECTED]>
Cc: Chris Sturtivant <[EMAIL PROTECTED]>
Cc: Tony Ernst <[EMAIL PROTECTED]>
Cc: Guillaume Thouvenin <[EMAIL PROTECTED]>
Cc: David Wright <[EMAIL PROTECTED]>
Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
---

 fs/buffer.c   |    7 ++++++-
 mm/truncate.c |    4 +++-
 2 files changed, 9 insertions(+), 2 deletions(-)

diff -puN fs/buffer.c~io-accounting-write-cancel-accounting fs/buffer.c
--- a/fs/buffer.c~io-accounting-write-cancel-accounting
+++ a/fs/buffer.c
@@ -2823,8 +2823,13 @@ int try_to_free_buffers(struct page *pag
                 * could encounter a non-uptodate page, which is unresolvable.
                 * This only applies in the rare case where try_to_free_buffers
                 * succeeds but the page is not freed.
+                *
+                * Also, during truncate, discard_buffer will have marked all
+                * the page's buffers clean.  We discover that here and clean
+                * the page also.
                 */
-               clear_page_dirty(page);
+               if (test_clear_page_dirty(page))
+                       task_io_account_cancelled_write(PAGE_CACHE_SIZE);
        }
 out:
        if (buffers_to_free) {
diff -puN mm/truncate.c~io-accounting-write-cancel-accounting mm/truncate.c
--- a/mm/truncate.c~io-accounting-write-cancel-accounting
+++ a/mm/truncate.c
@@ -13,6 +13,7 @@
 #include <linux/module.h>
 #include <linux/pagemap.h>
 #include <linux/pagevec.h>
+#include <linux/task_io_accounting_ops.h>
 #include <linux/buffer_head.h> /* grr. try_to_release_page,
                                   do_invalidatepage */
 
@@ -69,7 +70,8 @@ truncate_complete_page(struct address_sp
        if (PagePrivate(page))
                do_invalidatepage(page, 0);
 
-       clear_page_dirty(page);
+       if (test_clear_page_dirty(page))
+               task_io_account_cancelled_write(PAGE_CACHE_SIZE);
        ClearPageUptodate(page);
        ClearPageMappedToDisk(page);
        remove_from_page_cache(page);
_
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to