diff options
| -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; |
