|
@@ -1283,13 +1283,18 @@ __xfs_get_blocks(
|
|
|
bh_result->b_bdev = iomap.iomap_target->bt_bdev;
|
|
|
|
|
|
/*
|
|
|
- * If we previously allocated a block out beyond eof and we are
|
|
|
- * now coming back to use it then we will need to flag it as new
|
|
|
- * even if it has a disk address.
|
|
|
+ * If we previously allocated a block out beyond eof and we are now
|
|
|
+ * coming back to use it then we will need to flag it as new even if it
|
|
|
+ * has a disk address.
|
|
|
+ *
|
|
|
+ * With sub-block writes into unwritten extents we also need to mark
|
|
|
+ * the buffer as new so that the unwritten parts of the buffer gets
|
|
|
+ * correctly zeroed.
|
|
|
*/
|
|
|
if (create &&
|
|
|
((!buffer_mapped(bh_result) && !buffer_uptodate(bh_result)) ||
|
|
|
- (offset >= i_size_read(inode)) || (iomap.iomap_flags & IOMAP_NEW)))
|
|
|
+ (offset >= i_size_read(inode)) ||
|
|
|
+ (iomap.iomap_flags & (IOMAP_NEW|IOMAP_UNWRITTEN))))
|
|
|
set_buffer_new(bh_result);
|
|
|
|
|
|
if (iomap.iomap_flags & IOMAP_DELAY) {
|