forked from luck/tmp_suning_uos_patched
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:
commit
22c8c65d24
25
fs/splice.c
25
fs/splice.c
|
@ -627,18 +627,25 @@ static int pipe_to_file(struct pipe_inode_info *pipe, struct pipe_buffer *buf,
|
|||
}
|
||||
|
||||
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);
|
||||
|
|
Loading…
Reference in New Issue
Block a user