Merge branch 'work.read_write' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
[sfrench/cifs-2.6.git] / fs / btrfs / file.c
index e62dd55b40795afe0d0e2c853e4c25ce9bec56ea..aafcc785f8408c1714e159ed68e3f0f57847ae2e 100644 (file)
@@ -1536,7 +1536,7 @@ static noinline int check_can_nocow(struct btrfs_inode *inode, loff_t pos,
        u64 num_bytes;
        int ret;
 
-       ret = btrfs_start_write_no_snapshoting(root);
+       ret = btrfs_start_write_no_snapshotting(root);
        if (!ret)
                return -ENOSPC;
 
@@ -1561,7 +1561,7 @@ static noinline int check_can_nocow(struct btrfs_inode *inode, loff_t pos,
                        NULL, NULL, NULL);
        if (ret <= 0) {
                ret = 0;
-               btrfs_end_write_no_snapshoting(root);
+               btrfs_end_write_no_snapshotting(root);
        } else {
                *write_bytes = min_t(size_t, *write_bytes ,
                                     num_bytes - pos + lockstart);
@@ -1664,7 +1664,7 @@ static noinline ssize_t __btrfs_buffered_write(struct file *file,
                                                data_reserved, pos,
                                                write_bytes);
                        else
-                               btrfs_end_write_no_snapshoting(root);
+                               btrfs_end_write_no_snapshotting(root);
                        break;
                }
 
@@ -1767,7 +1767,7 @@ again:
 
                release_bytes = 0;
                if (only_release_metadata)
-                       btrfs_end_write_no_snapshoting(root);
+                       btrfs_end_write_no_snapshotting(root);
 
                if (only_release_metadata && copied > 0) {
                        lockstart = round_down(pos,
@@ -1797,7 +1797,7 @@ again:
 
        if (release_bytes) {
                if (only_release_metadata) {
-                       btrfs_end_write_no_snapshoting(root);
+                       btrfs_end_write_no_snapshotting(root);
                        btrfs_delalloc_release_metadata(BTRFS_I(inode),
                                        release_bytes);
                } else {
@@ -1994,8 +1994,15 @@ out:
 
 int btrfs_release_file(struct inode *inode, struct file *filp)
 {
-       if (filp->private_data)
+       struct btrfs_file_private *private = filp->private_data;
+
+       if (private && private->trans)
                btrfs_ioctl_trans_end(filp);
+       if (private && private->filldir_buf)
+               kfree(private->filldir_buf);
+       kfree(private);
+       filp->private_data = NULL;
+
        /*
         * ordered_data_close is set by settattr when we are about to truncate
         * a file from a non-zero size to a zero size.  This tries to