|
@@ -627,18 +627,25 @@ find_page:
|
|
|
}
|
|
|
|
|
|
ret = mapping->a_ops->commit_write(file, page, offset, offset+this_len);
|
|
|
- if (!ret) {
|
|
|
+ if (ret) {
|
|
|
+ if (ret == AOP_TRUNCATED_PAGE) {
|
|
|
+ page_cache_release(page);
|
|
|
+ goto find_page;
|
|
|
+ }
|
|
|
+ if (ret < 0)
|
|
|
+ goto out;
|
|
|
/*
|
|
|
- * Return the number of bytes written and mark page as
|
|
|
- * accessed, we are now done!
|
|
|
+ * Partial write has happened, so 'ret' already initialized by
|
|
|
+ * number of bytes written, Where is nothing we have to do here.
|
|
|
*/
|
|
|
+ } else
|
|
|
ret = this_len;
|
|
|
- mark_page_accessed(page);
|
|
|
- balance_dirty_pages_ratelimited(mapping);
|
|
|
- } else if (ret == AOP_TRUNCATED_PAGE) {
|
|
|
- page_cache_release(page);
|
|
|
- goto find_page;
|
|
|
- }
|
|
|
+ /*
|
|
|
+ * Return the number of bytes written and mark page as
|
|
|
+ * accessed, we are now done!
|
|
|
+ */
|
|
|
+ mark_page_accessed(page);
|
|
|
+ balance_dirty_pages_ratelimited(mapping);
|
|
|
out:
|
|
|
page_cache_release(page);
|
|
|
unlock_page(page);
|