diff options
Diffstat (limited to 'fs/ext4')
-rw-r--r-- | fs/ext4/page-io.c | 24 |
1 files changed, 11 insertions, 13 deletions
diff --git a/fs/ext4/page-io.c b/fs/ext4/page-io.c index 4cb2743cb2e3..b6a3804a9855 100644 --- a/fs/ext4/page-io.c +++ b/fs/ext4/page-io.c | |||
@@ -422,6 +422,17 @@ int ext4_bio_write_page(struct ext4_io_submit *io, | |||
422 | ClearPageError(page); | 422 | ClearPageError(page); |
423 | 423 | ||
424 | /* | 424 | /* |
425 | * Comments copied from block_write_full_page_endio: | ||
426 | * | ||
427 | * The page straddles i_size. It must be zeroed out on each and every | ||
428 | * writepage invocation because it may be mmapped. "A file is mapped | ||
429 | * in multiples of the page size. For a file that is not a multiple of | ||
430 | * the page size, the remaining memory is zeroed when mapped, and | ||
431 | * writes to that region are not written out to the file." | ||
432 | */ | ||
433 | if (len < PAGE_CACHE_SIZE) | ||
434 | zero_user_segment(page, len, PAGE_CACHE_SIZE); | ||
435 | /* | ||
425 | * In the first loop we prepare and mark buffers to submit. We have to | 436 | * In the first loop we prepare and mark buffers to submit. We have to |
426 | * mark all buffers in the page before submitting so that | 437 | * mark all buffers in the page before submitting so that |
427 | * end_page_writeback() cannot be called from ext4_bio_end_io() when IO | 438 | * end_page_writeback() cannot be called from ext4_bio_end_io() when IO |
@@ -432,19 +443,6 @@ int ext4_bio_write_page(struct ext4_io_submit *io, | |||
432 | do { | 443 | do { |
433 | block_start = bh_offset(bh); | 444 | block_start = bh_offset(bh); |
434 | if (block_start >= len) { | 445 | if (block_start >= len) { |
435 | /* | ||
436 | * Comments copied from block_write_full_page_endio: | ||
437 | * | ||
438 | * The page straddles i_size. It must be zeroed out on | ||
439 | * each and every writepage invocation because it may | ||
440 | * be mmapped. "A file is mapped in multiples of the | ||
441 | * page size. For a file that is not a multiple of | ||
442 | * the page size, the remaining memory is zeroed when | ||
443 | * mapped, and writes to that region are not written | ||
444 | * out to the file." | ||
445 | */ | ||
446 | zero_user_segment(page, block_start, | ||
447 | block_start + blocksize); | ||
448 | clear_buffer_dirty(bh); | 446 | clear_buffer_dirty(bh); |
449 | set_buffer_uptodate(bh); | 447 | set_buffer_uptodate(bh); |
450 | continue; | 448 | continue; |