diff options
Diffstat (limited to 'fs/btrfs/ioctl.c')
| -rw-r--r-- | fs/btrfs/ioctl.c | 28 | 
1 files changed, 15 insertions, 13 deletions
diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c index 72d461656f6..5441ff1480f 100644 --- a/fs/btrfs/ioctl.c +++ b/fs/btrfs/ioctl.c @@ -201,7 +201,7 @@ static int btrfs_ioctl_setflags(struct file *file, void __user *arg)  		}  	} -	ret = mnt_want_write(file->f_path.mnt); +	ret = mnt_want_write_file(file);  	if (ret)  		goto out_unlock; @@ -252,14 +252,14 @@ static int btrfs_ioctl_setflags(struct file *file, void __user *arg)  	trans = btrfs_join_transaction(root);  	BUG_ON(IS_ERR(trans)); +	btrfs_update_iflags(inode); +	inode->i_ctime = CURRENT_TIME;  	ret = btrfs_update_inode(trans, root, inode);  	BUG_ON(ret); -	btrfs_update_iflags(inode); -	inode->i_ctime = CURRENT_TIME;  	btrfs_end_transaction(trans, root); -	mnt_drop_write(file->f_path.mnt); +	mnt_drop_write_file(file);  	ret = 0;   out_unlock: @@ -858,8 +858,10 @@ static int cluster_pages_for_defrag(struct inode *inode,  		return 0;  	file_end = (isize - 1) >> PAGE_CACHE_SHIFT; +	mutex_lock(&inode->i_mutex);  	ret = btrfs_delalloc_reserve_space(inode,  					   num_pages << PAGE_CACHE_SHIFT); +	mutex_unlock(&inode->i_mutex);  	if (ret)  		return ret;  again: @@ -1853,7 +1855,7 @@ static noinline int btrfs_ioctl_snap_destroy(struct file *file,  		goto out;  	} -	err = mnt_want_write(file->f_path.mnt); +	err = mnt_want_write_file(file);  	if (err)  		goto out; @@ -1969,7 +1971,7 @@ out_dput:  	dput(dentry);  out_unlock_dir:  	mutex_unlock(&dir->i_mutex); -	mnt_drop_write(file->f_path.mnt); +	mnt_drop_write_file(file);  out:  	kfree(vol_args);  	return err; @@ -1985,7 +1987,7 @@ static int btrfs_ioctl_defrag(struct file *file, void __user *argp)  	if (btrfs_root_readonly(root))  		return -EROFS; -	ret = mnt_want_write(file->f_path.mnt); +	ret = mnt_want_write_file(file);  	if (ret)  		return ret; @@ -2038,7 +2040,7 @@ static int btrfs_ioctl_defrag(struct file *file, void __user *argp)  		ret = -EINVAL;  	}  out: -	mnt_drop_write(file->f_path.mnt); +	mnt_drop_write_file(file);  	return ret;  } @@ -2193,7 +2195,7 @@ static noinline long btrfs_ioctl_clone(struct file *file, unsigned long srcfd,  	if (btrfs_root_readonly(root))  		return -EROFS; -	ret = mnt_want_write(file->f_path.mnt); +	ret = mnt_want_write_file(file);  	if (ret)  		return ret; @@ -2508,7 +2510,7 @@ out_unlock:  out_fput:  	fput(src_file);  out_drop_write: -	mnt_drop_write(file->f_path.mnt); +	mnt_drop_write_file(file);  	return ret;  } @@ -2547,7 +2549,7 @@ static long btrfs_ioctl_trans_start(struct file *file)  	if (btrfs_root_readonly(root))  		goto out; -	ret = mnt_want_write(file->f_path.mnt); +	ret = mnt_want_write_file(file);  	if (ret)  		goto out; @@ -2563,7 +2565,7 @@ static long btrfs_ioctl_trans_start(struct file *file)  out_drop:  	atomic_dec(&root->fs_info->open_ioctl_trans); -	mnt_drop_write(file->f_path.mnt); +	mnt_drop_write_file(file);  out:  	return ret;  } @@ -2798,7 +2800,7 @@ long btrfs_ioctl_trans_end(struct file *file)  	atomic_dec(&root->fs_info->open_ioctl_trans); -	mnt_drop_write(file->f_path.mnt); +	mnt_drop_write_file(file);  	return 0;  }  |