Lines Matching refs:sb
67 static unsigned ext4_init_inode_bitmap(struct super_block *sb, in ext4_init_inode_bitmap() argument
73 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_init_inode_bitmap()
78 if (!ext4_group_desc_csum_verify(sb, block_group, gdp)) { in ext4_init_inode_bitmap()
79 ext4_error(sb, "Checksum bad for group %u", block_group); in ext4_init_inode_bitmap()
80 grp = ext4_get_group_info(sb, block_group); in ext4_init_inode_bitmap()
87 count = ext4_free_inodes_count(sb, gdp); in ext4_init_inode_bitmap()
95 memset(bh->b_data, 0, (EXT4_INODES_PER_GROUP(sb) + 7) / 8); in ext4_init_inode_bitmap()
96 ext4_mark_bitmap_end(EXT4_INODES_PER_GROUP(sb), sb->s_blocksize * 8, in ext4_init_inode_bitmap()
98 ext4_inode_bitmap_csum_set(sb, block_group, gdp, bh, in ext4_init_inode_bitmap()
99 EXT4_INODES_PER_GROUP(sb) / 8); in ext4_init_inode_bitmap()
100 ext4_group_desc_csum_set(sb, block_group, gdp); in ext4_init_inode_bitmap()
102 return EXT4_INODES_PER_GROUP(sb); in ext4_init_inode_bitmap()
122 ext4_read_inode_bitmap(struct super_block *sb, ext4_group_t block_group) in ext4_read_inode_bitmap() argument
128 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_read_inode_bitmap()
130 desc = ext4_get_group_desc(sb, block_group, NULL); in ext4_read_inode_bitmap()
134 bitmap_blk = ext4_inode_bitmap(sb, desc); in ext4_read_inode_bitmap()
135 bh = sb_getblk(sb, bitmap_blk); in ext4_read_inode_bitmap()
137 ext4_error(sb, "Cannot read inode bitmap - " in ext4_read_inode_bitmap()
151 ext4_lock_group(sb, block_group); in ext4_read_inode_bitmap()
153 ext4_init_inode_bitmap(sb, bh, block_group, desc); in ext4_read_inode_bitmap()
157 ext4_unlock_group(sb, block_group); in ext4_read_inode_bitmap()
161 ext4_unlock_group(sb, block_group); in ext4_read_inode_bitmap()
175 trace_ext4_load_inode_bitmap(sb, block_group); in ext4_read_inode_bitmap()
182 ext4_error(sb, "Cannot read inode bitmap - " in ext4_read_inode_bitmap()
189 ext4_lock_group(sb, block_group); in ext4_read_inode_bitmap()
191 !ext4_inode_bitmap_csum_verify(sb, block_group, desc, bh, in ext4_read_inode_bitmap()
192 EXT4_INODES_PER_GROUP(sb) / 8)) { in ext4_read_inode_bitmap()
193 ext4_unlock_group(sb, block_group); in ext4_read_inode_bitmap()
195 ext4_error(sb, "Corrupt inode bitmap - block_group = %u, " in ext4_read_inode_bitmap()
197 grp = ext4_get_group_info(sb, block_group); in ext4_read_inode_bitmap()
200 count = ext4_free_inodes_count(sb, desc); in ext4_read_inode_bitmap()
207 ext4_unlock_group(sb, block_group); in ext4_read_inode_bitmap()
230 struct super_block *sb = inode->i_sb; in ext4_free_inode() local
243 if (!sb) { in ext4_free_inode()
249 ext4_msg(sb, KERN_ERR, "%s:%d: inode #%lu: count=%d", in ext4_free_inode()
255 ext4_msg(sb, KERN_ERR, "%s:%d: inode #%lu: nlink=%d\n", in ext4_free_inode()
259 sbi = EXT4_SB(sb); in ext4_free_inode()
279 es = EXT4_SB(sb)->s_es; in ext4_free_inode()
280 if (ino < EXT4_FIRST_INO(sb) || ino > le32_to_cpu(es->s_inodes_count)) { in ext4_free_inode()
281 ext4_error(sb, "reserved or nonexistent inode %lu", ino); in ext4_free_inode()
284 block_group = (ino - 1) / EXT4_INODES_PER_GROUP(sb); in ext4_free_inode()
285 bit = (ino - 1) % EXT4_INODES_PER_GROUP(sb); in ext4_free_inode()
286 bitmap_bh = ext4_read_inode_bitmap(sb, block_group); in ext4_free_inode()
288 grp = ext4_get_group_info(sb, block_group); in ext4_free_inode()
298 gdp = ext4_get_group_desc(sb, block_group, &bh2); in ext4_free_inode()
303 ext4_lock_group(sb, block_group); in ext4_free_inode()
306 ext4_unlock_group(sb, block_group); in ext4_free_inode()
310 count = ext4_free_inodes_count(sb, gdp) + 1; in ext4_free_inode()
311 ext4_free_inodes_set(sb, gdp, count); in ext4_free_inode()
313 count = ext4_used_dirs_count(sb, gdp) - 1; in ext4_free_inode()
314 ext4_used_dirs_set(sb, gdp, count); in ext4_free_inode()
317 ext4_inode_bitmap_csum_set(sb, block_group, gdp, bitmap_bh, in ext4_free_inode()
318 EXT4_INODES_PER_GROUP(sb) / 8); in ext4_free_inode()
319 ext4_group_desc_csum_set(sb, block_group, gdp); in ext4_free_inode()
320 ext4_unlock_group(sb, block_group); in ext4_free_inode()
339 ext4_error(sb, "bit already cleared for inode %lu", ino); in ext4_free_inode()
342 count = ext4_free_inodes_count(sb, gdp); in ext4_free_inode()
351 ext4_std_error(sb, fatal); in ext4_free_inode()
365 static void get_orlov_stats(struct super_block *sb, ext4_group_t g, in get_orlov_stats() argument
369 struct flex_groups *flex_group = EXT4_SB(sb)->s_flex_groups; in get_orlov_stats()
378 desc = ext4_get_group_desc(sb, g, NULL); in get_orlov_stats()
380 stats->free_inodes = ext4_free_inodes_count(sb, desc); in get_orlov_stats()
381 stats->free_clusters = ext4_free_group_clusters(sb, desc); in get_orlov_stats()
382 stats->used_dirs = ext4_used_dirs_count(sb, desc); in get_orlov_stats()
411 static int find_group_orlov(struct super_block *sb, struct inode *parent, in find_group_orlov() argument
416 struct ext4_sb_info *sbi = EXT4_SB(sb); in find_group_orlov()
417 ext4_group_t real_ngroups = ext4_get_groups_count(sb); in find_group_orlov()
418 int inodes_per_group = EXT4_INODES_PER_GROUP(sb); in find_group_orlov()
446 ((parent == d_inode(sb->s_root)) || in find_group_orlov()
461 get_orlov_stats(sb, g, flex_size, &stats); in find_group_orlov()
493 desc = ext4_get_group_desc(sb, grp+i, NULL); in find_group_orlov()
494 if (desc && ext4_free_inodes_count(sb, desc)) { in find_group_orlov()
506 min_clusters = avefreec - EXT4_CLUSTERS_PER_GROUP(sb)*flex_size / 4; in find_group_orlov()
520 get_orlov_stats(sb, grp, flex_size, &stats); in find_group_orlov()
537 desc = ext4_get_group_desc(sb, grp, NULL); in find_group_orlov()
539 grp_free = ext4_free_inodes_count(sb, desc); in find_group_orlov()
559 static int find_group_other(struct super_block *sb, struct inode *parent, in find_group_other() argument
563 ext4_group_t i, last, ngroups = ext4_get_groups_count(sb); in find_group_other()
565 int flex_size = ext4_flex_bg_size(EXT4_SB(sb)); in find_group_other()
583 desc = ext4_get_group_desc(sb, i, NULL); in find_group_other()
584 if (desc && ext4_free_inodes_count(sb, desc)) { in find_group_other()
602 return find_group_orlov(sb, parent, group, mode, NULL); in find_group_other()
609 desc = ext4_get_group_desc(sb, *group, NULL); in find_group_other()
610 if (desc && ext4_free_inodes_count(sb, desc) && in find_group_other()
611 ext4_free_group_clusters(sb, desc)) in find_group_other()
633 desc = ext4_get_group_desc(sb, *group, NULL); in find_group_other()
634 if (desc && ext4_free_inodes_count(sb, desc) && in find_group_other()
635 ext4_free_group_clusters(sb, desc)) in find_group_other()
647 desc = ext4_get_group_desc(sb, *group, NULL); in find_group_other()
648 if (desc && ext4_free_inodes_count(sb, desc)) in find_group_other()
664 static int recently_deleted(struct super_block *sb, ext4_group_t group, int ino) in recently_deleted() argument
670 int inodes_per_block = EXT4_SB(sb)->s_inodes_per_block; in recently_deleted()
673 gdp = ext4_get_group_desc(sb, group, NULL); in recently_deleted()
677 bh = sb_getblk(sb, ext4_inode_table(sb, gdp) + in recently_deleted()
686 offset = (ino % inodes_per_block) * EXT4_INODE_SIZE(sb); in recently_deleted()
715 struct super_block *sb; in __ext4_new_inode() local
734 sb = dir->i_sb; in __ext4_new_inode()
735 ngroups = ext4_get_groups_count(sb); in __ext4_new_inode()
737 inode = new_inode(sb); in __ext4_new_inode()
741 sbi = EXT4_SB(sb); in __ext4_new_inode()
752 } else if (test_opt(sb, GRPID)) { in __ext4_new_inode()
764 group = (goal - 1) / EXT4_INODES_PER_GROUP(sb); in __ext4_new_inode()
765 ino = (goal - 1) % EXT4_INODES_PER_GROUP(sb); in __ext4_new_inode()
771 ret2 = find_group_orlov(sb, dir, &group, mode, qstr); in __ext4_new_inode()
773 ret2 = find_group_other(sb, dir, &group, mode); in __ext4_new_inode()
789 gdp = ext4_get_group_desc(sb, group, &group_desc_bh); in __ext4_new_inode()
796 if (ext4_free_inodes_count(sb, gdp) == 0) { in __ext4_new_inode()
802 grp = ext4_get_group_info(sb, group); in __ext4_new_inode()
811 inode_bitmap_bh = ext4_read_inode_bitmap(sb, group); in __ext4_new_inode()
822 EXT4_INODES_PER_GROUP(sb), ino); in __ext4_new_inode()
823 if (ino >= EXT4_INODES_PER_GROUP(sb)) in __ext4_new_inode()
825 if (group == 0 && (ino+1) < EXT4_FIRST_INO(sb)) { in __ext4_new_inode()
826 ext4_error(sb, "reserved inode found cleared - " in __ext4_new_inode()
830 if ((EXT4_SB(sb)->s_journal == NULL) && in __ext4_new_inode()
831 recently_deleted(sb, group, ino)) { in __ext4_new_inode()
842 ext4_std_error(sb, err); in __ext4_new_inode()
849 ext4_std_error(sb, err); in __ext4_new_inode()
852 ext4_lock_group(sb, group); in __ext4_new_inode()
854 ext4_unlock_group(sb, group); in __ext4_new_inode()
859 if (ino < EXT4_INODES_PER_GROUP(sb)) in __ext4_new_inode()
872 ext4_std_error(sb, err); in __ext4_new_inode()
879 ext4_std_error(sb, err); in __ext4_new_inode()
884 if (ext4_has_group_desc_csum(sb) && in __ext4_new_inode()
888 block_bitmap_bh = ext4_read_block_bitmap(sb, group); in __ext4_new_inode()
897 ext4_std_error(sb, err); in __ext4_new_inode()
905 ext4_lock_group(sb, group); in __ext4_new_inode()
908 ext4_free_group_clusters_set(sb, gdp, in __ext4_new_inode()
909 ext4_free_clusters_after_init(sb, group, gdp)); in __ext4_new_inode()
910 ext4_block_bitmap_csum_set(sb, group, gdp, in __ext4_new_inode()
912 ext4_group_desc_csum_set(sb, group, gdp); in __ext4_new_inode()
914 ext4_unlock_group(sb, group); in __ext4_new_inode()
918 ext4_std_error(sb, err); in __ext4_new_inode()
924 if (ext4_has_group_desc_csum(sb)) { in __ext4_new_inode()
926 struct ext4_group_info *grp = ext4_get_group_info(sb, group); in __ext4_new_inode()
929 ext4_lock_group(sb, group); /* while we modify the bg desc */ in __ext4_new_inode()
930 free = EXT4_INODES_PER_GROUP(sb) - in __ext4_new_inode()
931 ext4_itable_unused_count(sb, gdp); in __ext4_new_inode()
942 ext4_itable_unused_set(sb, gdp, in __ext4_new_inode()
943 (EXT4_INODES_PER_GROUP(sb) - ino)); in __ext4_new_inode()
946 ext4_lock_group(sb, group); in __ext4_new_inode()
949 ext4_free_inodes_set(sb, gdp, ext4_free_inodes_count(sb, gdp) - 1); in __ext4_new_inode()
951 ext4_used_dirs_set(sb, gdp, ext4_used_dirs_count(sb, gdp) + 1); in __ext4_new_inode()
958 if (ext4_has_group_desc_csum(sb)) { in __ext4_new_inode()
959 ext4_inode_bitmap_csum_set(sb, group, gdp, inode_bitmap_bh, in __ext4_new_inode()
960 EXT4_INODES_PER_GROUP(sb) / 8); in __ext4_new_inode()
961 ext4_group_desc_csum_set(sb, group, gdp); in __ext4_new_inode()
963 ext4_unlock_group(sb, group); in __ext4_new_inode()
968 ext4_std_error(sb, err); in __ext4_new_inode()
981 inode->i_ino = ino + group * EXT4_INODES_PER_GROUP(sb); in __ext4_new_inode()
1014 ext4_error(sb, "failed to insert inode %lu: doubly allocated?", in __ext4_new_inode()
1023 if (ext4_has_metadata_csum(sb)) { in __ext4_new_inode()
1036 ei->i_extra_isize = EXT4_SB(sb)->s_want_extra_isize; in __ext4_new_inode()
1041 if (EXT4_HAS_INCOMPAT_FEATURE(sb, in __ext4_new_inode()
1049 if (EXT4_HAS_INCOMPAT_FEATURE(sb, in __ext4_new_inode()
1056 if (EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_INLINE_DATA)) in __ext4_new_inode()
1072 if (EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_EXTENTS)) { in __ext4_new_inode()
1087 ext4_std_error(sb, err); in __ext4_new_inode()
1110 struct inode *ext4_orphan_get(struct super_block *sb, unsigned long ino) in ext4_orphan_get() argument
1112 unsigned long max_ino = le32_to_cpu(EXT4_SB(sb)->s_es->s_inodes_count); in ext4_orphan_get()
1119 if (ino < EXT4_FIRST_INO(sb) || ino > max_ino) in ext4_orphan_get()
1122 block_group = (ino - 1) / EXT4_INODES_PER_GROUP(sb); in ext4_orphan_get()
1123 bit = (ino - 1) % EXT4_INODES_PER_GROUP(sb); in ext4_orphan_get()
1124 bitmap_bh = ext4_read_inode_bitmap(sb, block_group); in ext4_orphan_get()
1126 ext4_error(sb, "inode bitmap error %ld for orphan %lu", in ext4_orphan_get()
1138 inode = ext4_iget(sb, ino); in ext4_orphan_get()
1141 ext4_error(sb, "couldn't read orphan inode %lu (err %d)", in ext4_orphan_get()
1162 ext4_error(sb, "bad orphan inode %lu", ino); in ext4_orphan_get()
1183 unsigned long ext4_count_free_inodes(struct super_block *sb) in ext4_count_free_inodes() argument
1187 ext4_group_t i, ngroups = ext4_get_groups_count(sb); in ext4_count_free_inodes()
1193 es = EXT4_SB(sb)->s_es; in ext4_count_free_inodes()
1198 gdp = ext4_get_group_desc(sb, i, NULL); in ext4_count_free_inodes()
1201 desc_count += ext4_free_inodes_count(sb, gdp); in ext4_count_free_inodes()
1203 bitmap_bh = ext4_read_inode_bitmap(sb, i); in ext4_count_free_inodes()
1208 EXT4_INODES_PER_GROUP(sb) / 8); in ext4_count_free_inodes()
1210 (unsigned long) i, ext4_free_inodes_count(sb, gdp), x); in ext4_count_free_inodes()
1221 gdp = ext4_get_group_desc(sb, i, NULL); in ext4_count_free_inodes()
1224 desc_count += ext4_free_inodes_count(sb, gdp); in ext4_count_free_inodes()
1232 unsigned long ext4_count_dirs(struct super_block * sb) in ext4_count_dirs() argument
1235 ext4_group_t i, ngroups = ext4_get_groups_count(sb); in ext4_count_dirs()
1238 struct ext4_group_desc *gdp = ext4_get_group_desc(sb, i, NULL); in ext4_count_dirs()
1241 count += ext4_used_dirs_count(sb, gdp); in ext4_count_dirs()
1254 int ext4_init_inode_table(struct super_block *sb, ext4_group_t group, in ext4_init_inode_table() argument
1257 struct ext4_group_info *grp = ext4_get_group_info(sb, group); in ext4_init_inode_table()
1258 struct ext4_sb_info *sbi = EXT4_SB(sb); in ext4_init_inode_table()
1266 if (sb->s_flags & MS_RDONLY) { in ext4_init_inode_table()
1271 gdp = ext4_get_group_desc(sb, group, &group_desc_bh); in ext4_init_inode_table()
1282 handle = ext4_journal_start_sb(sb, EXT4_HT_MISC, 1); in ext4_init_inode_table()
1295 used_blks = DIV_ROUND_UP((EXT4_INODES_PER_GROUP(sb) - in ext4_init_inode_table()
1296 ext4_itable_unused_count(sb, gdp)), in ext4_init_inode_table()
1300 ext4_error(sb, "Something is wrong with group %u: " in ext4_init_inode_table()
1304 ext4_itable_unused_count(sb, gdp)); in ext4_init_inode_table()
1309 blk = ext4_inode_table(sb, gdp) + used_blks; in ext4_init_inode_table()
1328 ret = sb_issue_zeroout(sb, blk, num, GFP_NOFS); in ext4_init_inode_table()
1332 blkdev_issue_flush(sb->s_bdev, GFP_NOFS, NULL); in ext4_init_inode_table()
1335 ext4_lock_group(sb, group); in ext4_init_inode_table()
1337 ext4_group_desc_csum_set(sb, group, gdp); in ext4_init_inode_table()
1338 ext4_unlock_group(sb, group); in ext4_init_inode_table()