.. | .. |
---|
121 | 121 | blkcnt_t blocks; |
---|
122 | 122 | unsigned short bytes; |
---|
123 | 123 | |
---|
124 | | - inode_bl = ext4_iget(sb, EXT4_BOOT_LOADER_INO, EXT4_IGET_SPECIAL); |
---|
| 124 | + inode_bl = ext4_iget(sb, EXT4_BOOT_LOADER_INO, |
---|
| 125 | + EXT4_IGET_SPECIAL | EXT4_IGET_BAD); |
---|
125 | 126 | if (IS_ERR(inode_bl)) |
---|
126 | 127 | return PTR_ERR(inode_bl); |
---|
127 | 128 | ei_bl = EXT4_I(inode_bl); |
---|
.. | .. |
---|
170 | 171 | /* Protect extent tree against block allocations via delalloc */ |
---|
171 | 172 | ext4_double_down_write_data_sem(inode, inode_bl); |
---|
172 | 173 | |
---|
173 | | - if (inode_bl->i_nlink == 0) { |
---|
| 174 | + if (is_bad_inode(inode_bl) || !S_ISREG(inode_bl->i_mode)) { |
---|
174 | 175 | /* this inode has never been used as a BOOT_LOADER */ |
---|
175 | 176 | set_nlink(inode_bl, 1); |
---|
176 | 177 | i_uid_write(inode_bl, 0); |
---|
.. | .. |
---|
179 | 180 | ei_bl->i_flags = 0; |
---|
180 | 181 | inode_set_iversion(inode_bl, 1); |
---|
181 | 182 | i_size_write(inode_bl, 0); |
---|
| 183 | + EXT4_I(inode_bl)->i_disksize = inode_bl->i_size; |
---|
182 | 184 | inode_bl->i_mode = S_IFREG; |
---|
183 | 185 | if (ext4_has_feature_extents(sb)) { |
---|
184 | 186 | ext4_set_inode_flag(inode_bl, EXT4_INODE_EXTENTS); |
---|
.. | .. |
---|
494 | 496 | if (ext4_is_quota_file(inode)) |
---|
495 | 497 | return err; |
---|
496 | 498 | |
---|
| 499 | + err = dquot_initialize(inode); |
---|
| 500 | + if (err) |
---|
| 501 | + return err; |
---|
| 502 | + |
---|
497 | 503 | err = ext4_get_inode_loc(inode, &iloc); |
---|
498 | 504 | if (err) |
---|
499 | 505 | return err; |
---|
.. | .. |
---|
508 | 514 | } else { |
---|
509 | 515 | brelse(iloc.bh); |
---|
510 | 516 | } |
---|
511 | | - |
---|
512 | | - err = dquot_initialize(inode); |
---|
513 | | - if (err) |
---|
514 | | - return err; |
---|
515 | 517 | |
---|
516 | 518 | handle = ext4_journal_start(inode, EXT4_HT_QUOTA, |
---|
517 | 519 | EXT4_QUOTA_INIT_BLOCKS(sb) + |
---|
.. | .. |
---|
610 | 612 | { |
---|
611 | 613 | struct ext4_sb_info *sbi = EXT4_SB(sb); |
---|
612 | 614 | __u32 flags; |
---|
| 615 | + int ret; |
---|
613 | 616 | |
---|
614 | 617 | if (!capable(CAP_SYS_ADMIN)) |
---|
615 | 618 | return -EPERM; |
---|
.. | .. |
---|
628 | 631 | |
---|
629 | 632 | switch (flags) { |
---|
630 | 633 | case EXT4_GOING_FLAGS_DEFAULT: |
---|
631 | | - freeze_bdev(sb->s_bdev); |
---|
| 634 | + ret = freeze_bdev(sb->s_bdev); |
---|
| 635 | + if (ret) |
---|
| 636 | + return ret; |
---|
632 | 637 | set_bit(EXT4_FLAGS_SHUTDOWN, &sbi->s_ext4_flags); |
---|
633 | 638 | thaw_bdev(sb->s_bdev); |
---|
634 | 639 | break; |
---|
.. | .. |
---|
1326 | 1331 | |
---|
1327 | 1332 | long ext4_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) |
---|
1328 | 1333 | { |
---|
1329 | | - long ret; |
---|
1330 | | - |
---|
1331 | | - ext4_fc_start_update(file_inode(filp)); |
---|
1332 | | - ret = __ext4_ioctl(filp, cmd, arg); |
---|
1333 | | - ext4_fc_stop_update(file_inode(filp)); |
---|
1334 | | - |
---|
1335 | | - return ret; |
---|
| 1334 | + return __ext4_ioctl(filp, cmd, arg); |
---|
1336 | 1335 | } |
---|
1337 | 1336 | |
---|
1338 | 1337 | #ifdef CONFIG_COMPAT |
---|