Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 285980
b: refs/heads/master
c: f062abf
h: refs/heads/master
v: v3
  • Loading branch information
Li Zefan committed Jan 11, 2012
1 parent 259fbf1 commit 12b5f58
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 5 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 706efc6630c2722602541a6a2fc5900a4e38456a
refs/heads/master: f062abf089ff705e09bbaa6fa1e2fd7688a0f2ea
18 changes: 14 additions & 4 deletions trunk/fs/btrfs/ioctl.c
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,8 @@ static int btrfs_ioctl_setflags(struct file *file, void __user *arg)
struct btrfs_trans_handle *trans;
unsigned int flags, oldflags;
int ret;
u64 ip_oldflags;
unsigned int i_oldflags;

if (btrfs_root_readonly(root))
return -EROFS;
Expand All @@ -192,6 +194,9 @@ static int btrfs_ioctl_setflags(struct file *file, void __user *arg)

mutex_lock(&inode->i_mutex);

ip_oldflags = ip->flags;
i_oldflags = inode->i_flags;

flags = btrfs_mask_flags(inode->i_mode, flags);
oldflags = btrfs_flags_to_ioctl(ip->flags);
if ((flags ^ oldflags) & (FS_APPEND_FL | FS_IMMUTABLE_FL)) {
Expand Down Expand Up @@ -250,18 +255,23 @@ static int btrfs_ioctl_setflags(struct file *file, void __user *arg)
}

trans = btrfs_join_transaction(root);
BUG_ON(IS_ERR(trans));
if (IS_ERR(trans)) {
ret = PTR_ERR(trans);
goto out_drop;
}

btrfs_update_iflags(inode);
inode->i_ctime = CURRENT_TIME;
ret = btrfs_update_inode(trans, root, inode);
BUG_ON(ret);

btrfs_end_transaction(trans, root);
out_drop:
if (ret) {
ip->flags = ip_oldflags;
inode->i_flags = i_oldflags;
}

mnt_drop_write(file->f_path.mnt);

ret = 0;
out_unlock:
mutex_unlock(&inode->i_mutex);
return ret;
Expand Down

0 comments on commit 12b5f58

Please sign in to comment.