Merge branch 'for-linus' of git://git.kernel.dk/data/git/linux-2.6-block

* 'for-linus' of git://git.kernel.dk/data/git/linux-2.6-block:
  [PATCH] splice: partial write fix
This commit is contained in:
Linus Torvalds 2007-03-29 08:23:52 -07:00
commit 22c8c65d24

View File

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