|
@@ -1762,6 +1762,16 @@ err_out:
|
|
|
return err;
|
|
|
}
|
|
|
|
|
|
+static void ntfs_write_failed(struct address_space *mapping, loff_t to)
|
|
|
+{
|
|
|
+ struct inode *inode = mapping->host;
|
|
|
+
|
|
|
+ if (to > inode->i_size) {
|
|
|
+ truncate_pagecache(inode, to, inode->i_size);
|
|
|
+ ntfs_truncate_vfs(inode);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* ntfs_file_buffered_write -
|
|
|
*
|
|
@@ -2022,8 +2032,9 @@ static ssize_t ntfs_file_buffered_write(struct kiocb *iocb,
|
|
|
* allocated space, which is not a disaster.
|
|
|
*/
|
|
|
i_size = i_size_read(vi);
|
|
|
- if (pos + bytes > i_size)
|
|
|
- vmtruncate(vi, i_size);
|
|
|
+ if (pos + bytes > i_size) {
|
|
|
+ ntfs_write_failed(mapping, pos + bytes);
|
|
|
+ }
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
@@ -2227,7 +2238,6 @@ const struct file_operations ntfs_file_ops = {
|
|
|
|
|
|
const struct inode_operations ntfs_file_inode_ops = {
|
|
|
#ifdef NTFS_RW
|
|
|
- .truncate = ntfs_truncate_vfs,
|
|
|
.setattr = ntfs_setattr,
|
|
|
#endif /* NTFS_RW */
|
|
|
};
|