| .. | .. |
|---|
| 74 | 74 | err = -EPERM; |
|---|
| 75 | 75 | goto setflags_out; |
|---|
| 76 | 76 | } |
|---|
| 77 | | - if (((flags ^ REISERFS_I(inode)-> |
|---|
| 78 | | - i_attrs) & (REISERFS_IMMUTABLE_FL | |
|---|
| 79 | | - REISERFS_APPEND_FL)) |
|---|
| 80 | | - && !capable(CAP_LINUX_IMMUTABLE)) { |
|---|
| 81 | | - err = -EPERM; |
|---|
| 77 | + err = vfs_ioc_setflags_prepare(inode, |
|---|
| 78 | + REISERFS_I(inode)->i_attrs, |
|---|
| 79 | + flags); |
|---|
| 80 | + if (err) |
|---|
| 82 | 81 | goto setflags_out; |
|---|
| 83 | | - } |
|---|
| 84 | 82 | if ((flags & REISERFS_NOTAIL_FL) && |
|---|
| 85 | 83 | S_ISREG(inode->i_mode)) { |
|---|
| 86 | 84 | int result; |
|---|
| .. | .. |
|---|
| 186 | 184 | } |
|---|
| 187 | 185 | |
|---|
| 188 | 186 | /* we need to make sure nobody is changing the file size beneath us */ |
|---|
| 189 | | -{ |
|---|
| 190 | | - int depth = reiserfs_write_unlock_nested(inode->i_sb); |
|---|
| 191 | | - inode_lock(inode); |
|---|
| 192 | | - reiserfs_write_lock_nested(inode->i_sb, depth); |
|---|
| 193 | | -} |
|---|
| 187 | + { |
|---|
| 188 | + int depth = reiserfs_write_unlock_nested(inode->i_sb); |
|---|
| 189 | + |
|---|
| 190 | + inode_lock(inode); |
|---|
| 191 | + reiserfs_write_lock_nested(inode->i_sb, depth); |
|---|
| 192 | + } |
|---|
| 194 | 193 | |
|---|
| 195 | 194 | reiserfs_write_lock(inode->i_sb); |
|---|
| 196 | 195 | |
|---|