Commit f35badcc authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull fuse fix from Miklos Szeredi:
 "Fix a regression introduced in -rc4"

* tag 'fuse-fixes-6.1-rc8' of git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse:
  fuse: lock inode unconditionally in fuse_fallocate()
parents b7b275e6 44361e8c
Loading
Loading
Loading
Loading
+16 −21
Original line number Diff line number Diff line
@@ -2963,11 +2963,9 @@ static long fuse_file_fallocate(struct file *file, int mode, loff_t offset,
		.mode = mode
	};
	int err;
	bool lock_inode = !(mode & FALLOC_FL_KEEP_SIZE) ||
			   (mode & (FALLOC_FL_PUNCH_HOLE |
				    FALLOC_FL_ZERO_RANGE));

	bool block_faults = FUSE_IS_DAX(inode) && lock_inode;
	bool block_faults = FUSE_IS_DAX(inode) &&
		(!(mode & FALLOC_FL_KEEP_SIZE) ||
		 (mode & (FALLOC_FL_PUNCH_HOLE | FALLOC_FL_ZERO_RANGE)));

	if (mode & ~(FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE |
		     FALLOC_FL_ZERO_RANGE))
@@ -2976,7 +2974,6 @@ static long fuse_file_fallocate(struct file *file, int mode, loff_t offset,
	if (fm->fc->no_fallocate)
		return -EOPNOTSUPP;

	if (lock_inode) {
	inode_lock(inode);
	if (block_faults) {
		filemap_invalidate_lock(inode->i_mapping);
@@ -2992,7 +2989,6 @@ static long fuse_file_fallocate(struct file *file, int mode, loff_t offset,
		if (err)
			goto out;
	}
	}

	if (!(mode & FALLOC_FL_KEEP_SIZE) &&
	    offset + length > i_size_read(inode)) {
@@ -3039,7 +3035,6 @@ static long fuse_file_fallocate(struct file *file, int mode, loff_t offset,
	if (block_faults)
		filemap_invalidate_unlock(inode->i_mapping);

	if (lock_inode)
	inode_unlock(inode);

	fuse_flush_time_update(inode);