• Home
  • Raw
  • Download

Lines Matching refs:sb

79 static int ext4_validate_inode_bitmap(struct super_block *sb,  in ext4_validate_inode_bitmap()  argument
87 if (EXT4_SB(sb)->s_mount_state & EXT4_FC_REPLAY) in ext4_validate_inode_bitmap()
90 grp = ext4_get_group_info(sb, block_group); in ext4_validate_inode_bitmap()
97 ext4_lock_group(sb, block_group); in ext4_validate_inode_bitmap()
100 blk = ext4_inode_bitmap(sb, desc); in ext4_validate_inode_bitmap()
101 if (!ext4_inode_bitmap_csum_verify(sb, block_group, desc, bh, in ext4_validate_inode_bitmap()
102 EXT4_INODES_PER_GROUP(sb) / 8) || in ext4_validate_inode_bitmap()
103 ext4_simulate_fail(sb, EXT4_SIM_IBITMAP_CRC)) { in ext4_validate_inode_bitmap()
104 ext4_unlock_group(sb, block_group); in ext4_validate_inode_bitmap()
105 ext4_error(sb, "Corrupt inode bitmap - block_group = %u, " in ext4_validate_inode_bitmap()
107 ext4_mark_group_bitmap_corrupted(sb, block_group, in ext4_validate_inode_bitmap()
113 ext4_unlock_group(sb, block_group); in ext4_validate_inode_bitmap()
124 ext4_read_inode_bitmap(struct super_block *sb, ext4_group_t block_group) in ext4_read_inode_bitmap() argument
127 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_read_inode_bitmap()
132 desc = ext4_get_group_desc(sb, block_group, NULL); in ext4_read_inode_bitmap()
136 bitmap_blk = ext4_inode_bitmap(sb, desc); in ext4_read_inode_bitmap()
139 ext4_error(sb, "Invalid inode bitmap blk %llu in " in ext4_read_inode_bitmap()
141 ext4_mark_group_bitmap_corrupted(sb, block_group, in ext4_read_inode_bitmap()
145 bh = sb_getblk(sb, bitmap_blk); in ext4_read_inode_bitmap()
147 ext4_warning(sb, "Cannot read inode bitmap - " in ext4_read_inode_bitmap()
161 ext4_lock_group(sb, block_group); in ext4_read_inode_bitmap()
162 if (ext4_has_group_desc_csum(sb) && in ext4_read_inode_bitmap()
165 ext4_unlock_group(sb, block_group); in ext4_read_inode_bitmap()
167 ext4_error(sb, "Inode bitmap for bg 0 marked " in ext4_read_inode_bitmap()
172 memset(bh->b_data, 0, (EXT4_INODES_PER_GROUP(sb) + 7) / 8); in ext4_read_inode_bitmap()
173 ext4_mark_bitmap_end(EXT4_INODES_PER_GROUP(sb), in ext4_read_inode_bitmap()
174 sb->s_blocksize * 8, bh->b_data); in ext4_read_inode_bitmap()
178 ext4_unlock_group(sb, block_group); in ext4_read_inode_bitmap()
182 ext4_unlock_group(sb, block_group); in ext4_read_inode_bitmap()
196 trace_ext4_load_inode_bitmap(sb, block_group); in ext4_read_inode_bitmap()
198 ext4_simulate_fail_bh(sb, bh, EXT4_SIM_IBITMAP_EIO); in ext4_read_inode_bitmap()
201 ext4_error_err(sb, EIO, "Cannot read inode bitmap - " in ext4_read_inode_bitmap()
204 ext4_mark_group_bitmap_corrupted(sb, block_group, in ext4_read_inode_bitmap()
210 err = ext4_validate_inode_bitmap(sb, desc, block_group, bh); in ext4_read_inode_bitmap()
237 struct super_block *sb = inode->i_sb; in ext4_free_inode() local
250 if (!sb) { in ext4_free_inode()
256 ext4_msg(sb, KERN_ERR, "%s:%d: inode #%lu: count=%d", in ext4_free_inode()
262 ext4_msg(sb, KERN_ERR, "%s:%d: inode #%lu: nlink=%d\n", in ext4_free_inode()
266 sbi = EXT4_SB(sb); in ext4_free_inode()
281 if (ino < EXT4_FIRST_INO(sb) || ino > le32_to_cpu(es->s_inodes_count)) { in ext4_free_inode()
282 ext4_error(sb, "reserved or nonexistent inode %lu", ino); in ext4_free_inode()
285 block_group = (ino - 1) / EXT4_INODES_PER_GROUP(sb); in ext4_free_inode()
286 bit = (ino - 1) % EXT4_INODES_PER_GROUP(sb); in ext4_free_inode()
287 bitmap_bh = ext4_read_inode_bitmap(sb, block_group); in ext4_free_inode()
295 grp = ext4_get_group_info(sb, block_group); in ext4_free_inode()
303 fatal = ext4_journal_get_write_access(handle, sb, bitmap_bh, in ext4_free_inode()
309 gdp = ext4_get_group_desc(sb, block_group, &bh2); in ext4_free_inode()
312 fatal = ext4_journal_get_write_access(handle, sb, bh2, in ext4_free_inode()
315 ext4_lock_group(sb, block_group); in ext4_free_inode()
318 ext4_unlock_group(sb, block_group); in ext4_free_inode()
322 count = ext4_free_inodes_count(sb, gdp) + 1; in ext4_free_inode()
323 ext4_free_inodes_set(sb, gdp, count); in ext4_free_inode()
325 count = ext4_used_dirs_count(sb, gdp) - 1; in ext4_free_inode()
326 ext4_used_dirs_set(sb, gdp, count); in ext4_free_inode()
330 ext4_inode_bitmap_csum_set(sb, block_group, gdp, bitmap_bh, in ext4_free_inode()
331 EXT4_INODES_PER_GROUP(sb) / 8); in ext4_free_inode()
332 ext4_group_desc_csum_set(sb, block_group, gdp); in ext4_free_inode()
333 ext4_unlock_group(sb, block_group); in ext4_free_inode()
355 ext4_error(sb, "bit already cleared for inode %lu", ino); in ext4_free_inode()
356 ext4_mark_group_bitmap_corrupted(sb, block_group, in ext4_free_inode()
362 ext4_std_error(sb, fatal); in ext4_free_inode()
376 static void get_orlov_stats(struct super_block *sb, ext4_group_t g, in get_orlov_stats() argument
382 struct flex_groups *fg = sbi_array_rcu_deref(EXT4_SB(sb), in get_orlov_stats()
390 desc = ext4_get_group_desc(sb, g, NULL); in get_orlov_stats()
392 stats->free_inodes = ext4_free_inodes_count(sb, desc); in get_orlov_stats()
393 stats->free_clusters = ext4_free_group_clusters(sb, desc); in get_orlov_stats()
394 stats->used_dirs = ext4_used_dirs_count(sb, desc); in get_orlov_stats()
423 static int find_group_orlov(struct super_block *sb, struct inode *parent, in find_group_orlov() argument
428 struct ext4_sb_info *sbi = EXT4_SB(sb); in find_group_orlov()
429 ext4_group_t real_ngroups = ext4_get_groups_count(sb); in find_group_orlov()
430 int inodes_per_group = EXT4_INODES_PER_GROUP(sb); in find_group_orlov()
457 ((parent == d_inode(sb->s_root)) || in find_group_orlov()
472 get_orlov_stats(sb, g, flex_size, &stats); in find_group_orlov()
504 desc = ext4_get_group_desc(sb, grp+i, NULL); in find_group_orlov()
505 if (desc && ext4_free_inodes_count(sb, desc)) { in find_group_orlov()
517 min_clusters = avefreec - EXT4_CLUSTERS_PER_GROUP(sb)*flex_size / 4; in find_group_orlov()
531 get_orlov_stats(sb, grp, flex_size, &stats); in find_group_orlov()
548 desc = ext4_get_group_desc(sb, grp, NULL); in find_group_orlov()
550 grp_free = ext4_free_inodes_count(sb, desc); in find_group_orlov()
570 static int find_group_other(struct super_block *sb, struct inode *parent, in find_group_other() argument
574 ext4_group_t i, last, ngroups = ext4_get_groups_count(sb); in find_group_other()
576 int flex_size = ext4_flex_bg_size(EXT4_SB(sb)); in find_group_other()
594 desc = ext4_get_group_desc(sb, i, NULL); in find_group_other()
595 if (desc && ext4_free_inodes_count(sb, desc)) { in find_group_other()
613 return find_group_orlov(sb, parent, group, mode, NULL); in find_group_other()
620 desc = ext4_get_group_desc(sb, *group, NULL); in find_group_other()
621 if (desc && ext4_free_inodes_count(sb, desc) && in find_group_other()
622 ext4_free_group_clusters(sb, desc)) in find_group_other()
644 desc = ext4_get_group_desc(sb, *group, NULL); in find_group_other()
645 if (desc && ext4_free_inodes_count(sb, desc) && in find_group_other()
646 ext4_free_group_clusters(sb, desc)) in find_group_other()
658 desc = ext4_get_group_desc(sb, *group, NULL); in find_group_other()
659 if (desc && ext4_free_inodes_count(sb, desc)) in find_group_other()
675 static int recently_deleted(struct super_block *sb, ext4_group_t group, int ino) in recently_deleted() argument
680 int inodes_per_block = EXT4_SB(sb)->s_inodes_per_block; in recently_deleted()
685 gdp = ext4_get_group_desc(sb, group, NULL); in recently_deleted()
689 bh = sb_find_get_block(sb, ext4_inode_table(sb, gdp) + in recently_deleted()
698 offset = (ino % inodes_per_block) * EXT4_INODE_SIZE(sb); in recently_deleted()
718 static int find_inode_bit(struct super_block *sb, ext4_group_t group, in find_inode_bit() argument
721 bool check_recently_deleted = EXT4_SB(sb)->s_journal == NULL; in find_inode_bit()
722 unsigned long recently_deleted_ino = EXT4_INODES_PER_GROUP(sb); in find_inode_bit()
727 EXT4_INODES_PER_GROUP(sb), *ino); in find_inode_bit()
728 if (*ino >= EXT4_INODES_PER_GROUP(sb)) in find_inode_bit()
731 if (check_recently_deleted && recently_deleted(sb, group, *ino)) { in find_inode_bit()
734 if (*ino < EXT4_INODES_PER_GROUP(sb)) in find_inode_bit()
740 if (recently_deleted_ino >= EXT4_INODES_PER_GROUP(sb)) in find_inode_bit()
752 int ext4_mark_inode_used(struct super_block *sb, int ino) in ext4_mark_inode_used() argument
754 unsigned long max_ino = le32_to_cpu(EXT4_SB(sb)->s_es->s_inodes_count); in ext4_mark_inode_used()
761 if (ino < EXT4_FIRST_INO(sb) || ino > max_ino) in ext4_mark_inode_used()
764 group = (ino - 1) / EXT4_INODES_PER_GROUP(sb); in ext4_mark_inode_used()
765 bit = (ino - 1) % EXT4_INODES_PER_GROUP(sb); in ext4_mark_inode_used()
766 inode_bitmap_bh = ext4_read_inode_bitmap(sb, group); in ext4_mark_inode_used()
775 gdp = ext4_get_group_desc(sb, group, &group_desc_bh); in ext4_mark_inode_used()
786 ext4_std_error(sb, err); in ext4_mark_inode_used()
791 ext4_std_error(sb, err); in ext4_mark_inode_used()
796 if (ext4_has_group_desc_csum(sb) && in ext4_mark_inode_used()
800 block_bitmap_bh = ext4_read_block_bitmap(sb, group); in ext4_mark_inode_used()
811 ext4_lock_group(sb, group); in ext4_mark_inode_used()
812 if (ext4_has_group_desc_csum(sb) && in ext4_mark_inode_used()
815 ext4_free_group_clusters_set(sb, gdp, in ext4_mark_inode_used()
816 ext4_free_clusters_after_init(sb, group, gdp)); in ext4_mark_inode_used()
817 ext4_block_bitmap_csum_set(sb, group, gdp, in ext4_mark_inode_used()
819 ext4_group_desc_csum_set(sb, group, gdp); in ext4_mark_inode_used()
821 ext4_unlock_group(sb, group); in ext4_mark_inode_used()
825 ext4_std_error(sb, err); in ext4_mark_inode_used()
831 if (ext4_has_group_desc_csum(sb)) { in ext4_mark_inode_used()
834 ext4_lock_group(sb, group); /* while we modify the bg desc */ in ext4_mark_inode_used()
835 free = EXT4_INODES_PER_GROUP(sb) - in ext4_mark_inode_used()
836 ext4_itable_unused_count(sb, gdp); in ext4_mark_inode_used()
848 ext4_itable_unused_set(sb, gdp, in ext4_mark_inode_used()
849 (EXT4_INODES_PER_GROUP(sb) - bit - 1)); in ext4_mark_inode_used()
851 ext4_lock_group(sb, group); in ext4_mark_inode_used()
854 ext4_free_inodes_set(sb, gdp, ext4_free_inodes_count(sb, gdp) - 1); in ext4_mark_inode_used()
855 if (ext4_has_group_desc_csum(sb)) { in ext4_mark_inode_used()
856 ext4_inode_bitmap_csum_set(sb, group, gdp, inode_bitmap_bh, in ext4_mark_inode_used()
857 EXT4_INODES_PER_GROUP(sb) / 8); in ext4_mark_inode_used()
858 ext4_group_desc_csum_set(sb, group, gdp); in ext4_mark_inode_used()
861 ext4_unlock_group(sb, group); in ext4_mark_inode_used()
871 struct super_block *sb = dir->i_sb; in ext4_xattr_credits_for_new_inode() local
882 __ext4_xattr_set_credits(sb, NULL /* inode */, in ext4_xattr_credits_for_new_inode()
901 __ext4_xattr_set_credits(sb, NULL /* inode */, in ext4_xattr_credits_for_new_inode()
907 nblocks += __ext4_xattr_set_credits(sb, in ext4_xattr_credits_for_new_inode()
932 struct super_block *sb; in __ext4_new_inode() local
952 sb = dir->i_sb; in __ext4_new_inode()
953 sbi = EXT4_SB(sb); in __ext4_new_inode()
958 ngroups = ext4_get_groups_count(sb); in __ext4_new_inode()
960 inode = new_inode(sb); in __ext4_new_inode()
974 } else if (test_opt(sb, GRPID)) { in __ext4_new_inode()
981 if (ext4_has_feature_project(sb) && in __ext4_new_inode()
1010 group = (goal - 1) / EXT4_INODES_PER_GROUP(sb); in __ext4_new_inode()
1011 ino = (goal - 1) % EXT4_INODES_PER_GROUP(sb); in __ext4_new_inode()
1017 ret2 = find_group_orlov(sb, dir, &group, mode, qstr); in __ext4_new_inode()
1019 ret2 = find_group_other(sb, dir, &group, mode); in __ext4_new_inode()
1035 gdp = ext4_get_group_desc(sb, group, &group_desc_bh); in __ext4_new_inode()
1042 if (ext4_free_inodes_count(sb, gdp) == 0) in __ext4_new_inode()
1046 grp = ext4_get_group_info(sb, group); in __ext4_new_inode()
1056 inode_bitmap_bh = ext4_read_inode_bitmap(sb, group); in __ext4_new_inode()
1066 ret2 = find_inode_bit(sb, group, inode_bitmap_bh, &ino); in __ext4_new_inode()
1070 if (group == 0 && (ino + 1) < EXT4_FIRST_INO(sb)) { in __ext4_new_inode()
1071 ext4_error(sb, "reserved inode found cleared - " in __ext4_new_inode()
1073 ext4_mark_group_bitmap_corrupted(sb, group, in __ext4_new_inode()
1082 ext4_trans_default_revoke_credits(sb)); in __ext4_new_inode()
1085 ext4_std_error(sb, err); in __ext4_new_inode()
1090 err = ext4_journal_get_write_access(handle, sb, inode_bitmap_bh, in __ext4_new_inode()
1093 ext4_std_error(sb, err); in __ext4_new_inode()
1096 ext4_lock_group(sb, group); in __ext4_new_inode()
1102 ret2 = find_inode_bit(sb, group, inode_bitmap_bh, &ino); in __ext4_new_inode()
1110 ext4_unlock_group(sb, group); in __ext4_new_inode()
1115 if (ino < EXT4_INODES_PER_GROUP(sb)) in __ext4_new_inode()
1128 ext4_std_error(sb, err); in __ext4_new_inode()
1133 err = ext4_journal_get_write_access(handle, sb, group_desc_bh, in __ext4_new_inode()
1136 ext4_std_error(sb, err); in __ext4_new_inode()
1141 if (ext4_has_group_desc_csum(sb) && in __ext4_new_inode()
1145 block_bitmap_bh = ext4_read_block_bitmap(sb, group); in __ext4_new_inode()
1151 err = ext4_journal_get_write_access(handle, sb, block_bitmap_bh, in __ext4_new_inode()
1155 ext4_std_error(sb, err); in __ext4_new_inode()
1163 ext4_lock_group(sb, group); in __ext4_new_inode()
1164 if (ext4_has_group_desc_csum(sb) && in __ext4_new_inode()
1167 ext4_free_group_clusters_set(sb, gdp, in __ext4_new_inode()
1168 ext4_free_clusters_after_init(sb, group, gdp)); in __ext4_new_inode()
1169 ext4_block_bitmap_csum_set(sb, group, gdp, in __ext4_new_inode()
1171 ext4_group_desc_csum_set(sb, group, gdp); in __ext4_new_inode()
1173 ext4_unlock_group(sb, group); in __ext4_new_inode()
1177 ext4_std_error(sb, err); in __ext4_new_inode()
1183 if (ext4_has_group_desc_csum(sb)) { in __ext4_new_inode()
1188 grp = ext4_get_group_info(sb, group); in __ext4_new_inode()
1198 ext4_lock_group(sb, group); /* while we modify the bg desc */ in __ext4_new_inode()
1199 free = EXT4_INODES_PER_GROUP(sb) - in __ext4_new_inode()
1200 ext4_itable_unused_count(sb, gdp); in __ext4_new_inode()
1211 ext4_itable_unused_set(sb, gdp, in __ext4_new_inode()
1212 (EXT4_INODES_PER_GROUP(sb) - ino)); in __ext4_new_inode()
1216 ext4_lock_group(sb, group); in __ext4_new_inode()
1219 ext4_free_inodes_set(sb, gdp, ext4_free_inodes_count(sb, gdp) - 1); in __ext4_new_inode()
1221 ext4_used_dirs_set(sb, gdp, ext4_used_dirs_count(sb, gdp) + 1); in __ext4_new_inode()
1229 if (ext4_has_group_desc_csum(sb)) { in __ext4_new_inode()
1230 ext4_inode_bitmap_csum_set(sb, group, gdp, inode_bitmap_bh, in __ext4_new_inode()
1231 EXT4_INODES_PER_GROUP(sb) / 8); in __ext4_new_inode()
1232 ext4_group_desc_csum_set(sb, group, gdp); in __ext4_new_inode()
1234 ext4_unlock_group(sb, group); in __ext4_new_inode()
1239 ext4_std_error(sb, err); in __ext4_new_inode()
1253 inode->i_ino = ino + group * EXT4_INODES_PER_GROUP(sb); in __ext4_new_inode()
1281 ext4_error(sb, "failed to insert inode %lu: doubly allocated?", in __ext4_new_inode()
1283 ext4_mark_group_bitmap_corrupted(sb, group, in __ext4_new_inode()
1290 if (ext4_has_metadata_csum(sb)) { in __ext4_new_inode()
1305 if (ext4_has_feature_inline_data(sb) && in __ext4_new_inode()
1334 if (ext4_has_feature_extents(sb)) { in __ext4_new_inode()
1349 ext4_std_error(sb, err); in __ext4_new_inode()
1372 struct inode *ext4_orphan_get(struct super_block *sb, unsigned long ino) in ext4_orphan_get() argument
1374 unsigned long max_ino = le32_to_cpu(EXT4_SB(sb)->s_es->s_inodes_count); in ext4_orphan_get()
1381 if (ino < EXT4_FIRST_INO(sb) || ino > max_ino) in ext4_orphan_get()
1384 block_group = (ino - 1) / EXT4_INODES_PER_GROUP(sb); in ext4_orphan_get()
1385 bit = (ino - 1) % EXT4_INODES_PER_GROUP(sb); in ext4_orphan_get()
1386 bitmap_bh = ext4_read_inode_bitmap(sb, block_group); in ext4_orphan_get()
1397 inode = ext4_iget(sb, ino, EXT4_IGET_NORMAL); in ext4_orphan_get()
1400 ext4_error_err(sb, -err, in ext4_orphan_get()
1423 ext4_error(sb, "bad orphan inode %lu", ino); in ext4_orphan_get()
1444 unsigned long ext4_count_free_inodes(struct super_block *sb) in ext4_count_free_inodes() argument
1448 ext4_group_t i, ngroups = ext4_get_groups_count(sb); in ext4_count_free_inodes()
1454 es = EXT4_SB(sb)->s_es; in ext4_count_free_inodes()
1459 gdp = ext4_get_group_desc(sb, i, NULL); in ext4_count_free_inodes()
1462 desc_count += ext4_free_inodes_count(sb, gdp); in ext4_count_free_inodes()
1464 bitmap_bh = ext4_read_inode_bitmap(sb, i); in ext4_count_free_inodes()
1471 EXT4_INODES_PER_GROUP(sb) / 8); in ext4_count_free_inodes()
1473 (unsigned long) i, ext4_free_inodes_count(sb, gdp), x); in ext4_count_free_inodes()
1484 gdp = ext4_get_group_desc(sb, i, NULL); in ext4_count_free_inodes()
1487 desc_count += ext4_free_inodes_count(sb, gdp); in ext4_count_free_inodes()
1495 unsigned long ext4_count_dirs(struct super_block * sb) in ext4_count_dirs() argument
1498 ext4_group_t i, ngroups = ext4_get_groups_count(sb); in ext4_count_dirs()
1501 struct ext4_group_desc *gdp = ext4_get_group_desc(sb, i, NULL); in ext4_count_dirs()
1504 count += ext4_used_dirs_count(sb, gdp); in ext4_count_dirs()
1517 int ext4_init_inode_table(struct super_block *sb, ext4_group_t group, in ext4_init_inode_table() argument
1520 struct ext4_group_info *grp = ext4_get_group_info(sb, group); in ext4_init_inode_table()
1521 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_init_inode_table()
1530 if (sb_rdonly(sb)) { in ext4_init_inode_table()
1535 gdp = ext4_get_group_desc(sb, group, &group_desc_bh); in ext4_init_inode_table()
1546 handle = ext4_journal_start_sb(sb, EXT4_HT_MISC, 1); in ext4_init_inode_table()
1559 used_inos = EXT4_INODES_PER_GROUP(sb) - in ext4_init_inode_table()
1560 ext4_itable_unused_count(sb, gdp); in ext4_init_inode_table()
1565 ext4_error(sb, "Something is wrong with group %u: " in ext4_init_inode_table()
1569 ext4_itable_unused_count(sb, gdp)); in ext4_init_inode_table()
1574 used_inos += group * EXT4_INODES_PER_GROUP(sb); in ext4_init_inode_table()
1580 (used_inos < EXT4_FIRST_INO(sb))) { in ext4_init_inode_table()
1581 ext4_error(sb, "Something is wrong with group %u: " in ext4_init_inode_table()
1584 group, ext4_itable_unused_count(sb, gdp), in ext4_init_inode_table()
1591 blk = ext4_inode_table(sb, gdp) + used_blks; in ext4_init_inode_table()
1595 ret = ext4_journal_get_write_access(handle, sb, group_desc_bh, in ext4_init_inode_table()
1610 ret = sb_issue_zeroout(sb, blk, num, GFP_NOFS); in ext4_init_inode_table()
1614 blkdev_issue_flush(sb->s_bdev); in ext4_init_inode_table()
1617 ext4_lock_group(sb, group); in ext4_init_inode_table()
1619 ext4_group_desc_csum_set(sb, group, gdp); in ext4_init_inode_table()
1620 ext4_unlock_group(sb, group); in ext4_init_inode_table()