diff options
Diffstat (limited to 'fs/ext3/resize.c')
-rw-r--r-- | fs/ext3/resize.c | 33 |
1 files changed, 17 insertions, 16 deletions
diff --git a/fs/ext3/resize.c b/fs/ext3/resize.c index 1be78b4b4de..1041dab6de2 100644 --- a/fs/ext3/resize.c +++ b/fs/ext3/resize.c | |||
@@ -31,7 +31,7 @@ static int verify_group_input(struct super_block *sb, | |||
31 | unsigned start = le32_to_cpu(es->s_blocks_count); | 31 | unsigned start = le32_to_cpu(es->s_blocks_count); |
32 | unsigned end = start + input->blocks_count; | 32 | unsigned end = start + input->blocks_count; |
33 | unsigned group = input->group; | 33 | unsigned group = input->group; |
34 | unsigned itend = input->inode_table + EXT3_SB(sb)->s_itb_per_group; | 34 | unsigned itend = input->inode_table + sbi->s_itb_per_group; |
35 | unsigned overhead = ext3_bg_has_super(sb, group) ? | 35 | unsigned overhead = ext3_bg_has_super(sb, group) ? |
36 | (1 + ext3_bg_num_gdb(sb, group) + | 36 | (1 + ext3_bg_num_gdb(sb, group) + |
37 | le16_to_cpu(es->s_reserved_gdt_blocks)) : 0; | 37 | le16_to_cpu(es->s_reserved_gdt_blocks)) : 0; |
@@ -340,7 +340,7 @@ static int verify_reserved_gdb(struct super_block *sb, | |||
340 | while ((grp = ext3_list_backups(sb, &three, &five, &seven)) < end) { | 340 | while ((grp = ext3_list_backups(sb, &three, &five, &seven)) < end) { |
341 | if (le32_to_cpu(*p++) != grp * EXT3_BLOCKS_PER_GROUP(sb) + blk){ | 341 | if (le32_to_cpu(*p++) != grp * EXT3_BLOCKS_PER_GROUP(sb) + blk){ |
342 | ext3_warning(sb, __FUNCTION__, | 342 | ext3_warning(sb, __FUNCTION__, |
343 | "reserved GDT %ld missing grp %d (%ld)\n", | 343 | "reserved GDT %ld missing grp %d (%ld)", |
344 | blk, grp, | 344 | blk, grp, |
345 | grp * EXT3_BLOCKS_PER_GROUP(sb) + blk); | 345 | grp * EXT3_BLOCKS_PER_GROUP(sb) + blk); |
346 | return -EINVAL; | 346 | return -EINVAL; |
@@ -393,7 +393,7 @@ static int add_new_gdb(handle_t *handle, struct inode *inode, | |||
393 | if (EXT3_SB(sb)->s_sbh->b_blocknr != | 393 | if (EXT3_SB(sb)->s_sbh->b_blocknr != |
394 | le32_to_cpu(EXT3_SB(sb)->s_es->s_first_data_block)) { | 394 | le32_to_cpu(EXT3_SB(sb)->s_es->s_first_data_block)) { |
395 | ext3_warning(sb, __FUNCTION__, | 395 | ext3_warning(sb, __FUNCTION__, |
396 | "won't resize using backup superblock at %llu\n", | 396 | "won't resize using backup superblock at %llu", |
397 | (unsigned long long)EXT3_SB(sb)->s_sbh->b_blocknr); | 397 | (unsigned long long)EXT3_SB(sb)->s_sbh->b_blocknr); |
398 | return -EPERM; | 398 | return -EPERM; |
399 | } | 399 | } |
@@ -417,7 +417,7 @@ static int add_new_gdb(handle_t *handle, struct inode *inode, | |||
417 | data = (__u32 *)dind->b_data; | 417 | data = (__u32 *)dind->b_data; |
418 | if (le32_to_cpu(data[gdb_num % EXT3_ADDR_PER_BLOCK(sb)]) != gdblock) { | 418 | if (le32_to_cpu(data[gdb_num % EXT3_ADDR_PER_BLOCK(sb)]) != gdblock) { |
419 | ext3_warning(sb, __FUNCTION__, | 419 | ext3_warning(sb, __FUNCTION__, |
420 | "new group %u GDT block %lu not reserved\n", | 420 | "new group %u GDT block %lu not reserved", |
421 | input->group, gdblock); | 421 | input->group, gdblock); |
422 | err = -EINVAL; | 422 | err = -EINVAL; |
423 | goto exit_dind; | 423 | goto exit_dind; |
@@ -540,7 +540,7 @@ static int reserve_backup_gdb(handle_t *handle, struct inode *inode, | |||
540 | for (res = 0; res < reserved_gdb; res++, blk++) { | 540 | for (res = 0; res < reserved_gdb; res++, blk++) { |
541 | if (le32_to_cpu(*data) != blk) { | 541 | if (le32_to_cpu(*data) != blk) { |
542 | ext3_warning(sb, __FUNCTION__, | 542 | ext3_warning(sb, __FUNCTION__, |
543 | "reserved block %lu not at offset %ld\n", | 543 | "reserved block %lu not at offset %ld", |
544 | blk, (long)(data - (__u32 *)dind->b_data)); | 544 | blk, (long)(data - (__u32 *)dind->b_data)); |
545 | err = -EINVAL; | 545 | err = -EINVAL; |
546 | goto exit_bh; | 546 | goto exit_bh; |
@@ -683,7 +683,7 @@ exit_err: | |||
683 | if (err) { | 683 | if (err) { |
684 | ext3_warning(sb, __FUNCTION__, | 684 | ext3_warning(sb, __FUNCTION__, |
685 | "can't update backup for group %d (err %d), " | 685 | "can't update backup for group %d (err %d), " |
686 | "forcing fsck on next reboot\n", group, err); | 686 | "forcing fsck on next reboot", group, err); |
687 | sbi->s_mount_state &= ~EXT3_VALID_FS; | 687 | sbi->s_mount_state &= ~EXT3_VALID_FS; |
688 | sbi->s_es->s_state &= ~cpu_to_le16(EXT3_VALID_FS); | 688 | sbi->s_es->s_state &= ~cpu_to_le16(EXT3_VALID_FS); |
689 | mark_buffer_dirty(sbi->s_sbh); | 689 | mark_buffer_dirty(sbi->s_sbh); |
@@ -722,7 +722,7 @@ int ext3_group_add(struct super_block *sb, struct ext3_new_group_data *input) | |||
722 | if (gdb_off == 0 && !EXT3_HAS_RO_COMPAT_FEATURE(sb, | 722 | if (gdb_off == 0 && !EXT3_HAS_RO_COMPAT_FEATURE(sb, |
723 | EXT3_FEATURE_RO_COMPAT_SPARSE_SUPER)) { | 723 | EXT3_FEATURE_RO_COMPAT_SPARSE_SUPER)) { |
724 | ext3_warning(sb, __FUNCTION__, | 724 | ext3_warning(sb, __FUNCTION__, |
725 | "Can't resize non-sparse filesystem further\n"); | 725 | "Can't resize non-sparse filesystem further"); |
726 | return -EPERM; | 726 | return -EPERM; |
727 | } | 727 | } |
728 | 728 | ||
@@ -730,13 +730,13 @@ int ext3_group_add(struct super_block *sb, struct ext3_new_group_data *input) | |||
730 | if (!EXT3_HAS_COMPAT_FEATURE(sb, | 730 | if (!EXT3_HAS_COMPAT_FEATURE(sb, |
731 | EXT3_FEATURE_COMPAT_RESIZE_INODE)){ | 731 | EXT3_FEATURE_COMPAT_RESIZE_INODE)){ |
732 | ext3_warning(sb, __FUNCTION__, | 732 | ext3_warning(sb, __FUNCTION__, |
733 | "No reserved GDT blocks, can't resize\n"); | 733 | "No reserved GDT blocks, can't resize"); |
734 | return -EPERM; | 734 | return -EPERM; |
735 | } | 735 | } |
736 | inode = iget(sb, EXT3_RESIZE_INO); | 736 | inode = iget(sb, EXT3_RESIZE_INO); |
737 | if (!inode || is_bad_inode(inode)) { | 737 | if (!inode || is_bad_inode(inode)) { |
738 | ext3_warning(sb, __FUNCTION__, | 738 | ext3_warning(sb, __FUNCTION__, |
739 | "Error opening resize inode\n"); | 739 | "Error opening resize inode"); |
740 | iput(inode); | 740 | iput(inode); |
741 | return -ENOENT; | 741 | return -ENOENT; |
742 | } | 742 | } |
@@ -764,9 +764,10 @@ int ext3_group_add(struct super_block *sb, struct ext3_new_group_data *input) | |||
764 | } | 764 | } |
765 | 765 | ||
766 | lock_super(sb); | 766 | lock_super(sb); |
767 | if (input->group != EXT3_SB(sb)->s_groups_count) { | 767 | if (input->group != sbi->s_groups_count) { |
768 | ext3_warning(sb, __FUNCTION__, | 768 | ext3_warning(sb, __FUNCTION__, |
769 | "multiple resizers run on filesystem!\n"); | 769 | "multiple resizers run on filesystem!"); |
770 | err = -EBUSY; | ||
770 | goto exit_journal; | 771 | goto exit_journal; |
771 | } | 772 | } |
772 | 773 | ||
@@ -798,7 +799,7 @@ int ext3_group_add(struct super_block *sb, struct ext3_new_group_data *input) | |||
798 | * data. So we need to be careful to set all of the relevant | 799 | * data. So we need to be careful to set all of the relevant |
799 | * group descriptor data etc. *before* we enable the group. | 800 | * group descriptor data etc. *before* we enable the group. |
800 | * | 801 | * |
801 | * The key field here is EXT3_SB(sb)->s_groups_count: as long as | 802 | * The key field here is sbi->s_groups_count: as long as |
802 | * that retains its old value, nobody is going to access the new | 803 | * that retains its old value, nobody is going to access the new |
803 | * group. | 804 | * group. |
804 | * | 805 | * |
@@ -858,7 +859,7 @@ int ext3_group_add(struct super_block *sb, struct ext3_new_group_data *input) | |||
858 | smp_wmb(); | 859 | smp_wmb(); |
859 | 860 | ||
860 | /* Update the global fs size fields */ | 861 | /* Update the global fs size fields */ |
861 | EXT3_SB(sb)->s_groups_count++; | 862 | sbi->s_groups_count++; |
862 | 863 | ||
863 | ext3_journal_dirty_metadata(handle, primary); | 864 | ext3_journal_dirty_metadata(handle, primary); |
864 | 865 | ||
@@ -873,7 +874,7 @@ int ext3_group_add(struct super_block *sb, struct ext3_new_group_data *input) | |||
873 | percpu_counter_mod(&sbi->s_freeinodes_counter, | 874 | percpu_counter_mod(&sbi->s_freeinodes_counter, |
874 | EXT3_INODES_PER_GROUP(sb)); | 875 | EXT3_INODES_PER_GROUP(sb)); |
875 | 876 | ||
876 | ext3_journal_dirty_metadata(handle, EXT3_SB(sb)->s_sbh); | 877 | ext3_journal_dirty_metadata(handle, sbi->s_sbh); |
877 | sb->s_dirt = 1; | 878 | sb->s_dirt = 1; |
878 | 879 | ||
879 | exit_journal: | 880 | exit_journal: |
@@ -936,7 +937,7 @@ int ext3_group_extend(struct super_block *sb, struct ext3_super_block *es, | |||
936 | 937 | ||
937 | if (last == 0) { | 938 | if (last == 0) { |
938 | ext3_warning(sb, __FUNCTION__, | 939 | ext3_warning(sb, __FUNCTION__, |
939 | "need to use ext2online to resize further\n"); | 940 | "need to use ext2online to resize further"); |
940 | return -EPERM; | 941 | return -EPERM; |
941 | } | 942 | } |
942 | 943 | ||
@@ -972,7 +973,7 @@ int ext3_group_extend(struct super_block *sb, struct ext3_super_block *es, | |||
972 | lock_super(sb); | 973 | lock_super(sb); |
973 | if (o_blocks_count != le32_to_cpu(es->s_blocks_count)) { | 974 | if (o_blocks_count != le32_to_cpu(es->s_blocks_count)) { |
974 | ext3_warning(sb, __FUNCTION__, | 975 | ext3_warning(sb, __FUNCTION__, |
975 | "multiple resizers run on filesystem!\n"); | 976 | "multiple resizers run on filesystem!"); |
976 | err = -EBUSY; | 977 | err = -EBUSY; |
977 | goto exit_put; | 978 | goto exit_put; |
978 | } | 979 | } |