|
|
@@ -684,6 +684,21 @@ out_sem:
|
|
|
ret = check_block_validity(inode, map);
|
|
|
if (ret != 0)
|
|
|
return ret;
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Inodes with freshly allocated blocks where contents will be
|
|
|
+ * visible after transaction commit must be on transaction's
|
|
|
+ * ordered data list.
|
|
|
+ */
|
|
|
+ if (map->m_flags & EXT4_MAP_NEW &&
|
|
|
+ !(map->m_flags & EXT4_MAP_UNWRITTEN) &&
|
|
|
+ !(flags & EXT4_GET_BLOCKS_ZERO) &&
|
|
|
+ !IS_NOQUOTA(inode) &&
|
|
|
+ ext4_should_order_data(inode)) {
|
|
|
+ ret = ext4_jbd2_file_inode(handle, inode);
|
|
|
+ if (ret)
|
|
|
+ return ret;
|
|
|
+ }
|
|
|
}
|
|
|
return retval;
|
|
|
}
|
|
|
@@ -1289,15 +1304,6 @@ static int ext4_write_end(struct file *file,
|
|
|
int i_size_changed = 0;
|
|
|
|
|
|
trace_ext4_write_end(inode, pos, len, copied);
|
|
|
- if (ext4_test_inode_state(inode, EXT4_STATE_ORDERED_MODE)) {
|
|
|
- ret = ext4_jbd2_file_inode(handle, inode);
|
|
|
- if (ret) {
|
|
|
- unlock_page(page);
|
|
|
- put_page(page);
|
|
|
- goto errout;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
if (ext4_has_inline_data(inode)) {
|
|
|
ret = ext4_write_inline_data_end(inode, pos, len,
|
|
|
copied, page);
|