Merge branch 'for_linus' into for_linus_merged
[linux-2.6.git] / fs / ext4 / ioctl.c
index b81a5f1..6eee255 100644 (file)
@@ -47,7 +47,7 @@ long ext4_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
                if (get_user(flags, (int __user *) arg))
                        return -EFAULT;
 
-               err = mnt_want_write(filp->f_path.mnt);
+               err = mnt_want_write_file(filp);
                if (err)
                        return err;
 
@@ -136,7 +136,7 @@ flags_err:
                        err = ext4_ext_migrate(inode);
 flags_out:
                mutex_unlock(&inode->i_mutex);
-               mnt_drop_write(filp->f_path.mnt);
+               mnt_drop_write_file(filp);
                return err;
        }
        case EXT4_IOC_GETVERSION:
@@ -152,7 +152,7 @@ flags_out:
                if (!inode_owner_or_capable(inode))
                        return -EPERM;
 
-               err = mnt_want_write(filp->f_path.mnt);
+               err = mnt_want_write_file(filp);
                if (err)
                        return err;
                if (get_user(generation, (int __user *) arg)) {
@@ -160,10 +160,11 @@ flags_out:
                        goto setversion_out;
                }
 
+               mutex_lock(&inode->i_mutex);
                handle = ext4_journal_start(inode, 1);
                if (IS_ERR(handle)) {
                        err = PTR_ERR(handle);
-                       goto setversion_out;
+                       goto unlock_out;
                }
                err = ext4_reserve_inode_write(handle, inode, &iloc);
                if (err == 0) {
@@ -172,8 +173,11 @@ flags_out:
                        err = ext4_mark_iloc_dirty(handle, inode, &iloc);
                }
                ext4_journal_stop(handle);
+
+unlock_out:
+               mutex_unlock(&inode->i_mutex);
 setversion_out:
-               mnt_drop_write(filp->f_path.mnt);
+               mnt_drop_write_file(filp);
                return err;
        }
        case EXT4_IOC_GROUP_EXTEND: {
@@ -197,7 +201,7 @@ setversion_out:
                        goto group_extend_out;
                }
 
-               err = mnt_want_write(filp->f_path.mnt);
+               err = mnt_want_write_file(filp);
                if (err)
                        goto group_extend_out;
 
@@ -209,8 +213,7 @@ setversion_out:
                }
                if (err == 0)
                        err = err2;
-
-               mnt_drop_write(filp->f_path.mnt);
+               mnt_drop_write_file(filp);
 group_extend_out:
                ext4_resize_end(sb);
                return err;
@@ -246,12 +249,13 @@ group_extend_out:
                        return -EOPNOTSUPP;
                }
 
-               err = mnt_want_write(filp->f_path.mnt);
+               err = mnt_want_write_file(filp);
                if (err)
                        goto mext_out;
 
                err = ext4_move_extents(filp, donor_filp, me.orig_start,
                                        me.donor_start, me.len, &me.moved_len);
+               mnt_drop_write_file(filp);
                mnt_drop_write(filp->f_path.mnt);
 
                if (copy_to_user((struct move_extent __user *)arg,
@@ -284,7 +288,7 @@ mext_out:
                        goto group_add_out;
                }
 
-               err = mnt_want_write(filp->f_path.mnt);
+               err = mnt_want_write_file(filp);
                if (err)
                        goto group_add_out;
 
@@ -296,8 +300,7 @@ mext_out:
                }
                if (err == 0)
                        err = err2;
-
-               mnt_drop_write(filp->f_path.mnt);
+               mnt_drop_write_file(filp);
 group_add_out:
                ext4_resize_end(sb);
                return err;
@@ -309,7 +312,7 @@ group_add_out:
                if (!inode_owner_or_capable(inode))
                        return -EACCES;
 
-               err = mnt_want_write(filp->f_path.mnt);
+               err = mnt_want_write_file(filp);
                if (err)
                        return err;
                /*
@@ -321,7 +324,7 @@ group_add_out:
                mutex_lock(&(inode->i_mutex));
                err = ext4_ext_migrate(inode);
                mutex_unlock(&(inode->i_mutex));
-               mnt_drop_write(filp->f_path.mnt);
+               mnt_drop_write_file(filp);
                return err;
        }
 
@@ -331,11 +334,11 @@ group_add_out:
                if (!inode_owner_or_capable(inode))
                        return -EACCES;
 
-               err = mnt_want_write(filp->f_path.mnt);
+               err = mnt_want_write_file(filp);
                if (err)
                        return err;
                err = ext4_alloc_da_blocks(inode);
-               mnt_drop_write(filp->f_path.mnt);
+               mnt_drop_write_file(filp);
                return err;
        }