Lines Matching full:sb
42 static void ext2_write_super(struct super_block *sb);
43 static int ext2_remount (struct super_block * sb, int * flags, char * data);
45 static int ext2_sync_fs(struct super_block *sb, int wait);
46 static int ext2_freeze(struct super_block *sb);
47 static int ext2_unfreeze(struct super_block *sb);
49 void ext2_error(struct super_block *sb, const char *function, in ext2_error() argument
54 struct ext2_sb_info *sbi = EXT2_SB(sb); in ext2_error()
57 if (!sb_rdonly(sb)) { in ext2_error()
62 ext2_sync_super(sb, es, 1); in ext2_error()
71 sb->s_id, function, &vaf); in ext2_error()
75 if (test_opt(sb, ERRORS_PANIC)) in ext2_error()
77 if (!sb_rdonly(sb) && test_opt(sb, ERRORS_RO)) { in ext2_error()
78 ext2_msg(sb, KERN_CRIT, in ext2_error()
80 sb->s_flags |= SB_RDONLY; in ext2_error()
84 void ext2_msg(struct super_block *sb, const char *prefix, in ext2_msg() argument
95 printk("%sEXT2-fs (%s): %pV\n", prefix, sb->s_id, &vaf); in ext2_msg()
103 void ext2_update_dynamic_rev(struct super_block *sb) in ext2_update_dynamic_rev() argument
105 struct ext2_super_block *es = EXT2_SB(sb)->s_es; in ext2_update_dynamic_rev()
110 ext2_msg(sb, KERN_WARNING, in ext2_update_dynamic_rev()
129 static int ext2_quota_off(struct super_block *sb, int type);
131 static void ext2_quota_off_umount(struct super_block *sb) in ext2_quota_off_umount() argument
136 ext2_quota_off(sb, type); in ext2_quota_off_umount()
139 static inline void ext2_quota_off_umount(struct super_block *sb) in ext2_quota_off_umount() argument
144 static void ext2_put_super (struct super_block * sb) in ext2_put_super() argument
148 struct ext2_sb_info *sbi = EXT2_SB(sb); in ext2_put_super()
150 ext2_quota_off_umount(sb); in ext2_put_super()
155 if (!sb_rdonly(sb)) { in ext2_put_super()
161 ext2_sync_super(sb, es, 1); in ext2_put_super()
172 sb->s_fs_info = NULL; in ext2_put_super()
180 static struct inode *ext2_alloc_inode(struct super_block *sb) in ext2_alloc_inode() argument
183 ei = alloc_inode_sb(sb, ext2_inode_cachep, GFP_KERNEL); in ext2_alloc_inode()
238 struct super_block *sb = root->d_sb; in ext2_show_options() local
239 struct ext2_sb_info *sbi = EXT2_SB(sb); in ext2_show_options()
247 seq_printf(seq, ",sb=%lu", sbi->s_sb_block); in ext2_show_options()
248 if (test_opt(sb, MINIX_DF)) in ext2_show_options()
250 if (test_opt(sb, GRPID)) in ext2_show_options()
252 if (!test_opt(sb, GRPID) && (def_mount_opts & EXT2_DEFM_BSDGROUPS)) in ext2_show_options()
264 if (test_opt(sb, ERRORS_RO)) { in ext2_show_options()
272 if (test_opt(sb, ERRORS_CONT)) in ext2_show_options()
274 if (test_opt(sb, ERRORS_PANIC)) in ext2_show_options()
276 if (test_opt(sb, NO_UID32)) in ext2_show_options()
278 if (test_opt(sb, DEBUG)) in ext2_show_options()
280 if (test_opt(sb, OLDALLOC)) in ext2_show_options()
284 if (test_opt(sb, XATTR_USER)) in ext2_show_options()
286 if (!test_opt(sb, XATTR_USER) && in ext2_show_options()
293 if (test_opt(sb, POSIX_ACL)) in ext2_show_options()
295 if (!test_opt(sb, POSIX_ACL) && (def_mount_opts & EXT2_DEFM_ACL)) in ext2_show_options()
299 if (test_opt(sb, USRQUOTA)) in ext2_show_options()
302 if (test_opt(sb, GRPQUOTA)) in ext2_show_options()
305 if (test_opt(sb, XIP)) in ext2_show_options()
308 if (test_opt(sb, DAX)) in ext2_show_options()
311 if (!test_opt(sb, RESERVATION)) in ext2_show_options()
319 static ssize_t ext2_quota_read(struct super_block *sb, int type, char *data, size_t len, loff_t off…
320 static ssize_t ext2_quota_write(struct super_block *sb, int type, const char *data, size_t len, lof…
321 static int ext2_quota_on(struct super_block *sb, int type, int format_id,
359 static struct inode *ext2_nfs_get_inode(struct super_block *sb, in ext2_nfs_get_inode() argument
364 if (ino < EXT2_FIRST_INO(sb) && ino != EXT2_ROOT_INO) in ext2_nfs_get_inode()
366 if (ino > le32_to_cpu(EXT2_SB(sb)->s_es->s_inodes_count)) in ext2_nfs_get_inode()
374 inode = ext2_iget(sb, ino); in ext2_nfs_get_inode()
385 static struct dentry *ext2_fh_to_dentry(struct super_block *sb, struct fid *fid, in ext2_fh_to_dentry() argument
388 return generic_fh_to_dentry(sb, fid, fh_len, fh_type, in ext2_fh_to_dentry()
392 static struct dentry *ext2_fh_to_parent(struct super_block *sb, struct fid *fid, in ext2_fh_to_parent() argument
395 return generic_fh_to_parent(sb, fid, fh_len, fh_type, in ext2_fh_to_parent()
411 if (!options || strncmp(options, "sb=", 3) != 0) in get_sb_block()
416 printk("EXT2-fs: Invalid sb specification: %s\n", in get_sb_block()
444 {Opt_sb, "sb=%u"},
468 static int parse_options(char *options, struct super_block *sb, in parse_options() argument
504 ext2_msg(sb, KERN_ERR, "Invalid uid value %d", option); in parse_options()
515 ext2_msg(sb, KERN_ERR, "Invalid gid value %d", option); in parse_options()
552 ext2_msg(sb, KERN_INFO, in parse_options()
565 ext2_msg(sb, KERN_INFO, "(no)user_xattr options" in parse_options()
579 ext2_msg(sb, KERN_INFO, in parse_options()
584 ext2_msg(sb, KERN_INFO, "use dax instead of xip"); in parse_options()
589 ext2_msg(sb, KERN_WARNING, in parse_options()
593 ext2_msg(sb, KERN_INFO, "dax option not supported"); in parse_options()
610 ext2_msg(sb, KERN_INFO, in parse_options()
617 ext2_msg(sb, KERN_INFO, "reservations ON"); in parse_options()
621 ext2_msg(sb, KERN_INFO, "reservations OFF"); in parse_options()
632 static int ext2_setup_super (struct super_block * sb, in ext2_setup_super() argument
637 struct ext2_sb_info *sbi = EXT2_SB(sb); in ext2_setup_super()
640 ext2_msg(sb, KERN_ERR, in ext2_setup_super()
648 ext2_msg(sb, KERN_WARNING, in ext2_setup_super()
652 ext2_msg(sb, KERN_WARNING, in ext2_setup_super()
658 ext2_msg(sb, KERN_WARNING, in ext2_setup_super()
665 ext2_msg(sb, KERN_WARNING, in ext2_setup_super()
671 if (test_opt (sb, DEBUG)) in ext2_setup_super()
672 ext2_msg(sb, KERN_INFO, "%s, %s, bs=%lu, gc=%lu, " in ext2_setup_super()
674 EXT2FS_VERSION, EXT2FS_DATE, sb->s_blocksize, in ext2_setup_super()
676 EXT2_BLOCKS_PER_GROUP(sb), in ext2_setup_super()
677 EXT2_INODES_PER_GROUP(sb), in ext2_setup_super()
682 static int ext2_check_descriptors(struct super_block *sb) in ext2_check_descriptors() argument
685 struct ext2_sb_info *sbi = EXT2_SB(sb); in ext2_check_descriptors()
690 struct ext2_group_desc *gdp = ext2_get_group_desc(sb, i, NULL); in ext2_check_descriptors()
691 ext2_fsblk_t first_block = ext2_group_first_block_no(sb, i); in ext2_check_descriptors()
692 ext2_fsblk_t last_block = ext2_group_last_block_no(sb, i); in ext2_check_descriptors()
697 ext2_error (sb, "ext2_check_descriptors", in ext2_check_descriptors()
706 ext2_error (sb, "ext2_check_descriptors", in ext2_check_descriptors()
716 ext2_error (sb, "ext2_check_descriptors", in ext2_check_descriptors()
788 static unsigned long descriptor_loc(struct super_block *sb, in descriptor_loc() argument
792 struct ext2_sb_info *sbi = EXT2_SB(sb); in descriptor_loc()
797 if (!EXT2_HAS_INCOMPAT_FEATURE(sb, EXT2_FEATURE_INCOMPAT_META_BG) || in descriptor_loc()
802 return ext2_group_first_block_no(sb, bg) + ext2_bg_has_super(sb, bg); in descriptor_loc()
805 static int ext2_fill_super(struct super_block *sb, void *data, int silent) in ext2_fill_super() argument
834 sb->s_fs_info = sbi; in ext2_fill_super()
836 sbi->s_daxdev = fs_dax_get_by_bdev(sb->s_bdev, &sbi->s_dax_part_off, in ext2_fill_super()
849 blocksize = sb_min_blocksize(sb, BLOCK_SIZE); in ext2_fill_super()
851 ext2_msg(sb, KERN_ERR, "error: unable to set blocksize"); in ext2_fill_super()
866 if (!(bh = sb_bread(sb, logic_sb_block))) { in ext2_fill_super()
867 ext2_msg(sb, KERN_ERR, "error: unable to read superblock"); in ext2_fill_super()
876 sb->s_magic = le16_to_cpu(es->s_magic); in ext2_fill_super()
878 if (sb->s_magic != EXT2_SUPER_MAGIC) in ext2_fill_super()
911 if (!parse_options((char *) data, sb, &opts)) in ext2_fill_super()
918 sb->s_flags = (sb->s_flags & ~SB_POSIXACL) | in ext2_fill_super()
919 (test_opt(sb, POSIX_ACL) ? SB_POSIXACL : 0); in ext2_fill_super()
920 sb->s_iflags |= SB_I_CGROUPWB; in ext2_fill_super()
923 (EXT2_HAS_COMPAT_FEATURE(sb, ~0U) || in ext2_fill_super()
924 EXT2_HAS_RO_COMPAT_FEATURE(sb, ~0U) || in ext2_fill_super()
925 EXT2_HAS_INCOMPAT_FEATURE(sb, ~0U))) in ext2_fill_super()
926 ext2_msg(sb, KERN_WARNING, in ext2_fill_super()
934 features = EXT2_HAS_INCOMPAT_FEATURE(sb, ~EXT2_FEATURE_INCOMPAT_SUPP); in ext2_fill_super()
936 ext2_msg(sb, KERN_ERR, "error: couldn't mount because of " in ext2_fill_super()
941 if (!sb_rdonly(sb) && (features = EXT2_HAS_RO_COMPAT_FEATURE(sb, ~EXT2_FEATURE_RO_COMPAT_SUPP))){ in ext2_fill_super()
942 ext2_msg(sb, KERN_ERR, "error: couldn't mount RDWR because of " in ext2_fill_super()
950 ext2_msg(sb, KERN_ERR, in ext2_fill_super()
957 if (test_opt(sb, DAX)) { in ext2_fill_super()
959 ext2_msg(sb, KERN_ERR, in ext2_fill_super()
963 ext2_msg(sb, KERN_ERR, "unsupported blocksize for DAX\n"); in ext2_fill_super()
969 if (sb->s_blocksize != blocksize) { in ext2_fill_super()
972 if (!sb_set_blocksize(sb, blocksize)) { in ext2_fill_super()
973 ext2_msg(sb, KERN_ERR, in ext2_fill_super()
980 bh = sb_bread(sb, logic_sb_block); in ext2_fill_super()
982 ext2_msg(sb, KERN_ERR, "error: couldn't read" in ext2_fill_super()
989 ext2_msg(sb, KERN_ERR, "error: magic mismatch"); in ext2_fill_super()
994 sb->s_maxbytes = ext2_max_size(sb->s_blocksize_bits); in ext2_fill_super()
995 sb->s_max_links = EXT2_LINK_MAX; in ext2_fill_super()
996 sb->s_time_min = S32_MIN; in ext2_fill_super()
997 sb->s_time_max = S32_MAX; in ext2_fill_super()
1008 ext2_msg(sb, KERN_ERR, in ext2_fill_super()
1018 sbi->s_inodes_per_block = sb->s_blocksize / EXT2_INODE_SIZE(sb); in ext2_fill_super()
1023 sbi->s_desc_per_block = sb->s_blocksize / in ext2_fill_super()
1028 ilog2 (EXT2_ADDR_PER_BLOCK(sb)); in ext2_fill_super()
1030 ilog2 (EXT2_DESC_PER_BLOCK(sb)); in ext2_fill_super()
1032 if (sb->s_magic != EXT2_SUPER_MAGIC) in ext2_fill_super()
1035 if (sb->s_blocksize != bh->b_size) { in ext2_fill_super()
1037 ext2_msg(sb, KERN_ERR, "error: unsupported blocksize"); in ext2_fill_super()
1042 ext2_msg(sb, KERN_ERR, in ext2_fill_super()
1044 le32_to_cpu(es->s_log_frag_size), sb->s_blocksize_bits); in ext2_fill_super()
1048 if (sbi->s_blocks_per_group > sb->s_blocksize * 8) { in ext2_fill_super()
1049 ext2_msg(sb, KERN_ERR, in ext2_fill_super()
1054 /* At least inode table, bitmaps, and sb have to fit in one group */ in ext2_fill_super()
1056 ext2_msg(sb, KERN_ERR, in ext2_fill_super()
1062 sbi->s_inodes_per_group > sb->s_blocksize * 8) { in ext2_fill_super()
1063 ext2_msg(sb, KERN_ERR, in ext2_fill_super()
1068 if (sb_bdev_nr_blocks(sb) < le32_to_cpu(es->s_blocks_count)) { in ext2_fill_super()
1069 ext2_msg(sb, KERN_ERR, in ext2_fill_super()
1072 (unsigned)sb_bdev_nr_blocks(sb)); in ext2_fill_super()
1078 / EXT2_BLOCKS_PER_GROUP(sb)) + 1; in ext2_fill_super()
1081 ext2_msg(sb, KERN_ERR, "error: invalid #inodes: %u vs computed %llu", in ext2_fill_super()
1086 db_count = (sbi->s_groups_count + EXT2_DESC_PER_BLOCK(sb) - 1) / in ext2_fill_super()
1087 EXT2_DESC_PER_BLOCK(sb); in ext2_fill_super()
1093 ext2_msg(sb, KERN_ERR, "error: not enough memory"); in ext2_fill_super()
1100 ext2_msg(sb, KERN_ERR, "error: not enough memory"); in ext2_fill_super()
1104 block = descriptor_loc(sb, logic_sb_block, i); in ext2_fill_super()
1105 sbi->s_group_desc[i] = sb_bread(sb, block); in ext2_fill_super()
1109 ext2_msg(sb, KERN_ERR, in ext2_fill_super()
1114 if (!ext2_check_descriptors (sb)) { in ext2_fill_super()
1115 ext2_msg(sb, KERN_ERR, "group descriptors corrupted"); in ext2_fill_super()
1135 ext2_rsv_window_add(sb, &sbi->s_rsv_window_head); in ext2_fill_super()
1138 ext2_count_free_blocks(sb), GFP_KERNEL); in ext2_fill_super()
1141 ext2_count_free_inodes(sb), GFP_KERNEL); in ext2_fill_super()
1145 ext2_count_dirs(sb), GFP_KERNEL); in ext2_fill_super()
1149 ext2_msg(sb, KERN_ERR, "error: insufficient memory"); in ext2_fill_super()
1157 ext2_msg(sb, KERN_ERR, "Failed to create ea_block_cache"); in ext2_fill_super()
1164 sb->s_op = &ext2_sops; in ext2_fill_super()
1165 sb->s_export_op = &ext2_export_ops; in ext2_fill_super()
1166 sb->s_xattr = ext2_xattr_handlers; in ext2_fill_super()
1169 sb->dq_op = &dquot_operations; in ext2_fill_super()
1170 sb->s_qcop = &ext2_quotactl_ops; in ext2_fill_super()
1171 sb->s_quota_types = QTYPE_MASK_USR | QTYPE_MASK_GRP; in ext2_fill_super()
1174 root = ext2_iget(sb, EXT2_ROOT_INO); in ext2_fill_super()
1181 ext2_msg(sb, KERN_ERR, "error: corrupt root inode, run e2fsck"); in ext2_fill_super()
1185 sb->s_root = d_make_root(root); in ext2_fill_super()
1186 if (!sb->s_root) { in ext2_fill_super()
1187 ext2_msg(sb, KERN_ERR, "error: get root inode failed"); in ext2_fill_super()
1191 if (EXT2_HAS_COMPAT_FEATURE(sb, EXT3_FEATURE_COMPAT_HAS_JOURNAL)) in ext2_fill_super()
1192 ext2_msg(sb, KERN_WARNING, in ext2_fill_super()
1194 if (ext2_setup_super (sb, es, sb_rdonly(sb))) in ext2_fill_super()
1195 sb->s_flags |= SB_RDONLY; in ext2_fill_super()
1196 ext2_write_super(sb); in ext2_fill_super()
1201 ext2_msg(sb, KERN_ERR, in ext2_fill_super()
1203 sb->s_id); in ext2_fill_super()
1220 sb->s_fs_info = NULL; in ext2_fill_super()
1226 static void ext2_clear_super_error(struct super_block *sb) in ext2_clear_super_error() argument
1228 struct buffer_head *sbh = EXT2_SB(sb)->s_sbh; in ext2_clear_super_error()
1239 ext2_msg(sb, KERN_ERR, in ext2_clear_super_error()
1246 void ext2_sync_super(struct super_block *sb, struct ext2_super_block *es, in ext2_sync_super() argument
1249 ext2_clear_super_error(sb); in ext2_sync_super()
1250 spin_lock(&EXT2_SB(sb)->s_lock); in ext2_sync_super()
1251 es->s_free_blocks_count = cpu_to_le32(ext2_count_free_blocks(sb)); in ext2_sync_super()
1252 es->s_free_inodes_count = cpu_to_le32(ext2_count_free_inodes(sb)); in ext2_sync_super()
1255 spin_unlock(&EXT2_SB(sb)->s_lock); in ext2_sync_super()
1256 mark_buffer_dirty(EXT2_SB(sb)->s_sbh); in ext2_sync_super()
1258 sync_dirty_buffer(EXT2_SB(sb)->s_sbh); in ext2_sync_super()
1271 static int ext2_sync_fs(struct super_block *sb, int wait) in ext2_sync_fs() argument
1273 struct ext2_sb_info *sbi = EXT2_SB(sb); in ext2_sync_fs()
1274 struct ext2_super_block *es = EXT2_SB(sb)->s_es; in ext2_sync_fs()
1280 dquot_writeback_dquots(sb, -1); in ext2_sync_fs()
1288 ext2_sync_super(sb, es, wait); in ext2_sync_fs()
1292 static int ext2_freeze(struct super_block *sb) in ext2_freeze() argument
1294 struct ext2_sb_info *sbi = EXT2_SB(sb); in ext2_freeze()
1301 if (atomic_long_read(&sb->s_remove_count)) { in ext2_freeze()
1302 ext2_sync_fs(sb, 1); in ext2_freeze()
1309 ext2_sync_super(sb, sbi->s_es, 1); in ext2_freeze()
1314 static int ext2_unfreeze(struct super_block *sb) in ext2_unfreeze() argument
1316 /* Just write sb to clear EXT2_VALID_FS flag */ in ext2_unfreeze()
1317 ext2_write_super(sb); in ext2_unfreeze()
1322 static void ext2_write_super(struct super_block *sb) in ext2_write_super() argument
1324 if (!sb_rdonly(sb)) in ext2_write_super()
1325 ext2_sync_fs(sb, 1); in ext2_write_super()
1328 static int ext2_remount (struct super_block * sb, int * flags, char * data) in ext2_remount() argument
1330 struct ext2_sb_info * sbi = EXT2_SB(sb); in ext2_remount()
1335 sync_filesystem(sb); in ext2_remount()
1343 if (!parse_options(data, sb, &new_opts)) in ext2_remount()
1349 ext2_msg(sb, KERN_WARNING, "warning: refusing change of " in ext2_remount()
1353 if ((bool)(*flags & SB_RDONLY) == sb_rdonly(sb)) in ext2_remount()
1368 err = dquot_suspend(sb, -1); in ext2_remount()
1372 ext2_sync_super(sb, es, 1); in ext2_remount()
1374 __le32 ret = EXT2_HAS_RO_COMPAT_FEATURE(sb, in ext2_remount()
1378 ext2_msg(sb, KERN_WARNING, in ext2_remount()
1390 if (!ext2_setup_super (sb, es, 0)) in ext2_remount()
1391 sb->s_flags &= ~SB_RDONLY; in ext2_remount()
1394 ext2_write_super(sb); in ext2_remount()
1396 dquot_resume(sb, -1); in ext2_remount()
1404 sb->s_flags = (sb->s_flags & ~SB_POSIXACL) | in ext2_remount()
1405 (test_opt(sb, POSIX_ACL) ? SB_POSIXACL : 0); in ext2_remount()
1413 struct super_block *sb = dentry->d_sb; in ext2_statfs() local
1414 struct ext2_sb_info *sbi = EXT2_SB(sb); in ext2_statfs()
1419 if (test_opt (sb, MINIX_DF)) in ext2_statfs()
1443 overhead += ext2_bg_has_super(sb, i) + in ext2_statfs()
1444 ext2_bg_num_gdb(sb, i); in ext2_statfs()
1458 buf->f_bsize = sb->s_blocksize; in ext2_statfs()
1460 buf->f_bfree = ext2_count_free_blocks(sb); in ext2_statfs()
1466 buf->f_ffree = ext2_count_free_inodes(sb); in ext2_statfs()
1486 static ssize_t ext2_quota_read(struct super_block *sb, int type, char *data, in ext2_quota_read() argument
1489 struct inode *inode = sb_dqopt(sb)->files[type]; in ext2_quota_read()
1490 sector_t blk = off >> EXT2_BLOCK_SIZE_BITS(sb); in ext2_quota_read()
1492 int offset = off & (sb->s_blocksize - 1); in ext2_quota_read()
1505 tocopy = min_t(size_t, sb->s_blocksize - offset, toread); in ext2_quota_read()
1508 tmp_bh.b_size = sb->s_blocksize; in ext2_quota_read()
1515 bh = sb_bread(sb, tmp_bh.b_blocknr); in ext2_quota_read()
1530 static ssize_t ext2_quota_write(struct super_block *sb, int type, in ext2_quota_write() argument
1533 struct inode *inode = sb_dqopt(sb)->files[type]; in ext2_quota_write()
1534 sector_t blk = off >> EXT2_BLOCK_SIZE_BITS(sb); in ext2_quota_write()
1536 int offset = off & (sb->s_blocksize - 1); in ext2_quota_write()
1543 tocopy = min_t(size_t, sb->s_blocksize - offset, towrite); in ext2_quota_write()
1546 tmp_bh.b_size = sb->s_blocksize; in ext2_quota_write()
1550 if (offset || tocopy != EXT2_BLOCK_SIZE(sb)) in ext2_quota_write()
1551 bh = sb_bread(sb, tmp_bh.b_blocknr); in ext2_quota_write()
1553 bh = sb_getblk(sb, tmp_bh.b_blocknr); in ext2_quota_write()
1581 static int ext2_quota_on(struct super_block *sb, int type, int format_id, in ext2_quota_on() argument
1587 err = dquot_quota_on(sb, type, format_id, path); in ext2_quota_on()
1602 static int ext2_quota_off(struct super_block *sb, int type) in ext2_quota_off() argument
1604 struct inode *inode = sb_dqopt(sb)->files[type]; in ext2_quota_off()
1610 err = dquot_quota_off(sb, type); in ext2_quota_off()
1623 return dquot_quota_off(sb, type); in ext2_quota_off()