Lines Matching defs:sb

79 static int ext4_validate_inode_bitmap(struct super_block *sb,
87 if (EXT4_SB(sb)->s_mount_state & EXT4_FC_REPLAY)
90 grp = ext4_get_group_info(sb, block_group);
97 ext4_lock_group(sb, block_group);
100 blk = ext4_inode_bitmap(sb, desc);
101 if (!ext4_inode_bitmap_csum_verify(sb, desc, bh,
102 EXT4_INODES_PER_GROUP(sb) / 8) ||
103 ext4_simulate_fail(sb, EXT4_SIM_IBITMAP_CRC)) {
104 ext4_unlock_group(sb, block_group);
105 ext4_error(sb, "Corrupt inode bitmap - block_group = %u, "
107 ext4_mark_group_bitmap_corrupted(sb, block_group,
113 ext4_unlock_group(sb, block_group);
124 ext4_read_inode_bitmap(struct super_block *sb, ext4_group_t block_group)
127 struct ext4_sb_info *sbi = EXT4_SB(sb);
132 desc = ext4_get_group_desc(sb, block_group, NULL);
136 bitmap_blk = ext4_inode_bitmap(sb, desc);
139 ext4_error(sb, "Invalid inode bitmap blk %llu in "
141 ext4_mark_group_bitmap_corrupted(sb, block_group,
145 bh = sb_getblk(sb, bitmap_blk);
147 ext4_warning(sb, "Cannot read inode bitmap - "
161 ext4_lock_group(sb, block_group);
162 if (ext4_has_group_desc_csum(sb) &&
165 ext4_unlock_group(sb, block_group);
167 ext4_error(sb, "Inode bitmap for bg 0 marked "
172 memset(bh->b_data, 0, (EXT4_INODES_PER_GROUP(sb) + 7) / 8);
173 ext4_mark_bitmap_end(EXT4_INODES_PER_GROUP(sb),
174 sb->s_blocksize * 8, bh->b_data);
178 ext4_unlock_group(sb, block_group);
182 ext4_unlock_group(sb, block_group);
196 trace_ext4_load_inode_bitmap(sb, block_group);
198 ext4_simulate_fail_bh(sb, bh, EXT4_SIM_IBITMAP_EIO);
201 ext4_error_err(sb, EIO, "Cannot read inode bitmap - "
204 ext4_mark_group_bitmap_corrupted(sb, block_group,
210 err = ext4_validate_inode_bitmap(sb, desc, block_group, bh);
237 struct super_block *sb = inode->i_sb;
250 if (!sb) {
256 ext4_msg(sb, KERN_ERR, "%s:%d: inode #%lu: count=%d",
262 ext4_msg(sb, KERN_ERR, "%s:%d: inode #%lu: nlink=%d\n",
266 sbi = EXT4_SB(sb);
281 if (ino < EXT4_FIRST_INO(sb) || ino > le32_to_cpu(es->s_inodes_count)) {
282 ext4_error(sb, "reserved or nonexistent inode %lu", ino);
285 block_group = (ino - 1) / EXT4_INODES_PER_GROUP(sb);
286 bit = (ino - 1) % EXT4_INODES_PER_GROUP(sb);
287 bitmap_bh = ext4_read_inode_bitmap(sb, block_group);
295 grp = ext4_get_group_info(sb, block_group);
303 fatal = ext4_journal_get_write_access(handle, sb, bitmap_bh,
309 gdp = ext4_get_group_desc(sb, block_group, &bh2);
312 fatal = ext4_journal_get_write_access(handle, sb, bh2,
315 ext4_lock_group(sb, block_group);
318 ext4_unlock_group(sb, block_group);
322 count = ext4_free_inodes_count(sb, gdp) + 1;
323 ext4_free_inodes_set(sb, gdp, count);
325 count = ext4_used_dirs_count(sb, gdp) - 1;
326 ext4_used_dirs_set(sb, gdp, count);
330 ext4_inode_bitmap_csum_set(sb, gdp, bitmap_bh,
331 EXT4_INODES_PER_GROUP(sb) / 8);
332 ext4_group_desc_csum_set(sb, block_group, gdp);
333 ext4_unlock_group(sb, block_group);
355 ext4_error(sb, "bit already cleared for inode %lu", ino);
356 ext4_mark_group_bitmap_corrupted(sb, block_group,
362 ext4_std_error(sb, fatal);
376 static void get_orlov_stats(struct super_block *sb, ext4_group_t g,
382 struct flex_groups *fg = sbi_array_rcu_deref(EXT4_SB(sb),
390 desc = ext4_get_group_desc(sb, g, NULL);
392 stats->free_inodes = ext4_free_inodes_count(sb, desc);
393 stats->free_clusters = ext4_free_group_clusters(sb, desc);
394 stats->used_dirs = ext4_used_dirs_count(sb, desc);
423 static int find_group_orlov(struct super_block *sb, struct inode *parent,
428 struct ext4_sb_info *sbi = EXT4_SB(sb);
429 ext4_group_t real_ngroups = ext4_get_groups_count(sb);
430 int inodes_per_group = EXT4_INODES_PER_GROUP(sb);
457 ((parent == d_inode(sb->s_root)) ||
471 get_orlov_stats(sb, g, flex_size, &stats);
503 desc = ext4_get_group_desc(sb, grp+i, NULL);
504 if (desc && ext4_free_inodes_count(sb, desc)) {
516 min_clusters = avefreec - EXT4_CLUSTERS_PER_GROUP(sb)*flex_size / 4;
530 get_orlov_stats(sb, grp, flex_size, &stats);
547 desc = ext4_get_group_desc(sb, grp, NULL);
549 grp_free = ext4_free_inodes_count(sb, desc);
569 static int find_group_other(struct super_block *sb, struct inode *parent,
573 ext4_group_t i, last, ngroups = ext4_get_groups_count(sb);
575 int flex_size = ext4_flex_bg_size(EXT4_SB(sb));
593 desc = ext4_get_group_desc(sb, i, NULL);
594 if (desc && ext4_free_inodes_count(sb, desc)) {
612 return find_group_orlov(sb, parent, group, mode, NULL);
619 desc = ext4_get_group_desc(sb, *group, NULL);
620 if (desc && ext4_free_inodes_count(sb, desc) &&
621 ext4_free_group_clusters(sb, desc))
643 desc = ext4_get_group_desc(sb, *group, NULL);
644 if (desc && ext4_free_inodes_count(sb, desc) &&
645 ext4_free_group_clusters(sb, desc))
657 desc = ext4_get_group_desc(sb, *group, NULL);
658 if (desc && ext4_free_inodes_count(sb, desc))
674 static int recently_deleted(struct super_block *sb, ext4_group_t group, int ino)
679 int inodes_per_block = EXT4_SB(sb)->s_inodes_per_block;
684 gdp = ext4_get_group_desc(sb, group, NULL);
688 bh = sb_find_get_block(sb, ext4_inode_table(sb, gdp) +
697 offset = (ino % inodes_per_block) * EXT4_INODE_SIZE(sb);
717 static int find_inode_bit(struct super_block *sb, ext4_group_t group,
720 bool check_recently_deleted = EXT4_SB(sb)->s_journal == NULL;
721 unsigned long recently_deleted_ino = EXT4_INODES_PER_GROUP(sb);
726 EXT4_INODES_PER_GROUP(sb), *ino);
727 if (*ino >= EXT4_INODES_PER_GROUP(sb))
730 if (check_recently_deleted && recently_deleted(sb, group, *ino)) {
733 if (*ino < EXT4_INODES_PER_GROUP(sb))
739 if (recently_deleted_ino >= EXT4_INODES_PER_GROUP(sb))
751 int ext4_mark_inode_used(struct super_block *sb, int ino)
753 unsigned long max_ino = le32_to_cpu(EXT4_SB(sb)->s_es->s_inodes_count);
760 if (ino < EXT4_FIRST_INO(sb) || ino > max_ino)
763 group = (ino - 1) / EXT4_INODES_PER_GROUP(sb);
764 bit = (ino - 1) % EXT4_INODES_PER_GROUP(sb);
765 inode_bitmap_bh = ext4_read_inode_bitmap(sb, group);
774 gdp = ext4_get_group_desc(sb, group, &group_desc_bh);
785 ext4_std_error(sb, err);
790 ext4_std_error(sb, err);
795 if (ext4_has_group_desc_csum(sb) &&
799 block_bitmap_bh = ext4_read_block_bitmap(sb, group);
810 ext4_lock_group(sb, group);
811 if (ext4_has_group_desc_csum(sb) &&
814 ext4_free_group_clusters_set(sb, gdp,
815 ext4_free_clusters_after_init(sb, group, gdp));
816 ext4_block_bitmap_csum_set(sb, gdp, block_bitmap_bh);
817 ext4_group_desc_csum_set(sb, group, gdp);
819 ext4_unlock_group(sb, group);
823 ext4_std_error(sb, err);
829 if (ext4_has_group_desc_csum(sb)) {
832 ext4_lock_group(sb, group); /* while we modify the bg desc */
833 free = EXT4_INODES_PER_GROUP(sb) -
834 ext4_itable_unused_count(sb, gdp);
846 ext4_itable_unused_set(sb, gdp,
847 (EXT4_INODES_PER_GROUP(sb) - bit - 1));
849 ext4_lock_group(sb, group);
852 ext4_free_inodes_set(sb, gdp, ext4_free_inodes_count(sb, gdp) - 1);
853 if (ext4_has_group_desc_csum(sb)) {
854 ext4_inode_bitmap_csum_set(sb, gdp, inode_bitmap_bh,
855 EXT4_INODES_PER_GROUP(sb) / 8);
856 ext4_group_desc_csum_set(sb, group, gdp);
859 ext4_unlock_group(sb, group);
869 struct super_block *sb = dir->i_sb;
880 __ext4_xattr_set_credits(sb, NULL /* inode */,
899 __ext4_xattr_set_credits(sb, NULL /* inode */,
905 nblocks += __ext4_xattr_set_credits(sb,
930 struct super_block *sb;
950 sb = dir->i_sb;
951 sbi = EXT4_SB(sb);
953 if (unlikely(ext4_forced_shutdown(sb)))
956 ngroups = ext4_get_groups_count(sb);
958 inode = new_inode(sb);
972 } else if (test_opt(sb, GRPID)) {
979 if (ext4_has_feature_project(sb) &&
1008 group = (goal - 1) / EXT4_INODES_PER_GROUP(sb);
1009 ino = (goal - 1) % EXT4_INODES_PER_GROUP(sb);
1015 ret2 = find_group_orlov(sb, dir, &group, mode, qstr);
1017 ret2 = find_group_other(sb, dir, &group, mode);
1033 gdp = ext4_get_group_desc(sb, group, &group_desc_bh);
1040 if (ext4_free_inodes_count(sb, gdp) == 0)
1044 grp = ext4_get_group_info(sb, group);
1054 inode_bitmap_bh = ext4_read_inode_bitmap(sb, group);
1064 ret2 = find_inode_bit(sb, group, inode_bitmap_bh, &ino);
1068 if (group == 0 && (ino + 1) < EXT4_FIRST_INO(sb)) {
1069 ext4_error(sb, "reserved inode found cleared - "
1071 ext4_mark_group_bitmap_corrupted(sb, group,
1080 ext4_trans_default_revoke_credits(sb));
1083 ext4_std_error(sb, err);
1088 err = ext4_journal_get_write_access(handle, sb, inode_bitmap_bh,
1091 ext4_std_error(sb, err);
1094 ext4_lock_group(sb, group);
1100 ret2 = find_inode_bit(sb, group, inode_bitmap_bh, &ino);
1108 ext4_unlock_group(sb, group);
1113 if (ino < EXT4_INODES_PER_GROUP(sb))
1126 ext4_std_error(sb, err);
1131 err = ext4_journal_get_write_access(handle, sb, group_desc_bh,
1134 ext4_std_error(sb, err);
1139 if (ext4_has_group_desc_csum(sb) &&
1143 block_bitmap_bh = ext4_read_block_bitmap(sb, group);
1149 err = ext4_journal_get_write_access(handle, sb, block_bitmap_bh,
1153 ext4_std_error(sb, err);
1161 ext4_lock_group(sb, group);
1162 if (ext4_has_group_desc_csum(sb) &&
1165 ext4_free_group_clusters_set(sb, gdp,
1166 ext4_free_clusters_after_init(sb, group, gdp));
1167 ext4_block_bitmap_csum_set(sb, gdp, block_bitmap_bh);
1168 ext4_group_desc_csum_set(sb, group, gdp);
1170 ext4_unlock_group(sb, group);
1174 ext4_std_error(sb, err);
1180 if (ext4_has_group_desc_csum(sb)) {
1185 grp = ext4_get_group_info(sb, group);
1195 ext4_lock_group(sb, group); /* while we modify the bg desc */
1196 free = EXT4_INODES_PER_GROUP(sb) -
1197 ext4_itable_unused_count(sb, gdp);
1208 ext4_itable_unused_set(sb, gdp,
1209 (EXT4_INODES_PER_GROUP(sb) - ino));
1213 ext4_lock_group(sb, group);
1216 ext4_free_inodes_set(sb, gdp, ext4_free_inodes_count(sb, gdp) - 1);
1218 ext4_used_dirs_set(sb, gdp, ext4_used_dirs_count(sb, gdp) + 1);
1226 if (ext4_has_group_desc_csum(sb)) {
1227 ext4_inode_bitmap_csum_set(sb, gdp, inode_bitmap_bh,
1228 EXT4_INODES_PER_GROUP(sb) / 8);
1229 ext4_group_desc_csum_set(sb, group, gdp);
1231 ext4_unlock_group(sb, group);
1236 ext4_std_error(sb, err);
1250 inode->i_ino = ino + group * EXT4_INODES_PER_GROUP(sb);
1278 ext4_error(sb, "failed to insert inode %lu: doubly allocated?",
1280 ext4_mark_group_bitmap_corrupted(sb, group,
1287 if (ext4_has_metadata_csum(sb)) {
1302 if (ext4_has_feature_inline_data(sb) &&
1331 if (ext4_has_feature_extents(sb)) {
1346 ext4_std_error(sb, err);
1369 struct inode *ext4_orphan_get(struct super_block *sb, unsigned long ino)
1371 unsigned long max_ino = le32_to_cpu(EXT4_SB(sb)->s_es->s_inodes_count);
1378 if (ino < EXT4_FIRST_INO(sb) || ino > max_ino)
1381 block_group = (ino - 1) / EXT4_INODES_PER_GROUP(sb);
1382 bit = (ino - 1) % EXT4_INODES_PER_GROUP(sb);
1383 bitmap_bh = ext4_read_inode_bitmap(sb, block_group);
1394 inode = ext4_iget(sb, ino, EXT4_IGET_NORMAL);
1397 ext4_error_err(sb, -err,
1420 ext4_error(sb, "bad orphan inode %lu", ino);
1441 unsigned long ext4_count_free_inodes(struct super_block *sb)
1445 ext4_group_t i, ngroups = ext4_get_groups_count(sb);
1451 es = EXT4_SB(sb)->s_es;
1456 gdp = ext4_get_group_desc(sb, i, NULL);
1459 desc_count += ext4_free_inodes_count(sb, gdp);
1461 bitmap_bh = ext4_read_inode_bitmap(sb, i);
1468 EXT4_INODES_PER_GROUP(sb) / 8);
1470 (unsigned long) i, ext4_free_inodes_count(sb, gdp), x);
1481 gdp = ext4_get_group_desc(sb, i, NULL);
1484 desc_count += ext4_free_inodes_count(sb, gdp);
1492 unsigned long ext4_count_dirs(struct super_block * sb)
1495 ext4_group_t i, ngroups = ext4_get_groups_count(sb);
1498 struct ext4_group_desc *gdp = ext4_get_group_desc(sb, i, NULL);
1501 count += ext4_used_dirs_count(sb, gdp);
1514 int ext4_init_inode_table(struct super_block *sb, ext4_group_t group,
1517 struct ext4_group_info *grp = ext4_get_group_info(sb, group);
1518 struct ext4_sb_info *sbi = EXT4_SB(sb);
1526 gdp = ext4_get_group_desc(sb, group, &group_desc_bh);
1537 handle = ext4_journal_start_sb(sb, EXT4_HT_MISC, 1);
1550 used_inos = EXT4_INODES_PER_GROUP(sb) -
1551 ext4_itable_unused_count(sb, gdp);
1556 ext4_error(sb, "Something is wrong with group %u: "
1560 ext4_itable_unused_count(sb, gdp));
1565 used_inos += group * EXT4_INODES_PER_GROUP(sb);
1571 (used_inos < EXT4_FIRST_INO(sb))) {
1572 ext4_error(sb, "Something is wrong with group %u: "
1575 group, ext4_itable_unused_count(sb, gdp),
1582 blk = ext4_inode_table(sb, gdp) + used_blks;
1586 ret = ext4_journal_get_write_access(handle, sb, group_desc_bh,
1601 ret = sb_issue_zeroout(sb, blk, num, GFP_NOFS);
1605 blkdev_issue_flush(sb->s_bdev);
1608 ext4_lock_group(sb, group);
1610 ext4_group_desc_csum_set(sb, group, gdp);
1611 ext4_unlock_group(sb, group);