Merge tag 'v5.18'
[linux-block.git] / fs / ntfs3 / file.c
index 787b53b984ee17ae07aff29f2972319d437387b7..3bae76930e68a012a00df9f35cc15cc3b35be1d6 100644 (file)
@@ -495,7 +495,7 @@ static int ntfs_truncate(struct inode *inode, loff_t new_size)
 
        down_write(&ni->file.run_lock);
        err = attr_set_size(ni, ATTR_DATA, NULL, 0, &ni->file.run, new_size,
-                           &new_valid, true, NULL);
+                           &new_valid, ni->mi.sbi->options->prealloc, NULL);
        up_write(&ni->file.run_lock);
 
        if (new_valid < ni->i_valid)
@@ -662,7 +662,13 @@ static long ntfs_fallocate(struct file *file, int mode, loff_t vbo, loff_t len)
                /*
                 * Normal file: Allocate clusters, do not change 'valid' size.
                 */
-               err = ntfs_set_size(inode, max(end, i_size));
+               loff_t new_size = max(end, i_size);
+
+               err = inode_newsize_ok(inode, new_size);
+               if (err)
+                       goto out;
+
+               err = ntfs_set_size(inode, new_size);
                if (err)
                        goto out;
 
@@ -762,7 +768,7 @@ int ntfs3_setattr(struct user_namespace *mnt_userns, struct dentry *dentry,
                }
                inode_dio_wait(inode);
 
-               if (attr->ia_size < oldsize)
+               if (attr->ia_size <= oldsize)
                        err = ntfs_truncate(inode, attr->ia_size);
                else if (attr->ia_size > oldsize)
                        err = ntfs_extend(inode, attr->ia_size, 0, NULL);