diff options
Diffstat (limited to 'fs/ext4/ioctl.c')
| -rw-r--r-- | fs/ext4/ioctl.c | 24 | 
1 files changed, 6 insertions, 18 deletions
diff --git a/fs/ext4/ioctl.c b/fs/ext4/ioctl.c index a2a837f00407..0f2252ec274d 100644 --- a/fs/ext4/ioctl.c +++ b/fs/ext4/ioctl.c  | |||
| @@ -104,21 +104,15 @@ static long swap_inode_boot_loader(struct super_block *sb, | |||
| 104 | struct ext4_inode_info *ei_bl; | 104 | struct ext4_inode_info *ei_bl; | 
| 105 | struct ext4_sb_info *sbi = EXT4_SB(sb); | 105 | struct ext4_sb_info *sbi = EXT4_SB(sb); | 
| 106 | 106 | ||
| 107 | if (inode->i_nlink != 1 || !S_ISREG(inode->i_mode)) { | 107 | if (inode->i_nlink != 1 || !S_ISREG(inode->i_mode)) | 
| 108 | err = -EINVAL; | 108 | return -EINVAL; | 
| 109 | goto swap_boot_out; | ||
| 110 | } | ||
| 111 | 109 | ||
| 112 | if (!inode_owner_or_capable(inode) || !capable(CAP_SYS_ADMIN)) { | 110 | if (!inode_owner_or_capable(inode) || !capable(CAP_SYS_ADMIN)) | 
| 113 | err = -EPERM; | 111 | return -EPERM; | 
| 114 | goto swap_boot_out; | ||
| 115 | } | ||
| 116 | 112 | ||
| 117 | inode_bl = ext4_iget(sb, EXT4_BOOT_LOADER_INO); | 113 | inode_bl = ext4_iget(sb, EXT4_BOOT_LOADER_INO); | 
| 118 | if (IS_ERR(inode_bl)) { | 114 | if (IS_ERR(inode_bl)) | 
| 119 | err = PTR_ERR(inode_bl); | 115 | return PTR_ERR(inode_bl); | 
| 120 | goto swap_boot_out; | ||
| 121 | } | ||
| 122 | ei_bl = EXT4_I(inode_bl); | 116 | ei_bl = EXT4_I(inode_bl); | 
| 123 | 117 | ||
| 124 | filemap_flush(inode->i_mapping); | 118 | filemap_flush(inode->i_mapping); | 
| @@ -193,20 +187,14 @@ static long swap_inode_boot_loader(struct super_block *sb, | |||
| 193 | ext4_mark_inode_dirty(handle, inode); | 187 | ext4_mark_inode_dirty(handle, inode); | 
| 194 | } | 188 | } | 
| 195 | } | 189 | } | 
| 196 | |||
| 197 | ext4_journal_stop(handle); | 190 | ext4_journal_stop(handle); | 
| 198 | |||
| 199 | ext4_double_up_write_data_sem(inode, inode_bl); | 191 | ext4_double_up_write_data_sem(inode, inode_bl); | 
| 200 | 192 | ||
| 201 | journal_err_out: | 193 | journal_err_out: | 
| 202 | ext4_inode_resume_unlocked_dio(inode); | 194 | ext4_inode_resume_unlocked_dio(inode); | 
| 203 | ext4_inode_resume_unlocked_dio(inode_bl); | 195 | ext4_inode_resume_unlocked_dio(inode_bl); | 
| 204 | |||
| 205 | unlock_two_nondirectories(inode, inode_bl); | 196 | unlock_two_nondirectories(inode, inode_bl); | 
| 206 | |||
| 207 | iput(inode_bl); | 197 | iput(inode_bl); | 
| 208 | |||
| 209 | swap_boot_out: | ||
| 210 | return err; | 198 | return err; | 
| 211 | } | 199 | } | 
| 212 | 200 | ||
