Lines Matching refs:sb

20 static int verify_group_input(struct super_block *sb,  in verify_group_input()  argument
23 struct ext3_sb_info *sbi = EXT3_SB(sb); in verify_group_input()
29 unsigned overhead = ext3_bg_has_super(sb, group) ? in verify_group_input()
30 (1 + ext3_bg_num_gdb(sb, group) + in verify_group_input()
40 if (test_opt(sb, DEBUG)) in verify_group_input()
43 ext3_bg_has_super(sb, input->group) ? "normal" : in verify_group_input()
48 ext3_warning(sb, __func__, in verify_group_input()
52 EXT3_BLOCKS_PER_GROUP(sb)) in verify_group_input()
53 ext3_warning(sb, __func__, "Last group not full"); in verify_group_input()
55 ext3_warning(sb, __func__, "Reserved blocks too high (%u)", in verify_group_input()
58 ext3_warning(sb, __func__, "Bad blocks count %u", in verify_group_input()
60 else if (!(bh = sb_bread(sb, end - 1))) in verify_group_input()
61 ext3_warning(sb, __func__, in verify_group_input()
65 ext3_warning(sb, __func__, in verify_group_input()
69 ext3_warning(sb, __func__, in verify_group_input()
74 ext3_warning(sb, __func__, in verify_group_input()
78 ext3_warning(sb, __func__, in verify_group_input()
82 ext3_warning(sb, __func__, in verify_group_input()
86 ext3_warning(sb, __func__, in verify_group_input()
90 ext3_warning(sb, __func__, in verify_group_input()
95 ext3_warning(sb, __func__, in verify_group_input()
101 ext3_warning(sb, __func__, in verify_group_input()
112 static struct buffer_head *bclean(handle_t *handle, struct super_block *sb, in bclean() argument
118 bh = sb_getblk(sb, blk); in bclean()
126 memset(bh->b_data, 0, sb->s_blocksize); in bclean()
188 static int setup_new_group_blocks(struct super_block *sb, in setup_new_group_blocks() argument
191 struct ext3_sb_info *sbi = EXT3_SB(sb); in setup_new_group_blocks()
192 ext3_fsblk_t start = ext3_group_first_block_no(sb, input->group); in setup_new_group_blocks()
193 int reserved_gdb = ext3_bg_has_super(sb, input->group) ? in setup_new_group_blocks()
195 unsigned long gdblocks = ext3_bg_num_gdb(sb, input->group); in setup_new_group_blocks()
204 handle = ext3_journal_start_sb(sb, EXT3_MAX_TRANS_DATA); in setup_new_group_blocks()
215 if (IS_ERR(bh = bclean(handle, sb, input->block_bitmap))) { in setup_new_group_blocks()
220 if (ext3_bg_has_super(sb, input->group)) { in setup_new_group_blocks()
236 gdb = sb_getblk(sb, block); in setup_new_group_blocks()
269 if (IS_ERR(gdb = bclean(handle, sb, block))) { in setup_new_group_blocks()
299 if (IS_ERR(it = bclean(handle, sb, block))) { in setup_new_group_blocks()
316 mark_bitmap_end(input->blocks_count, EXT3_BLOCKS_PER_GROUP(sb), in setup_new_group_blocks()
326 if (IS_ERR(bh = bclean(handle, sb, input->inode_bitmap))) { in setup_new_group_blocks()
331 mark_bitmap_end(EXT3_INODES_PER_GROUP(sb), EXT3_BLOCKS_PER_GROUP(sb), in setup_new_group_blocks()
352 static unsigned ext3_list_backups(struct super_block *sb, unsigned *three, in ext3_list_backups() argument
359 if (!EXT3_HAS_RO_COMPAT_FEATURE(sb, in ext3_list_backups()
386 static int verify_reserved_gdb(struct super_block *sb, in verify_reserved_gdb() argument
390 const unsigned long end = EXT3_SB(sb)->s_groups_count; in verify_reserved_gdb()
398 while ((grp = ext3_list_backups(sb, &three, &five, &seven)) < end) { in verify_reserved_gdb()
399 if (le32_to_cpu(*p++) != grp * EXT3_BLOCKS_PER_GROUP(sb) + blk){ in verify_reserved_gdb()
400 ext3_warning(sb, __func__, in verify_reserved_gdb()
404 grp * EXT3_BLOCKS_PER_GROUP(sb) + blk); in verify_reserved_gdb()
407 if (++gdbackups > EXT3_ADDR_PER_BLOCK(sb)) in verify_reserved_gdb()
431 struct super_block *sb = inode->i_sb; in add_new_gdb() local
432 struct ext3_super_block *es = EXT3_SB(sb)->s_es; in add_new_gdb()
433 unsigned long gdb_num = input->group / EXT3_DESC_PER_BLOCK(sb); in add_new_gdb()
434 ext3_fsblk_t gdblock = EXT3_SB(sb)->s_sbh->b_blocknr + 1 + gdb_num; in add_new_gdb()
442 if (test_opt(sb, DEBUG)) in add_new_gdb()
452 if (EXT3_SB(sb)->s_sbh->b_blocknr != in add_new_gdb()
453 le32_to_cpu(EXT3_SB(sb)->s_es->s_first_data_block)) { in add_new_gdb()
454 ext3_warning(sb, __func__, in add_new_gdb()
456 (unsigned long long)EXT3_SB(sb)->s_sbh->b_blocknr); in add_new_gdb()
460 *primary = sb_bread(sb, gdblock); in add_new_gdb()
464 if ((gdbackups = verify_reserved_gdb(sb, *primary)) < 0) { in add_new_gdb()
470 dind = sb_bread(sb, le32_to_cpu(*data)); in add_new_gdb()
477 if (le32_to_cpu(data[gdb_num % EXT3_ADDR_PER_BLOCK(sb)]) != gdblock) { in add_new_gdb()
478 ext3_warning(sb, __func__, in add_new_gdb()
485 if ((err = ext3_journal_get_write_access(handle, EXT3_SB(sb)->s_sbh))) in add_new_gdb()
502 ext3_warning (sb, __func__, in add_new_gdb()
516 data[gdb_num % EXT3_ADDR_PER_BLOCK(sb)] = 0; in add_new_gdb()
522 inode->i_blocks -= (gdbackups + 1) * sb->s_blocksize >> 9; in add_new_gdb()
526 memset((*primary)->b_data, 0, sb->s_blocksize); in add_new_gdb()
531 o_group_desc = EXT3_SB(sb)->s_group_desc; in add_new_gdb()
533 EXT3_SB(sb)->s_gdb_count * sizeof(struct buffer_head *)); in add_new_gdb()
535 EXT3_SB(sb)->s_group_desc = n_group_desc; in add_new_gdb()
536 EXT3_SB(sb)->s_gdb_count++; in add_new_gdb()
540 err = ext3_journal_dirty_metadata(handle, EXT3_SB(sb)->s_sbh); in add_new_gdb()
582 struct super_block *sb = inode->i_sb; in reserve_backup_gdb() local
583 int reserved_gdb =le16_to_cpu(EXT3_SB(sb)->s_es->s_reserved_gdt_blocks); in reserve_backup_gdb()
598 dind = sb_bread(sb, le32_to_cpu(*data)); in reserve_backup_gdb()
604 blk = EXT3_SB(sb)->s_sbh->b_blocknr + 1 + EXT3_SB(sb)->s_gdb_count; in reserve_backup_gdb()
605 data = (__le32 *)dind->b_data + (EXT3_SB(sb)->s_gdb_count % in reserve_backup_gdb()
606 EXT3_ADDR_PER_BLOCK(sb)); in reserve_backup_gdb()
607 end = (__le32 *)dind->b_data + EXT3_ADDR_PER_BLOCK(sb); in reserve_backup_gdb()
612 ext3_warning(sb, __func__, in reserve_backup_gdb()
620 primary[res] = sb_bread(sb, blk); in reserve_backup_gdb()
625 if ((gdbackups = verify_reserved_gdb(sb, primary[res])) < 0) { in reserve_backup_gdb()
652 blk = input->group * EXT3_BLOCKS_PER_GROUP(sb); in reserve_backup_gdb()
664 inode->i_blocks += reserved_gdb * sb->s_blocksize >> 9; in reserve_backup_gdb()
694 static void update_backups(struct super_block *sb, in update_backups() argument
697 struct ext3_sb_info *sbi = EXT3_SB(sb); in update_backups()
699 const int bpg = EXT3_BLOCKS_PER_GROUP(sb); in update_backups()
704 int rest = sb->s_blocksize - size; in update_backups()
708 handle = ext3_journal_start_sb(sb, EXT3_MAX_TRANS_DATA); in update_backups()
715 while ((group = ext3_list_backups(sb, &three, &five, &seven)) < last) { in update_backups()
724 bh = sb_getblk(sb, group * bpg + blk_off); in update_backups()
761 ext3_warning(sb, __func__, in update_backups()
783 int ext3_group_add(struct super_block *sb, struct ext3_new_group_data *input) in ext3_group_add() argument
785 struct ext3_sb_info *sbi = EXT3_SB(sb); in ext3_group_add()
787 int reserved_gdb = ext3_bg_has_super(sb, input->group) ? in ext3_group_add()
796 gdb_num = input->group / EXT3_DESC_PER_BLOCK(sb); in ext3_group_add()
797 gdb_off = input->group % EXT3_DESC_PER_BLOCK(sb); in ext3_group_add()
799 if (gdb_off == 0 && !EXT3_HAS_RO_COMPAT_FEATURE(sb, in ext3_group_add()
801 ext3_warning(sb, __func__, in ext3_group_add()
808 ext3_warning(sb, __func__, "blocks_count overflow\n"); in ext3_group_add()
812 if (le32_to_cpu(es->s_inodes_count) + EXT3_INODES_PER_GROUP(sb) < in ext3_group_add()
814 ext3_warning(sb, __func__, "inodes_count overflow\n"); in ext3_group_add()
819 if (!EXT3_HAS_COMPAT_FEATURE(sb, in ext3_group_add()
822 ext3_warning(sb, __func__, in ext3_group_add()
826 inode = ext3_iget(sb, EXT3_RESIZE_INO); in ext3_group_add()
828 ext3_warning(sb, __func__, in ext3_group_add()
834 if ((err = verify_group_input(sb, input))) in ext3_group_add()
837 if ((err = setup_new_group_blocks(sb, input))) in ext3_group_add()
847 handle = ext3_journal_start_sb(sb, in ext3_group_add()
848 ext3_bg_has_super(sb, input->group) ? in ext3_group_add()
857 ext3_warning(sb, __func__, in ext3_group_add()
877 if (reserved_gdb && ext3_bg_num_gdb(sb, input->group) && in ext3_group_add()
909 gdp->bg_free_inodes_count = cpu_to_le16(EXT3_INODES_PER_GROUP(sb)); in ext3_group_add()
922 le32_add_cpu(&es->s_inodes_count, EXT3_INODES_PER_GROUP(sb)); in ext3_group_add()
963 EXT3_INODES_PER_GROUP(sb)); in ext3_group_add()
972 update_backups(sb, sbi->s_sbh->b_blocknr, (char *)es, in ext3_group_add()
974 update_backups(sb, primary->b_blocknr, primary->b_data, in ext3_group_add()
991 int ext3_group_extend(struct super_block *sb, struct ext3_super_block *es, in ext3_group_extend() argument
1007 if (test_opt(sb, DEBUG)) in ext3_group_extend()
1015 if (n_blocks_count > (sector_t)(~0ULL) >> (sb->s_blocksize_bits - 9)) { in ext3_group_extend()
1018 sb->s_id, n_blocks_count); in ext3_group_extend()
1020 ext3_warning(sb, __func__, in ext3_group_extend()
1026 ext3_warning(sb, __func__, in ext3_group_extend()
1033 EXT3_BLOCKS_PER_GROUP(sb); in ext3_group_extend()
1036 ext3_warning(sb, __func__, in ext3_group_extend()
1041 add = EXT3_BLOCKS_PER_GROUP(sb) - last; in ext3_group_extend()
1044 ext3_warning(sb, __func__, "blocks_count overflow"); in ext3_group_extend()
1052 ext3_warning(sb, __func__, in ext3_group_extend()
1058 bh = sb_bread(sb, o_blocks_count + add -1); in ext3_group_extend()
1060 ext3_warning(sb, __func__, in ext3_group_extend()
1069 handle = ext3_journal_start_sb(sb, 3); in ext3_group_extend()
1072 ext3_warning(sb, __func__, "error %d on journal start",err); in ext3_group_extend()
1076 mutex_lock(&EXT3_SB(sb)->s_resize_lock); in ext3_group_extend()
1078 ext3_warning(sb, __func__, in ext3_group_extend()
1080 mutex_unlock(&EXT3_SB(sb)->s_resize_lock); in ext3_group_extend()
1087 EXT3_SB(sb)->s_sbh))) { in ext3_group_extend()
1088 ext3_warning(sb, __func__, in ext3_group_extend()
1090 mutex_unlock(&EXT3_SB(sb)->s_resize_lock); in ext3_group_extend()
1095 err = ext3_journal_dirty_metadata(handle, EXT3_SB(sb)->s_sbh); in ext3_group_extend()
1096 mutex_unlock(&EXT3_SB(sb)->s_resize_lock); in ext3_group_extend()
1098 ext3_warning(sb, __func__, in ext3_group_extend()
1105 ext3_free_blocks_sb(handle, sb, o_blocks_count, add, &freed_blocks); in ext3_group_extend()
1110 if (test_opt(sb, DEBUG)) in ext3_group_extend()
1113 update_backups(sb, EXT3_SB(sb)->s_sbh->b_blocknr, (char *)es, in ext3_group_extend()