Lines Matching refs:sb

79 static int ext4_validate_inode_bitmap(struct super_block *sb,  in ext4_validate_inode_bitmap()  argument
85 struct ext4_group_info *grp = ext4_get_group_info(sb, block_group); in ext4_validate_inode_bitmap()
92 ext4_lock_group(sb, block_group); in ext4_validate_inode_bitmap()
95 blk = ext4_inode_bitmap(sb, desc); in ext4_validate_inode_bitmap()
96 if (!ext4_inode_bitmap_csum_verify(sb, block_group, desc, bh, in ext4_validate_inode_bitmap()
97 EXT4_INODES_PER_GROUP(sb) / 8)) { in ext4_validate_inode_bitmap()
98 ext4_unlock_group(sb, block_group); in ext4_validate_inode_bitmap()
99 ext4_error(sb, "Corrupt inode bitmap - block_group = %u, " in ext4_validate_inode_bitmap()
101 ext4_mark_group_bitmap_corrupted(sb, block_group, in ext4_validate_inode_bitmap()
107 ext4_unlock_group(sb, block_group); in ext4_validate_inode_bitmap()
118 ext4_read_inode_bitmap(struct super_block *sb, ext4_group_t block_group) in ext4_read_inode_bitmap() argument
121 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_read_inode_bitmap()
126 desc = ext4_get_group_desc(sb, block_group, NULL); in ext4_read_inode_bitmap()
130 bitmap_blk = ext4_inode_bitmap(sb, desc); in ext4_read_inode_bitmap()
133 ext4_error(sb, "Invalid inode bitmap blk %llu in " in ext4_read_inode_bitmap()
135 ext4_mark_group_bitmap_corrupted(sb, block_group, in ext4_read_inode_bitmap()
139 bh = sb_getblk(sb, bitmap_blk); in ext4_read_inode_bitmap()
141 ext4_warning(sb, "Cannot read inode bitmap - " in ext4_read_inode_bitmap()
155 ext4_lock_group(sb, block_group); in ext4_read_inode_bitmap()
156 if (ext4_has_group_desc_csum(sb) && in ext4_read_inode_bitmap()
159 ext4_unlock_group(sb, block_group); in ext4_read_inode_bitmap()
161 ext4_error(sb, "Inode bitmap for bg 0 marked " in ext4_read_inode_bitmap()
166 memset(bh->b_data, 0, (EXT4_INODES_PER_GROUP(sb) + 7) / 8); in ext4_read_inode_bitmap()
167 ext4_mark_bitmap_end(EXT4_INODES_PER_GROUP(sb), in ext4_read_inode_bitmap()
168 sb->s_blocksize * 8, bh->b_data); in ext4_read_inode_bitmap()
172 ext4_unlock_group(sb, block_group); in ext4_read_inode_bitmap()
176 ext4_unlock_group(sb, block_group); in ext4_read_inode_bitmap()
190 trace_ext4_load_inode_bitmap(sb, block_group); in ext4_read_inode_bitmap()
197 ext4_error(sb, "Cannot read inode bitmap - " in ext4_read_inode_bitmap()
200 ext4_mark_group_bitmap_corrupted(sb, block_group, in ext4_read_inode_bitmap()
206 err = ext4_validate_inode_bitmap(sb, desc, block_group, bh); in ext4_read_inode_bitmap()
233 struct super_block *sb = inode->i_sb; in ext4_free_inode() local
246 if (!sb) { in ext4_free_inode()
252 ext4_msg(sb, KERN_ERR, "%s:%d: inode #%lu: count=%d", in ext4_free_inode()
258 ext4_msg(sb, KERN_ERR, "%s:%d: inode #%lu: nlink=%d\n", in ext4_free_inode()
262 sbi = EXT4_SB(sb); in ext4_free_inode()
282 if (ino < EXT4_FIRST_INO(sb) || ino > le32_to_cpu(es->s_inodes_count)) { in ext4_free_inode()
283 ext4_error(sb, "reserved or nonexistent inode %lu", ino); in ext4_free_inode()
286 block_group = (ino - 1) / EXT4_INODES_PER_GROUP(sb); in ext4_free_inode()
287 bit = (ino - 1) % EXT4_INODES_PER_GROUP(sb); in ext4_free_inode()
288 bitmap_bh = ext4_read_inode_bitmap(sb, block_group); in ext4_free_inode()
290 grp = ext4_get_group_info(sb, block_group); in ext4_free_inode()
307 gdp = ext4_get_group_desc(sb, block_group, &bh2); in ext4_free_inode()
312 ext4_lock_group(sb, block_group); in ext4_free_inode()
315 ext4_unlock_group(sb, block_group); in ext4_free_inode()
319 count = ext4_free_inodes_count(sb, gdp) + 1; in ext4_free_inode()
320 ext4_free_inodes_set(sb, gdp, count); in ext4_free_inode()
322 count = ext4_used_dirs_count(sb, gdp) - 1; in ext4_free_inode()
323 ext4_used_dirs_set(sb, gdp, count); in ext4_free_inode()
326 ext4_inode_bitmap_csum_set(sb, block_group, gdp, bitmap_bh, in ext4_free_inode()
327 EXT4_INODES_PER_GROUP(sb) / 8); in ext4_free_inode()
328 ext4_group_desc_csum_set(sb, block_group, gdp); in ext4_free_inode()
329 ext4_unlock_group(sb, block_group); in ext4_free_inode()
348 ext4_error(sb, "bit already cleared for inode %lu", ino); in ext4_free_inode()
349 ext4_mark_group_bitmap_corrupted(sb, block_group, in ext4_free_inode()
355 ext4_std_error(sb, fatal); in ext4_free_inode()
369 static void get_orlov_stats(struct super_block *sb, ext4_group_t g, in get_orlov_stats() argument
373 struct flex_groups *flex_group = EXT4_SB(sb)->s_flex_groups; in get_orlov_stats()
382 desc = ext4_get_group_desc(sb, g, NULL); in get_orlov_stats()
384 stats->free_inodes = ext4_free_inodes_count(sb, desc); in get_orlov_stats()
385 stats->free_clusters = ext4_free_group_clusters(sb, desc); in get_orlov_stats()
386 stats->used_dirs = ext4_used_dirs_count(sb, desc); in get_orlov_stats()
415 static int find_group_orlov(struct super_block *sb, struct inode *parent, in find_group_orlov() argument
420 struct ext4_sb_info *sbi = EXT4_SB(sb); in find_group_orlov()
421 ext4_group_t real_ngroups = ext4_get_groups_count(sb); in find_group_orlov()
422 int inodes_per_group = EXT4_INODES_PER_GROUP(sb); in find_group_orlov()
450 ((parent == d_inode(sb->s_root)) || in find_group_orlov()
465 get_orlov_stats(sb, g, flex_size, &stats); in find_group_orlov()
497 desc = ext4_get_group_desc(sb, grp+i, NULL); in find_group_orlov()
498 if (desc && ext4_free_inodes_count(sb, desc)) { in find_group_orlov()
510 min_clusters = avefreec - EXT4_CLUSTERS_PER_GROUP(sb)*flex_size / 4; in find_group_orlov()
524 get_orlov_stats(sb, grp, flex_size, &stats); in find_group_orlov()
541 desc = ext4_get_group_desc(sb, grp, NULL); in find_group_orlov()
543 grp_free = ext4_free_inodes_count(sb, desc); in find_group_orlov()
563 static int find_group_other(struct super_block *sb, struct inode *parent, in find_group_other() argument
567 ext4_group_t i, last, ngroups = ext4_get_groups_count(sb); in find_group_other()
569 int flex_size = ext4_flex_bg_size(EXT4_SB(sb)); in find_group_other()
587 desc = ext4_get_group_desc(sb, i, NULL); in find_group_other()
588 if (desc && ext4_free_inodes_count(sb, desc)) { in find_group_other()
606 return find_group_orlov(sb, parent, group, mode, NULL); in find_group_other()
613 desc = ext4_get_group_desc(sb, *group, NULL); in find_group_other()
614 if (desc && ext4_free_inodes_count(sb, desc) && in find_group_other()
615 ext4_free_group_clusters(sb, desc)) in find_group_other()
637 desc = ext4_get_group_desc(sb, *group, NULL); in find_group_other()
638 if (desc && ext4_free_inodes_count(sb, desc) && in find_group_other()
639 ext4_free_group_clusters(sb, desc)) in find_group_other()
651 desc = ext4_get_group_desc(sb, *group, NULL); in find_group_other()
652 if (desc && ext4_free_inodes_count(sb, desc)) in find_group_other()
668 static int recently_deleted(struct super_block *sb, ext4_group_t group, int ino) in recently_deleted() argument
673 int inodes_per_block = EXT4_SB(sb)->s_inodes_per_block; in recently_deleted()
678 gdp = ext4_get_group_desc(sb, group, NULL); in recently_deleted()
682 bh = sb_find_get_block(sb, ext4_inode_table(sb, gdp) + in recently_deleted()
691 offset = (ino % inodes_per_block) * EXT4_INODE_SIZE(sb); in recently_deleted()
711 static int find_inode_bit(struct super_block *sb, ext4_group_t group, in find_inode_bit() argument
717 EXT4_INODES_PER_GROUP(sb), *ino); in find_inode_bit()
718 if (*ino >= EXT4_INODES_PER_GROUP(sb)) in find_inode_bit()
721 if ((EXT4_SB(sb)->s_journal == NULL) && in find_inode_bit()
722 recently_deleted(sb, group, *ino)) { in find_inode_bit()
724 if (*ino < EXT4_INODES_PER_GROUP(sb)) in find_inode_bit()
748 struct super_block *sb; in __ext4_new_inode() local
768 sb = dir->i_sb; in __ext4_new_inode()
769 sbi = EXT4_SB(sb); in __ext4_new_inode()
795 __ext4_xattr_set_credits(sb, NULL /* inode */, in __ext4_new_inode()
815 __ext4_xattr_set_credits(sb, NULL /* inode */, in __ext4_new_inode()
821 nblocks += __ext4_xattr_set_credits(sb, in __ext4_new_inode()
827 ngroups = ext4_get_groups_count(sb); in __ext4_new_inode()
829 inode = new_inode(sb); in __ext4_new_inode()
843 } else if (test_opt(sb, GRPID)) { in __ext4_new_inode()
850 if (ext4_has_feature_project(sb) && in __ext4_new_inode()
864 group = (goal - 1) / EXT4_INODES_PER_GROUP(sb); in __ext4_new_inode()
865 ino = (goal - 1) % EXT4_INODES_PER_GROUP(sb); in __ext4_new_inode()
871 ret2 = find_group_orlov(sb, dir, &group, mode, qstr); in __ext4_new_inode()
873 ret2 = find_group_other(sb, dir, &group, mode); in __ext4_new_inode()
889 gdp = ext4_get_group_desc(sb, group, &group_desc_bh); in __ext4_new_inode()
896 if (ext4_free_inodes_count(sb, gdp) == 0) in __ext4_new_inode()
899 grp = ext4_get_group_info(sb, group); in __ext4_new_inode()
905 inode_bitmap_bh = ext4_read_inode_bitmap(sb, group); in __ext4_new_inode()
914 ret2 = find_inode_bit(sb, group, inode_bitmap_bh, &ino); in __ext4_new_inode()
918 if (group == 0 && (ino + 1) < EXT4_FIRST_INO(sb)) { in __ext4_new_inode()
919 ext4_error(sb, "reserved inode found cleared - " in __ext4_new_inode()
921 ext4_mark_group_bitmap_corrupted(sb, group, in __ext4_new_inode()
933 ext4_std_error(sb, err); in __ext4_new_inode()
940 ext4_std_error(sb, err); in __ext4_new_inode()
943 ext4_lock_group(sb, group); in __ext4_new_inode()
949 ret2 = find_inode_bit(sb, group, inode_bitmap_bh, &ino); in __ext4_new_inode()
957 ext4_unlock_group(sb, group); in __ext4_new_inode()
962 if (ino < EXT4_INODES_PER_GROUP(sb)) in __ext4_new_inode()
975 ext4_std_error(sb, err); in __ext4_new_inode()
982 ext4_std_error(sb, err); in __ext4_new_inode()
987 if (ext4_has_group_desc_csum(sb) && in __ext4_new_inode()
991 block_bitmap_bh = ext4_read_block_bitmap(sb, group); in __ext4_new_inode()
1000 ext4_std_error(sb, err); in __ext4_new_inode()
1008 ext4_lock_group(sb, group); in __ext4_new_inode()
1009 if (ext4_has_group_desc_csum(sb) && in __ext4_new_inode()
1012 ext4_free_group_clusters_set(sb, gdp, in __ext4_new_inode()
1013 ext4_free_clusters_after_init(sb, group, gdp)); in __ext4_new_inode()
1014 ext4_block_bitmap_csum_set(sb, group, gdp, in __ext4_new_inode()
1016 ext4_group_desc_csum_set(sb, group, gdp); in __ext4_new_inode()
1018 ext4_unlock_group(sb, group); in __ext4_new_inode()
1022 ext4_std_error(sb, err); in __ext4_new_inode()
1028 if (ext4_has_group_desc_csum(sb)) { in __ext4_new_inode()
1030 struct ext4_group_info *grp = ext4_get_group_info(sb, group); in __ext4_new_inode()
1033 ext4_lock_group(sb, group); /* while we modify the bg desc */ in __ext4_new_inode()
1034 free = EXT4_INODES_PER_GROUP(sb) - in __ext4_new_inode()
1035 ext4_itable_unused_count(sb, gdp); in __ext4_new_inode()
1046 ext4_itable_unused_set(sb, gdp, in __ext4_new_inode()
1047 (EXT4_INODES_PER_GROUP(sb) - ino)); in __ext4_new_inode()
1050 ext4_lock_group(sb, group); in __ext4_new_inode()
1053 ext4_free_inodes_set(sb, gdp, ext4_free_inodes_count(sb, gdp) - 1); in __ext4_new_inode()
1055 ext4_used_dirs_set(sb, gdp, ext4_used_dirs_count(sb, gdp) + 1); in __ext4_new_inode()
1062 if (ext4_has_group_desc_csum(sb)) { in __ext4_new_inode()
1063 ext4_inode_bitmap_csum_set(sb, group, gdp, inode_bitmap_bh, in __ext4_new_inode()
1064 EXT4_INODES_PER_GROUP(sb) / 8); in __ext4_new_inode()
1065 ext4_group_desc_csum_set(sb, group, gdp); in __ext4_new_inode()
1067 ext4_unlock_group(sb, group); in __ext4_new_inode()
1072 ext4_std_error(sb, err); in __ext4_new_inode()
1085 inode->i_ino = ino + group * EXT4_INODES_PER_GROUP(sb); in __ext4_new_inode()
1113 ext4_error(sb, "failed to insert inode %lu: doubly allocated?", in __ext4_new_inode()
1115 ext4_mark_group_bitmap_corrupted(sb, group, in __ext4_new_inode()
1122 if (ext4_has_metadata_csum(sb)) { in __ext4_new_inode()
1137 if (ext4_has_feature_inline_data(sb)) in __ext4_new_inode()
1165 if (ext4_has_feature_extents(sb)) { in __ext4_new_inode()
1180 ext4_std_error(sb, err); in __ext4_new_inode()
1203 struct inode *ext4_orphan_get(struct super_block *sb, unsigned long ino) in ext4_orphan_get() argument
1205 unsigned long max_ino = le32_to_cpu(EXT4_SB(sb)->s_es->s_inodes_count); in ext4_orphan_get()
1212 if (ino < EXT4_FIRST_INO(sb) || ino > max_ino) in ext4_orphan_get()
1215 block_group = (ino - 1) / EXT4_INODES_PER_GROUP(sb); in ext4_orphan_get()
1216 bit = (ino - 1) % EXT4_INODES_PER_GROUP(sb); in ext4_orphan_get()
1217 bitmap_bh = ext4_read_inode_bitmap(sb, block_group); in ext4_orphan_get()
1228 inode = ext4_iget(sb, ino); in ext4_orphan_get()
1231 ext4_error(sb, "couldn't read orphan inode %lu (err %d)", in ext4_orphan_get()
1252 ext4_error(sb, "bad orphan inode %lu", ino); in ext4_orphan_get()
1273 unsigned long ext4_count_free_inodes(struct super_block *sb) in ext4_count_free_inodes() argument
1277 ext4_group_t i, ngroups = ext4_get_groups_count(sb); in ext4_count_free_inodes()
1283 es = EXT4_SB(sb)->s_es; in ext4_count_free_inodes()
1288 gdp = ext4_get_group_desc(sb, i, NULL); in ext4_count_free_inodes()
1291 desc_count += ext4_free_inodes_count(sb, gdp); in ext4_count_free_inodes()
1293 bitmap_bh = ext4_read_inode_bitmap(sb, i); in ext4_count_free_inodes()
1300 EXT4_INODES_PER_GROUP(sb) / 8); in ext4_count_free_inodes()
1302 (unsigned long) i, ext4_free_inodes_count(sb, gdp), x); in ext4_count_free_inodes()
1313 gdp = ext4_get_group_desc(sb, i, NULL); in ext4_count_free_inodes()
1316 desc_count += ext4_free_inodes_count(sb, gdp); in ext4_count_free_inodes()
1324 unsigned long ext4_count_dirs(struct super_block * sb) in ext4_count_dirs() argument
1327 ext4_group_t i, ngroups = ext4_get_groups_count(sb); in ext4_count_dirs()
1330 struct ext4_group_desc *gdp = ext4_get_group_desc(sb, i, NULL); in ext4_count_dirs()
1333 count += ext4_used_dirs_count(sb, gdp); in ext4_count_dirs()
1346 int ext4_init_inode_table(struct super_block *sb, ext4_group_t group, in ext4_init_inode_table() argument
1349 struct ext4_group_info *grp = ext4_get_group_info(sb, group); in ext4_init_inode_table()
1350 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_init_inode_table()
1358 if (sb_rdonly(sb)) { in ext4_init_inode_table()
1363 gdp = ext4_get_group_desc(sb, group, &group_desc_bh); in ext4_init_inode_table()
1374 handle = ext4_journal_start_sb(sb, EXT4_HT_MISC, 1); in ext4_init_inode_table()
1387 used_blks = DIV_ROUND_UP((EXT4_INODES_PER_GROUP(sb) - in ext4_init_inode_table()
1388 ext4_itable_unused_count(sb, gdp)), in ext4_init_inode_table()
1392 ((group == 0) && ((EXT4_INODES_PER_GROUP(sb) - in ext4_init_inode_table()
1393 ext4_itable_unused_count(sb, gdp)) < in ext4_init_inode_table()
1394 EXT4_FIRST_INO(sb)))) { in ext4_init_inode_table()
1395 ext4_error(sb, "Something is wrong with group %u: " in ext4_init_inode_table()
1399 ext4_itable_unused_count(sb, gdp)); in ext4_init_inode_table()
1404 blk = ext4_inode_table(sb, gdp) + used_blks; in ext4_init_inode_table()
1423 ret = sb_issue_zeroout(sb, blk, num, GFP_NOFS); in ext4_init_inode_table()
1427 blkdev_issue_flush(sb->s_bdev, GFP_NOFS, NULL); in ext4_init_inode_table()
1430 ext4_lock_group(sb, group); in ext4_init_inode_table()
1432 ext4_group_desc_csum_set(sb, group, gdp); in ext4_init_inode_table()
1433 ext4_unlock_group(sb, group); in ext4_init_inode_table()