--- x/fs/reiserfs/ioctl.c +++ i/fs/reiserfs/ioctl.c @@ -78,6 +78,9 @@ long reiserfs_ioctl(struct file *filp, u struct inode *inode = file_inode(filp); int err = 0; + err = mnt_want_write_file(filp); + if (err) + return err; reiserfs_write_lock(inode->i_sb); switch (cmd) { @@ -100,23 +103,20 @@ long reiserfs_ioctl(struct file *filp, u err = -EPERM; break; } - err = mnt_want_write_file(filp); - if (err) - break; if (get_user(inode->i_generation, (int __user *)arg)) { err = -EFAULT; - goto setversion_out; + break; } inode->i_ctime = current_time(inode); mark_inode_dirty(inode); -setversion_out: - mnt_drop_write_file(filp); break; default: err = -ENOTTY; + break; } reiserfs_write_unlock(inode->i_sb); + mnt_drop_write_file(filp); return err; }