vfs: mnt_drop_write_file()
[deliverable/linux.git] / fs / btrfs / ioctl.c
index 72d461656f606647292657f2367ee438a50d2a40..5441ff1480fdbbd9ce9fe4c9caa6fc0c62392a3c 100644 (file)
@@ -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;
 }
 
This page took 0.026862 seconds and 5 git commands to generate.