diff -puN fs/ext4/inode.c~debug-dont-prefault-on-write fs/ext4/inode.c --- a/fs/ext4/inode.c~debug-dont-prefault-on-write 2015-10-05 10:12:35.286153137 -0700 +++ b/fs/ext4/inode.c 2015-10-05 10:50:37.372253050 -0700 @@ -1204,10 +1204,20 @@ static int ext4_journalled_write_end(str copied = ext4_write_inline_data_end(inode, pos, len, copied, page); else { + /* + * With a short write (copied < len) we have potentially + * valuable data in 'page'. But, when the page is made Uptodate + * this data will be overwritten. Setting copied=0 will tell + * the upper layers to repeat the write to 'page'. + * + * Only bother zeroing out buffers when we have _actually_ + * written data. + */ if (copied < len) { if (!PageUptodate(page)) copied = 0; - page_zero_new_buffers(page, from+copied, to); + if (copied) + page_zero_new_buffers(page, from+copied, to); } ret = ext4_walk_page_buffers(handle, page_buffers(page), from, _