Lines Matching +full:es +full:- +full:enable
1 // SPDX-License-Identifier: GPL-2.0
7 * Laboratoire MASI - Institut Blaise Pascal
16 * Big-endian to little-endian byte-swapping/bitmaps by
28 #include <linux/backing-dev.h>
73 struct ext4_super_block *es);
75 struct ext4_super_block *es);
103 * mmap_lock -> sb_start_pagefault -> invalidate_lock (r) -> transaction start
104 * -> page lock -> i_data_sem (rw)
107 * sb_start_write -> i_mutex -> mmap_lock
108 * sb_start_write -> i_mutex -> transaction start -> page lock ->
112 * sb_start_write -> i_mutex -> invalidate_lock (w) -> i_mmap_rwsem (w) ->
114 * sb_start_write -> i_mutex -> invalidate_lock (w) -> transaction start ->
118 * sb_start_write -> i_mutex -> mmap_lock
119 * sb_start_write -> i_mutex -> transaction start -> i_data_sem (rw)
122 * transaction start -> page lock(s) -> i_data_sem (rw)
144 #define IS_EXT2_SB(sb) ((sb)->s_type == &ext2_fs_type)
160 #define IS_EXT3_SB(sb) ((sb)->s_type == &ext3_fs_type)
179 bh->b_end_io = end_io ? end_io : end_buffer_read_sync; in __ext4_read_bh()
211 return -EIO; in ext4_read_bh()
239 return ERR_PTR(-ENOMEM); in __ext4_sb_bread_gfp()
254 gfp_t gfp = mapping_gfp_constraint(sb->s_bdev->bd_mapping, in ext4_sb_bread()
263 gfp_t gfp = mapping_gfp_constraint(sb->s_bdev->bd_mapping, in ext4_sb_bread_unmovable()
271 struct buffer_head *bh = bdev_getblk(sb->s_bdev, block, in ext4_sb_breadahead_unmovable()
272 sb->s_blocksize, GFP_NOWAIT | __GFP_NOWARN); in ext4_sb_breadahead_unmovable()
282 struct ext4_super_block *es) in ext4_verify_csum_type() argument
287 return es->s_checksum_type == EXT4_CRC32C_CHKSUM; in ext4_verify_csum_type()
291 struct ext4_super_block *es) in ext4_superblock_csum() argument
297 csum = ext4_chksum(sbi, ~0, (char *)es, offset); in ext4_superblock_csum()
303 struct ext4_super_block *es) in ext4_superblock_csum_verify() argument
308 return es->s_checksum == ext4_superblock_csum(sb, es); in ext4_superblock_csum_verify()
313 struct ext4_super_block *es = EXT4_SB(sb)->s_es; in ext4_superblock_csum_set() local
318 es->s_checksum = ext4_superblock_csum(sb, es); in ext4_superblock_csum_set()
324 return le32_to_cpu(bg->bg_block_bitmap_lo) | in ext4_block_bitmap()
326 (ext4_fsblk_t)le32_to_cpu(bg->bg_block_bitmap_hi) << 32 : 0); in ext4_block_bitmap()
332 return le32_to_cpu(bg->bg_inode_bitmap_lo) | in ext4_inode_bitmap()
334 (ext4_fsblk_t)le32_to_cpu(bg->bg_inode_bitmap_hi) << 32 : 0); in ext4_inode_bitmap()
340 return le32_to_cpu(bg->bg_inode_table_lo) | in ext4_inode_table()
342 (ext4_fsblk_t)le32_to_cpu(bg->bg_inode_table_hi) << 32 : 0); in ext4_inode_table()
348 return le16_to_cpu(bg->bg_free_blocks_count_lo) | in ext4_free_group_clusters()
350 (__u32)le16_to_cpu(bg->bg_free_blocks_count_hi) << 16 : 0); in ext4_free_group_clusters()
356 return le16_to_cpu(READ_ONCE(bg->bg_free_inodes_count_lo)) | in ext4_free_inodes_count()
358 (__u32)le16_to_cpu(READ_ONCE(bg->bg_free_inodes_count_hi)) << 16 : 0); in ext4_free_inodes_count()
364 return le16_to_cpu(bg->bg_used_dirs_count_lo) | in ext4_used_dirs_count()
366 (__u32)le16_to_cpu(bg->bg_used_dirs_count_hi) << 16 : 0); in ext4_used_dirs_count()
372 return le16_to_cpu(bg->bg_itable_unused_lo) | in ext4_itable_unused_count()
374 (__u32)le16_to_cpu(bg->bg_itable_unused_hi) << 16 : 0); in ext4_itable_unused_count()
380 bg->bg_block_bitmap_lo = cpu_to_le32((u32)blk); in ext4_block_bitmap_set()
382 bg->bg_block_bitmap_hi = cpu_to_le32(blk >> 32); in ext4_block_bitmap_set()
388 bg->bg_inode_bitmap_lo = cpu_to_le32((u32)blk); in ext4_inode_bitmap_set()
390 bg->bg_inode_bitmap_hi = cpu_to_le32(blk >> 32); in ext4_inode_bitmap_set()
396 bg->bg_inode_table_lo = cpu_to_le32((u32)blk); in ext4_inode_table_set()
398 bg->bg_inode_table_hi = cpu_to_le32(blk >> 32); in ext4_inode_table_set()
404 bg->bg_free_blocks_count_lo = cpu_to_le16((__u16)count); in ext4_free_group_clusters_set()
406 bg->bg_free_blocks_count_hi = cpu_to_le16(count >> 16); in ext4_free_group_clusters_set()
412 WRITE_ONCE(bg->bg_free_inodes_count_lo, cpu_to_le16((__u16)count)); in ext4_free_inodes_set()
414 WRITE_ONCE(bg->bg_free_inodes_count_hi, cpu_to_le16(count >> 16)); in ext4_free_inodes_set()
420 bg->bg_used_dirs_count_lo = cpu_to_le16((__u16)count); in ext4_used_dirs_set()
422 bg->bg_used_dirs_count_hi = cpu_to_le16(count >> 16); in ext4_used_dirs_set()
428 bg->bg_itable_unused_lo = cpu_to_le16((__u16)count); in ext4_itable_unused_set()
430 bg->bg_itable_unused_hi = cpu_to_le16(count >> 16); in ext4_itable_unused_set()
435 now = clamp_val(now, 0, (1ull << 40) - 1); in __ext4_update_tstamp()
445 #define ext4_update_tstamp(es, tstamp) \ argument
446 __ext4_update_tstamp(&(es)->tstamp, &(es)->tstamp ## _hi, \
448 #define ext4_get_tstamp(es, tstamp) \ argument
449 __ext4_get_tstamp(&(es)->tstamp, &(es)->tstamp ## _hi)
458 * This function is designed to update the on-disk superblock only under
469 struct ext4_super_block *es = sbi->s_es; in ext4_maybe_update_superblock() local
470 journal_t *journal = sbi->s_journal; in ext4_maybe_update_superblock()
476 if (sb_rdonly(sb) || !(sb->s_flags & SB_ACTIVE) || in ext4_maybe_update_superblock()
477 !journal || (journal->j_flags & JBD2_UNMOUNT)) in ext4_maybe_update_superblock()
481 last_update = ext4_get_tstamp(es, s_wtime); in ext4_maybe_update_superblock()
483 if (likely(now - last_update < EXT4_SB_REFRESH_INTERVAL_SEC)) in ext4_maybe_update_superblock()
486 lifetime_write_kbytes = sbi->s_kbytes_written + in ext4_maybe_update_superblock()
487 ((part_stat_read(sb->s_bdev, sectors[STAT_WRITE]) - in ext4_maybe_update_superblock()
488 sbi->s_sectors_written_start) >> 1); in ext4_maybe_update_superblock()
496 diff_size = lifetime_write_kbytes - le64_to_cpu(es->s_kbytes_written); in ext4_maybe_update_superblock()
499 schedule_work(&EXT4_SB(sb)->s_sb_upd_work); in ext4_maybe_update_superblock()
504 struct super_block *sb = journal->j_private; in ext4_journal_commit_callback()
509 BUG_ON(txn->t_state == T_FINISHED); in ext4_journal_commit_callback()
511 ext4_process_freed_data(sb, txn->t_tid); in ext4_journal_commit_callback()
514 spin_lock(&sbi->s_md_lock); in ext4_journal_commit_callback()
515 while (!list_empty(&txn->t_private_list)) { in ext4_journal_commit_callback()
516 jce = list_entry(txn->t_private_list.next, in ext4_journal_commit_callback()
518 list_del_init(&jce->jce_list); in ext4_journal_commit_callback()
519 spin_unlock(&sbi->s_md_lock); in ext4_journal_commit_callback()
520 jce->jce_func(sb, jce, error); in ext4_journal_commit_callback()
521 spin_lock(&sbi->s_md_lock); in ext4_journal_commit_callback()
523 spin_unlock(&sbi->s_md_lock); in ext4_journal_commit_callback()
561 (jh && (jh->b_transaction != transaction || in ext4_journalled_writepage_callback()
562 jh->b_next_transaction))) { in ext4_journalled_writepage_callback()
566 } while ((bh = bh->b_this_page) != head); in ext4_journalled_writepage_callback()
574 struct address_space *mapping = jinode->i_vfs_inode->i_mapping; in ext4_journalled_submit_inode_data_buffers()
578 .range_start = jinode->i_dirty_start, in ext4_journalled_submit_inode_data_buffers()
579 .range_end = jinode->i_dirty_end, in ext4_journalled_submit_inode_data_buffers()
584 jinode->i_transaction); in ext4_journalled_submit_inode_data_buffers()
591 if (ext4_should_journal_data(jinode->i_vfs_inode)) in ext4_journal_submit_inode_data_buffers()
602 if (!ext4_should_journal_data(jinode->i_vfs_inode)) in ext4_journal_finish_inode_data_buffers()
660 spin_lock(&sbi->s_error_lock); in save_error_info()
661 sbi->s_add_error_count++; in save_error_info()
662 sbi->s_last_error_code = error; in save_error_info()
663 sbi->s_last_error_line = line; in save_error_info()
664 sbi->s_last_error_ino = ino; in save_error_info()
665 sbi->s_last_error_block = block; in save_error_info()
666 sbi->s_last_error_func = func; in save_error_info()
667 sbi->s_last_error_time = ktime_get_real_seconds(); in save_error_info()
668 if (!sbi->s_first_error_time) { in save_error_info()
669 sbi->s_first_error_code = error; in save_error_info()
670 sbi->s_first_error_line = line; in save_error_info()
671 sbi->s_first_error_ino = ino; in save_error_info()
672 sbi->s_first_error_block = block; in save_error_info()
673 sbi->s_first_error_func = func; in save_error_info()
674 sbi->s_first_error_time = sbi->s_last_error_time; in save_error_info()
676 spin_unlock(&sbi->s_error_lock); in save_error_info()
703 journal_t *journal = EXT4_SB(sb)->s_journal; in ext4_handle_error()
706 EXT4_SB(sb)->s_mount_state |= EXT4_ERROR_FS; in ext4_handle_error()
711 set_bit(EXT4_FLAGS_SHUTDOWN, &EXT4_SB(sb)->s_ext4_flags); in ext4_handle_error()
713 jbd2_journal_abort(journal, -EIO); in ext4_handle_error()
716 if (!bdev_read_only(sb->s_bdev)) { in ext4_handle_error()
725 schedule_work(&EXT4_SB(sb)->s_sb_upd_work); in ext4_handle_error()
732 * could panic during 'reboot -f' as the underlying device got already in ext4_handle_error()
736 panic("EXT4-fs (device %s): panic forced after error\n", in ext4_handle_error()
737 sb->s_id); in ext4_handle_error()
743 ext4_msg(sb, KERN_CRIT, "Remounting filesystem read-only"); in ext4_handle_error()
747 * sb->s_umount semaphore and setting it without proper remount in ext4_handle_error()
757 journal_t *journal = sbi->s_journal; in update_super_work()
768 if (!sb_rdonly(sbi->s_sb) && journal) { in update_super_work()
769 struct buffer_head *sbh = sbi->s_sbh; in update_super_work()
780 if (sbi->s_add_error_count > 0) in update_super_work()
783 ext4_update_super(sbi->s_sb); in update_super_work()
785 ext4_msg(sbi->s_sb, KERN_ERR, "previous I/O error to " in update_super_work()
807 ext4_commit_super(sbi->s_sb); in update_super_work()
812 ___ratelimit(&(EXT4_SB(sb)->s_err_ratelimit_state), \
813 "EXT4-fs error")
831 "EXT4-fs error (device %s): %s:%d: comm %s: %pV\n", in __ext4_error()
832 sb->s_id, function, line, current->comm, &vaf); in __ext4_error()
847 if (unlikely(ext4_forced_shutdown(inode->i_sb))) in __ext4_error_inode()
850 trace_ext4_error(inode->i_sb, function, line); in __ext4_error_inode()
851 if (ext4_error_ratelimit(inode->i_sb)) { in __ext4_error_inode()
856 printk(KERN_CRIT "EXT4-fs error (device %s): %s:%d: " in __ext4_error_inode()
858 inode->i_sb->s_id, function, line, inode->i_ino, in __ext4_error_inode()
859 block, current->comm, &vaf); in __ext4_error_inode()
861 printk(KERN_CRIT "EXT4-fs error (device %s): %s:%d: " in __ext4_error_inode()
863 inode->i_sb->s_id, function, line, inode->i_ino, in __ext4_error_inode()
864 current->comm, &vaf); in __ext4_error_inode()
867 fsnotify_sb_error(inode->i_sb, inode, error ? error : EFSCORRUPTED); in __ext4_error_inode()
869 ext4_handle_error(inode->i_sb, false, error, inode->i_ino, block, in __ext4_error_inode()
882 if (unlikely(ext4_forced_shutdown(inode->i_sb))) in __ext4_error_file()
885 trace_ext4_error(inode->i_sb, function, line); in __ext4_error_file()
886 if (ext4_error_ratelimit(inode->i_sb)) { in __ext4_error_file()
895 "EXT4-fs error (device %s): %s:%d: inode #%lu: " in __ext4_error_file()
897 inode->i_sb->s_id, function, line, inode->i_ino, in __ext4_error_file()
898 block, current->comm, path, &vaf); in __ext4_error_file()
901 "EXT4-fs error (device %s): %s:%d: inode #%lu: " in __ext4_error_file()
903 inode->i_sb->s_id, function, line, inode->i_ino, in __ext4_error_file()
904 current->comm, path, &vaf); in __ext4_error_file()
907 fsnotify_sb_error(inode->i_sb, inode, EFSCORRUPTED); in __ext4_error_file()
909 ext4_handle_error(inode->i_sb, false, EFSCORRUPTED, inode->i_ino, block, in __ext4_error_file()
919 case -EFSCORRUPTED: in ext4_decode_error()
922 case -EFSBADCRC: in ext4_decode_error()
925 case -EIO: in ext4_decode_error()
928 case -ENOMEM: in ext4_decode_error()
931 case -EROFS: in ext4_decode_error()
932 if (!sb || (EXT4_SB(sb)->s_journal && in ext4_decode_error()
933 EXT4_SB(sb)->s_journal->j_flags & JBD2_ABORT)) in ext4_decode_error()
944 if (snprintf(nbuf, 16, "error %d", -errno) >= 0) in ext4_decode_error()
968 if (errno == -EROFS && journal_current_handle() == NULL && sb_rdonly(sb)) in __ext4_std_error()
973 printk(KERN_CRIT "EXT4-fs error (device %s) in %s:%d: %s\n", in __ext4_std_error()
974 sb->s_id, function, line, errstr); in __ext4_std_error()
978 ext4_handle_error(sb, false, -errno, 0, 0, function, line); in __ext4_std_error()
988 atomic_inc(&EXT4_SB(sb)->s_msg_count); in __ext4_msg()
989 if (!___ratelimit(&(EXT4_SB(sb)->s_msg_ratelimit_state), in __ext4_msg()
990 "EXT4-fs")) in __ext4_msg()
998 printk("%sEXT4-fs (%s): %pV\n", prefix, sb->s_id, &vaf); in __ext4_msg()
1000 printk("%sEXT4-fs: %pV\n", prefix, &vaf); in __ext4_msg()
1006 atomic_inc(&EXT4_SB(sb)->s_warning_count); in ext4_warning_ratelimit()
1007 return ___ratelimit(&(EXT4_SB(sb)->s_warning_ratelimit_state), in ext4_warning_ratelimit()
1008 "EXT4-fs warning"); in ext4_warning_ratelimit()
1023 printk(KERN_WARNING "EXT4-fs warning (device %s): %s:%d: %pV\n", in __ext4_warning()
1024 sb->s_id, function, line, &vaf); in __ext4_warning()
1034 if (!ext4_warning_ratelimit(inode->i_sb)) in __ext4_warning_inode()
1040 printk(KERN_WARNING "EXT4-fs warning (device %s): %s:%d: " in __ext4_warning_inode()
1041 "inode #%lu: comm %s: %pV\n", inode->i_sb->s_id, in __ext4_warning_inode()
1042 function, line, inode->i_ino, current->comm, &vaf); in __ext4_warning_inode()
1064 printk(KERN_CRIT "EXT4-fs error (device %s): %s:%d: group %u, ", in __ext4_grp_locked_error()
1065 sb->s_id, function, line, grp); in __ext4_grp_locked_error()
1078 EXT4_SB(sb)->s_mount_state |= EXT4_ERROR_FS; in __ext4_grp_locked_error()
1079 if (!bdev_read_only(sb->s_bdev)) { in __ext4_grp_locked_error()
1082 schedule_work(&EXT4_SB(sb)->s_sb_upd_work); in __ext4_grp_locked_error()
1116 &grp->bb_state); in ext4_mark_group_bitmap_corrupted()
1118 percpu_counter_sub(&sbi->s_freeclusters_counter, in ext4_mark_group_bitmap_corrupted()
1119 grp->bb_free); in ext4_mark_group_bitmap_corrupted()
1124 &grp->bb_state); in ext4_mark_group_bitmap_corrupted()
1129 percpu_counter_sub(&sbi->s_freeinodes_counter, in ext4_mark_group_bitmap_corrupted()
1137 struct ext4_super_block *es = EXT4_SB(sb)->s_es; in ext4_update_dynamic_rev() local
1139 if (le32_to_cpu(es->s_rev_level) > EXT4_GOOD_OLD_REV) in ext4_update_dynamic_rev()
1147 es->s_first_ino = cpu_to_le32(EXT4_GOOD_OLD_FIRST_INO); in ext4_update_dynamic_rev()
1148 es->s_inode_size = cpu_to_le16(EXT4_GOOD_OLD_INODE_SIZE); in ext4_update_dynamic_rev()
1149 es->s_rev_level = cpu_to_le32(EXT4_DYNAMIC_REV); in ext4_update_dynamic_rev()
1150 /* leave es->s_feature_*compat flags alone */ in ext4_update_dynamic_rev()
1151 /* es->s_uuid will be set by e2fsck if empty */ in ext4_update_dynamic_rev()
1162 return &list_entry(l, struct ext4_inode_info, i_orphan)->vfs_inode; in orphan_list_entry()
1170 le32_to_cpu(sbi->s_es->s_last_orphan)); in dump_orphan_list()
1173 list_for_each(l, &sbi->s_orphan) { in dump_orphan_list()
1177 inode->i_sb->s_id, inode->i_ino, inode, in dump_orphan_list()
1178 inode->i_mode, inode->i_nlink, in dump_orphan_list()
1191 for (type--; type >= 0; type--) in ext4_quotas_off()
1203 return rcu_dereference_protected(sbi->s_qf_names[type], in get_qf_name()
1204 lockdep_is_held(&sb->s_umount)); in get_qf_name()
1217 block = ext4_count_free_clusters(sbi->s_sb); in ext4_percpu_param_init()
1218 ext4_free_blocks_count_set(sbi->s_es, EXT4_C2B(sbi, block)); in ext4_percpu_param_init()
1219 err = percpu_counter_init(&sbi->s_freeclusters_counter, block, in ext4_percpu_param_init()
1222 unsigned long freei = ext4_count_free_inodes(sbi->s_sb); in ext4_percpu_param_init()
1223 sbi->s_es->s_free_inodes_count = cpu_to_le32(freei); in ext4_percpu_param_init()
1224 err = percpu_counter_init(&sbi->s_freeinodes_counter, freei, in ext4_percpu_param_init()
1228 err = percpu_counter_init(&sbi->s_dirs_counter, in ext4_percpu_param_init()
1229 ext4_count_dirs(sbi->s_sb), GFP_KERNEL); in ext4_percpu_param_init()
1231 err = percpu_counter_init(&sbi->s_dirtyclusters_counter, 0, in ext4_percpu_param_init()
1234 err = percpu_counter_init(&sbi->s_sra_exceeded_retry_limit, 0, in ext4_percpu_param_init()
1237 err = percpu_init_rwsem(&sbi->s_writepages_rwsem); in ext4_percpu_param_init()
1240 ext4_msg(sbi->s_sb, KERN_ERR, "insufficient memory"); in ext4_percpu_param_init()
1247 percpu_counter_destroy(&sbi->s_freeclusters_counter); in ext4_percpu_param_destroy()
1248 percpu_counter_destroy(&sbi->s_freeinodes_counter); in ext4_percpu_param_destroy()
1249 percpu_counter_destroy(&sbi->s_dirs_counter); in ext4_percpu_param_destroy()
1250 percpu_counter_destroy(&sbi->s_dirtyclusters_counter); in ext4_percpu_param_destroy()
1251 percpu_counter_destroy(&sbi->s_sra_exceeded_retry_limit); in ext4_percpu_param_destroy()
1252 percpu_free_rwsem(&sbi->s_writepages_rwsem); in ext4_percpu_param_destroy()
1261 group_desc = rcu_dereference(sbi->s_group_desc); in ext4_group_desc_free()
1262 for (i = 0; i < sbi->s_gdb_count; i++) in ext4_group_desc_free()
1274 flex_groups = rcu_dereference(sbi->s_flex_groups); in ext4_flex_groups_free()
1276 for (i = 0; i < sbi->s_flex_groups_allocated; i++) in ext4_flex_groups_free()
1286 struct ext4_super_block *es = sbi->s_es; in ext4_put_super() local
1293 * path which could have sbi->s_journal->j_task as NULL in ext4_put_super()
1294 * Unregister sysfs before flush sbi->s_sb_upd_work. in ext4_put_super()
1302 if (___ratelimit(&ext4_mount_msg_ratelimit, "EXT4-fs unmount")) in ext4_put_super()
1304 &sb->s_uuid); in ext4_put_super()
1309 flush_work(&sbi->s_sb_upd_work); in ext4_put_super()
1310 destroy_workqueue(sbi->rsv_conversion_wq); in ext4_put_super()
1313 if (sbi->s_journal) { in ext4_put_super()
1314 aborted = is_journal_aborted(sbi->s_journal); in ext4_put_super()
1315 err = jbd2_journal_destroy(sbi->s_journal); in ext4_put_super()
1316 sbi->s_journal = NULL; in ext4_put_super()
1318 ext4_abort(sb, -err, "Couldn't clean up the journal"); in ext4_put_super()
1323 timer_shutdown_sync(&sbi->s_err_report); in ext4_put_super()
1331 es->s_state = cpu_to_le16(sbi->s_mount_state); in ext4_put_super()
1339 WARN_ON_ONCE(!(sbi->s_mount_state & EXT4_ERROR_FS) && in ext4_put_super()
1340 percpu_counter_sum(&sbi->s_dirtyclusters_counter)); in ext4_put_super()
1347 /* Debugging code just in case the in-memory inode orphan list in ext4_put_super()
1348 * isn't empty. The on-disk one can be non-empty if we've in ext4_put_super()
1350 * in-memory list had better be clean by this point. */ in ext4_put_super()
1351 if (!list_empty(&sbi->s_orphan)) in ext4_put_super()
1353 ASSERT(list_empty(&sbi->s_orphan)); in ext4_put_super()
1355 sync_blockdev(sb->s_bdev); in ext4_put_super()
1356 invalidate_bdev(sb->s_bdev); in ext4_put_super()
1357 if (sbi->s_journal_bdev_file) { in ext4_put_super()
1360 * floating about in memory - the physical journal device may in ext4_put_super()
1361 * hotswapped, and it breaks the `ro-after' testing code. in ext4_put_super()
1363 sync_blockdev(file_bdev(sbi->s_journal_bdev_file)); in ext4_put_super()
1364 invalidate_bdev(file_bdev(sbi->s_journal_bdev_file)); in ext4_put_super()
1367 ext4_xattr_destroy_cache(sbi->s_ea_inode_cache); in ext4_put_super()
1368 sbi->s_ea_inode_cache = NULL; in ext4_put_super()
1370 ext4_xattr_destroy_cache(sbi->s_ea_block_cache); in ext4_put_super()
1371 sbi->s_ea_block_cache = NULL; in ext4_put_super()
1375 brelse(sbi->s_sbh); in ext4_put_super()
1376 sb->s_fs_info = NULL; in ext4_put_super()
1381 kobject_put(&sbi->s_kobj); in ext4_put_super()
1382 wait_for_completion(&sbi->s_kobj_unregister); in ext4_put_super()
1383 kfree(sbi->s_blockgroup_lock); in ext4_put_super()
1384 fs_put_dax(sbi->s_daxdev, NULL); in ext4_put_super()
1385 fscrypt_free_dummy_policy(&sbi->s_dummy_enc_policy); in ext4_put_super()
1387 utf8_unload(sb->s_encoding); in ext4_put_super()
1405 inode_set_iversion(&ei->vfs_inode, 1); in ext4_alloc_inode()
1406 ei->i_flags = 0; in ext4_alloc_inode()
1407 spin_lock_init(&ei->i_raw_lock); in ext4_alloc_inode()
1408 ei->i_prealloc_node = RB_ROOT; in ext4_alloc_inode()
1409 atomic_set(&ei->i_prealloc_active, 0); in ext4_alloc_inode()
1410 rwlock_init(&ei->i_prealloc_lock); in ext4_alloc_inode()
1411 ext4_es_init_tree(&ei->i_es_tree); in ext4_alloc_inode()
1412 rwlock_init(&ei->i_es_lock); in ext4_alloc_inode()
1413 INIT_LIST_HEAD(&ei->i_es_list); in ext4_alloc_inode()
1414 ei->i_es_all_nr = 0; in ext4_alloc_inode()
1415 ei->i_es_shk_nr = 0; in ext4_alloc_inode()
1416 ei->i_es_shrink_lblk = 0; in ext4_alloc_inode()
1417 ei->i_reserved_data_blocks = 0; in ext4_alloc_inode()
1418 spin_lock_init(&(ei->i_block_reservation_lock)); in ext4_alloc_inode()
1419 ext4_init_pending_tree(&ei->i_pending_tree); in ext4_alloc_inode()
1421 ei->i_reserved_quota = 0; in ext4_alloc_inode()
1422 memset(&ei->i_dquot, 0, sizeof(ei->i_dquot)); in ext4_alloc_inode()
1424 ei->jinode = NULL; in ext4_alloc_inode()
1425 INIT_LIST_HEAD(&ei->i_rsv_conversion_list); in ext4_alloc_inode()
1426 spin_lock_init(&ei->i_completed_io_lock); in ext4_alloc_inode()
1427 ei->i_sync_tid = 0; in ext4_alloc_inode()
1428 ei->i_datasync_tid = 0; in ext4_alloc_inode()
1429 atomic_set(&ei->i_unwritten, 0); in ext4_alloc_inode()
1430 INIT_WORK(&ei->i_rsv_conversion_work, ext4_end_io_rsv_work); in ext4_alloc_inode()
1431 ext4_fc_init_inode(&ei->vfs_inode); in ext4_alloc_inode()
1432 mutex_init(&ei->i_fc_lock); in ext4_alloc_inode()
1433 return &ei->vfs_inode; in ext4_alloc_inode()
1450 if (!list_empty(&(EXT4_I(inode)->i_fc_list))) { in ext4_free_in_core_inode()
1452 __func__, inode->i_ino); in ext4_free_in_core_inode()
1459 if (!list_empty(&(EXT4_I(inode)->i_orphan))) { in ext4_destroy_inode()
1460 ext4_msg(inode->i_sb, KERN_ERR, in ext4_destroy_inode()
1462 inode->i_ino, EXT4_I(inode)); in ext4_destroy_inode()
1469 if (!(EXT4_SB(inode->i_sb)->s_mount_state & EXT4_ERROR_FS) && in ext4_destroy_inode()
1470 WARN_ON_ONCE(EXT4_I(inode)->i_reserved_data_blocks)) in ext4_destroy_inode()
1471 ext4_msg(inode->i_sb, KERN_ERR, in ext4_destroy_inode()
1473 inode->i_ino, EXT4_I(inode), in ext4_destroy_inode()
1474 EXT4_I(inode)->i_reserved_data_blocks); in ext4_destroy_inode()
1486 INIT_LIST_HEAD(&ei->i_orphan); in init_once()
1487 init_rwsem(&ei->xattr_sem); in init_once()
1488 init_rwsem(&ei->i_data_sem); in init_once()
1489 inode_init_once(&ei->vfs_inode); in init_once()
1490 ext4_fc_init_inode(&ei->vfs_inode); in init_once()
1502 return -ENOMEM; in init_inodecache()
1524 if (EXT4_I(inode)->jinode) { in ext4_clear_inode()
1526 EXT4_I(inode)->jinode); in ext4_clear_inode()
1527 jbd2_free_inode(EXT4_I(inode)->jinode); in ext4_clear_inode()
1528 EXT4_I(inode)->jinode = NULL; in ext4_clear_inode()
1546 if (generation && inode->i_generation != generation) { in ext4_nfs_get_inode()
1548 return ERR_PTR(-ESTALE); in ext4_nfs_get_inode()
1598 return EXT4_I(inode)->i_dquot; in ext4_get_dquots()
1689 {"remount-ro", EXT4_MOUNT_ERRORS_RO},
1930 ext4_sb_read_encoding(const struct ext4_super_block *es) in ext4_sb_read_encoding() argument
1932 __u16 magic = le16_to_cpu(es->s_encoding); in ext4_sb_read_encoding()
1996 struct ext4_fs_context *ctx = fc->fs_private; in ext4_fc_free()
2003 kfree(ctx->s_qf_names[i]); in ext4_fc_free()
2005 fscrypt_free_dummy_policy(&ctx->dummy_enc_policy); in ext4_fc_free()
2015 return -ENOMEM; in ext4_init_fs_context()
2017 fc->fs_private = ctx; in ext4_init_fs_context()
2018 fc->ops = &ext4_context_ops; in ext4_init_fs_context()
2030 struct ext4_fs_context *ctx = fc->fs_private; in note_qf_name()
2033 if (param->size < 1) { in note_qf_name()
2035 return -EINVAL; in note_qf_name()
2037 if (strchr(param->string, '/')) { in note_qf_name()
2040 return -EINVAL; in note_qf_name()
2042 if (ctx->s_qf_names[qtype]) { in note_qf_name()
2043 if (strcmp(ctx->s_qf_names[qtype], param->string) != 0) { in note_qf_name()
2047 return -EINVAL; in note_qf_name()
2052 qname = kmemdup_nul(param->string, param->size, GFP_KERNEL); in note_qf_name()
2056 return -ENOMEM; in note_qf_name()
2058 ctx->s_qf_names[qtype] = qname; in note_qf_name()
2059 ctx->qname_spec |= 1 << qtype; in note_qf_name()
2060 ctx->spec |= EXT4_SPEC_JQUOTA; in note_qf_name()
2069 struct ext4_fs_context *ctx = fc->fs_private; in unnote_qf_name()
2071 kfree(ctx->s_qf_names[qtype]); in unnote_qf_name()
2073 ctx->s_qf_names[qtype] = NULL; in unnote_qf_name()
2074 ctx->qname_spec |= 1 << qtype; in unnote_qf_name()
2075 ctx->spec |= EXT4_SPEC_JQUOTA; in unnote_qf_name()
2088 return -EINVAL; in ext4_parse_test_dummy_encryption()
2091 &ctx->dummy_enc_policy); in ext4_parse_test_dummy_encryption()
2092 if (err == -EINVAL) { in ext4_parse_test_dummy_encryption()
2094 "Value of option \"%s\" is unrecognized", param->key); in ext4_parse_test_dummy_encryption()
2095 } else if (err == -EEXIST) { in ext4_parse_test_dummy_encryption()
2098 return -EINVAL; in ext4_parse_test_dummy_encryption()
2107 ctx->mask_s_##name |= flag; \
2108 ctx->vals_s_##name |= flag; \
2115 ctx->mask_s_##name |= flag; \
2116 ctx->vals_s_##name &= ~flag; \
2123 return (ctx->vals_s_##name & flag); \
2136 struct ext4_fs_context *ctx = fc->fs_private; in ext4_parse_param()
2145 is_remount = fc->purpose == FS_CONTEXT_FOR_RECONFIGURE; in ext4_parse_param()
2147 for (m = ext4_mount_opts; m->token != Opt_err; m++) in ext4_parse_param()
2148 if (token == m->token) in ext4_parse_param()
2151 ctx->opt_flags |= m->flags; in ext4_parse_param()
2153 if (m->flags & MOPT_EXPLICIT) { in ext4_parse_param()
2154 if (m->mount_opt & EXT4_MOUNT_DELALLOC) { in ext4_parse_param()
2156 } else if (m->mount_opt & EXT4_MOUNT_JOURNAL_CHECKSUM) { in ext4_parse_param()
2160 return -EINVAL; in ext4_parse_param()
2163 if (m->flags & MOPT_NOSUPPORT) { in ext4_parse_param()
2165 param->key); in ext4_parse_param()
2172 if (!*param->string) in ext4_parse_param()
2177 if (!*param->string) in ext4_parse_param()
2183 if (fc->purpose == FS_CONTEXT_FOR_RECONFIGURE) { in ext4_parse_param()
2185 "Ignoring %s option on remount", param->key); in ext4_parse_param()
2187 ctx->s_sb_block = result.uint_32; in ext4_parse_param()
2188 ctx->spec |= EXT4_SPEC_s_sb_block; in ext4_parse_param()
2193 param->key); in ext4_parse_param()
2208 ctx->s_jquota_fmt = result.uint_32; in ext4_parse_param()
2209 ctx->spec |= EXT4_SPEC_JQFMT; in ext4_parse_param()
2215 ctx->spec |= EXT4_SPEC_DATAJ; in ext4_parse_param()
2225 return -EINVAL; in ext4_parse_param()
2227 ctx->s_commit_interval = HZ * result.uint_32; in ext4_parse_param()
2228 ctx->spec |= EXT4_SPEC_s_commit_interval; in ext4_parse_param()
2234 return -EINVAL; in ext4_parse_param()
2236 ctx->s_want_extra_isize = result.uint_32; in ext4_parse_param()
2237 ctx->spec |= EXT4_SPEC_s_want_extra_isize; in ext4_parse_param()
2240 ctx->s_max_batch_time = result.uint_32; in ext4_parse_param()
2241 ctx->spec |= EXT4_SPEC_s_max_batch_time; in ext4_parse_param()
2244 ctx->s_min_batch_time = result.uint_32; in ext4_parse_param()
2245 ctx->spec |= EXT4_SPEC_s_min_batch_time; in ext4_parse_param()
2252 "EXT4-fs: inode_readahead_blks must be " in ext4_parse_param()
2254 return -EINVAL; in ext4_parse_param()
2256 ctx->s_inode_readahead_blks = result.uint_32; in ext4_parse_param()
2257 ctx->spec |= EXT4_SPEC_s_inode_readahead_blks; in ext4_parse_param()
2261 ctx->s_li_wait_mult = EXT4_DEF_LI_WAIT_MULT; in ext4_parse_param()
2262 if (param->type == fs_value_is_string) in ext4_parse_param()
2263 ctx->s_li_wait_mult = result.uint_32; in ext4_parse_param()
2264 ctx->spec |= EXT4_SPEC_s_li_wait_mult; in ext4_parse_param()
2267 ctx->s_max_dir_size_kb = result.uint_32; in ext4_parse_param()
2268 ctx->spec |= EXT4_SPEC_s_max_dir_size_kb; in ext4_parse_param()
2272 ctx->s_fc_debug_max_replay = result.uint_32; in ext4_parse_param()
2273 ctx->spec |= EXT4_SPEC_s_fc_debug_max_replay; in ext4_parse_param()
2277 ctx->s_stripe = result.uint_32; in ext4_parse_param()
2278 ctx->spec |= EXT4_SPEC_s_stripe; in ext4_parse_param()
2281 ctx->s_resuid = result.uid; in ext4_parse_param()
2282 ctx->spec |= EXT4_SPEC_s_resuid; in ext4_parse_param()
2285 ctx->s_resgid = result.gid; in ext4_parse_param()
2286 ctx->spec |= EXT4_SPEC_s_resgid; in ext4_parse_param()
2292 return -EINVAL; in ext4_parse_param()
2294 ctx->journal_devnum = result.uint_32; in ext4_parse_param()
2295 ctx->spec |= EXT4_SPEC_JOURNAL_DEV; in ext4_parse_param()
2306 return -EINVAL; in ext4_parse_param()
2313 return -EINVAL; in ext4_parse_param()
2317 ctx->journal_devnum = new_encode_dev(journal_inode->i_rdev); in ext4_parse_param()
2318 ctx->spec |= EXT4_SPEC_JOURNAL_DEV; in ext4_parse_param()
2325 " (must be 0-7)"); in ext4_parse_param()
2326 return -EINVAL; in ext4_parse_param()
2328 ctx->journal_ioprio = in ext4_parse_param()
2330 ctx->spec |= EXT4_SPEC_JOURNAL_IOPRIO; in ext4_parse_param()
2362 return -EINVAL; in ext4_parse_param()
2366 ctx_set_mount_opt(ctx, m->mount_opt); in ext4_parse_param()
2368 ctx_clear_mount_opt(ctx, m->mount_opt); in ext4_parse_param()
2373 ctx->spec |= EXT4_SPEC_mb_optimize_scan; in ext4_parse_param()
2376 ctx->spec |= EXT4_SPEC_mb_optimize_scan; in ext4_parse_param()
2380 return -EINVAL; in ext4_parse_param()
2389 if (m->token == Opt_err) { in ext4_parse_param()
2391 param->key); in ext4_parse_param()
2393 return -EINVAL; in ext4_parse_param()
2399 if ((param->type == fs_value_is_flag) || in ext4_parse_param()
2403 if (m->flags & MOPT_CLEAR) in ext4_parse_param()
2405 else if (unlikely(!(m->flags & MOPT_SET))) { in ext4_parse_param()
2408 param->key); in ext4_parse_param()
2410 return -EINVAL; in ext4_parse_param()
2412 if (m->flags & MOPT_2) { in ext4_parse_param()
2414 ctx_set_mount_opt2(ctx, m->mount_opt); in ext4_parse_param()
2416 ctx_clear_mount_opt2(ctx, m->mount_opt); in ext4_parse_param()
2419 ctx_set_mount_opt(ctx, m->mount_opt); in ext4_parse_param()
2421 ctx_clear_mount_opt(ctx, m->mount_opt); in ext4_parse_param()
2454 return -ENOMEM; in parse_options()
2482 int ret = -ENOMEM; in parse_apply_sb_mount_options()
2484 if (!sbi->s_es->s_mount_opts[0]) in parse_apply_sb_mount_options()
2487 s_mount_opts = kstrndup(sbi->s_es->s_mount_opts, in parse_apply_sb_mount_options()
2488 sizeof(sbi->s_es->s_mount_opts), in parse_apply_sb_mount_options()
2501 fc->fs_private = s_ctx; in parse_apply_sb_mount_options()
2502 fc->s_fs_info = sbi; in parse_apply_sb_mount_options()
2518 if (s_ctx->spec & EXT4_SPEC_JOURNAL_DEV) in parse_apply_sb_mount_options()
2519 m_ctx->journal_devnum = s_ctx->journal_devnum; in parse_apply_sb_mount_options()
2520 if (s_ctx->spec & EXT4_SPEC_JOURNAL_IOPRIO) in parse_apply_sb_mount_options()
2521 m_ctx->journal_ioprio = s_ctx->journal_ioprio; in parse_apply_sb_mount_options()
2540 struct ext4_fs_context *ctx = fc->fs_private; in ext4_apply_quota_options()
2548 if (ctx->spec & EXT4_SPEC_JQUOTA) { in ext4_apply_quota_options()
2550 if (!(ctx->qname_spec & (1 << i))) in ext4_apply_quota_options()
2553 qname = ctx->s_qf_names[i]; /* May be NULL */ in ext4_apply_quota_options()
2556 ctx->s_qf_names[i] = NULL; in ext4_apply_quota_options()
2557 qname = rcu_replace_pointer(sbi->s_qf_names[i], qname, in ext4_apply_quota_options()
2558 lockdep_is_held(&sb->s_umount)); in ext4_apply_quota_options()
2564 if (ctx->spec & EXT4_SPEC_JQFMT) in ext4_apply_quota_options()
2565 sbi->s_jquota_fmt = ctx->s_jquota_fmt; in ext4_apply_quota_options()
2576 struct ext4_fs_context *ctx = fc->fs_private; in ext4_check_quota_consistency()
2591 "Cannot enable project quota enforcement."); in ext4_check_quota_consistency()
2592 return -EINVAL; in ext4_check_quota_consistency()
2598 ctx->mask_s_mount_opt & quota_flags && in ext4_check_quota_consistency()
2602 if (ctx->spec & EXT4_SPEC_JQUOTA) { in ext4_check_quota_consistency()
2605 if (!(ctx->qname_spec & (1 << i))) in ext4_check_quota_consistency()
2609 !!sbi->s_qf_names[i] != !!ctx->s_qf_names[i]) in ext4_check_quota_consistency()
2612 if (sbi->s_qf_names[i] && ctx->s_qf_names[i] && in ext4_check_quota_consistency()
2614 ctx->s_qf_names[i]) != 0) in ext4_check_quota_consistency()
2626 if (ctx->spec & EXT4_SPEC_JQFMT) { in ext4_check_quota_consistency()
2627 if (sbi->s_jquota_fmt != ctx->s_jquota_fmt && quota_loaded) in ext4_check_quota_consistency()
2638 ctx->s_qf_names[USRQUOTA]); in ext4_check_quota_consistency()
2640 ctx->s_qf_names[GRPQUOTA]); in ext4_check_quota_consistency()
2661 return -EINVAL; in ext4_check_quota_consistency()
2664 if (!(ctx->spec & EXT4_SPEC_JQFMT || sbi->s_jquota_fmt)) { in ext4_check_quota_consistency()
2667 return -EINVAL; in ext4_check_quota_consistency()
2676 return -EINVAL; in ext4_check_quota_consistency()
2680 return -EINVAL; in ext4_check_quota_consistency()
2684 return -EINVAL; in ext4_check_quota_consistency()
2693 const struct ext4_fs_context *ctx = fc->fs_private; in ext4_check_test_dummy_encryption()
2696 if (!fscrypt_is_dummy_policy_set(&ctx->dummy_enc_policy)) in ext4_check_test_dummy_encryption()
2702 return -EINVAL; in ext4_check_test_dummy_encryption()
2710 if (fc->purpose == FS_CONTEXT_FOR_RECONFIGURE) { in ext4_check_test_dummy_encryption()
2711 if (fscrypt_dummy_policies_equal(&sbi->s_dummy_enc_policy, in ext4_check_test_dummy_encryption()
2712 &ctx->dummy_enc_policy)) in ext4_check_test_dummy_encryption()
2716 return -EINVAL; in ext4_check_test_dummy_encryption()
2719 if (fscrypt_is_dummy_policy_set(&sbi->s_dummy_enc_policy)) { in ext4_check_test_dummy_encryption()
2720 if (fscrypt_dummy_policies_equal(&sbi->s_dummy_enc_policy, in ext4_check_test_dummy_encryption()
2721 &ctx->dummy_enc_policy)) in ext4_check_test_dummy_encryption()
2725 return -EINVAL; in ext4_check_test_dummy_encryption()
2733 if (!fscrypt_is_dummy_policy_set(&ctx->dummy_enc_policy) || in ext4_apply_test_dummy_encryption()
2735 fscrypt_is_dummy_policy_set(&EXT4_SB(sb)->s_dummy_enc_policy)) in ext4_apply_test_dummy_encryption()
2737 EXT4_SB(sb)->s_dummy_enc_policy = ctx->dummy_enc_policy; in ext4_apply_test_dummy_encryption()
2738 memset(&ctx->dummy_enc_policy, 0, sizeof(ctx->dummy_enc_policy)); in ext4_apply_test_dummy_encryption()
2745 struct ext4_fs_context *ctx = fc->fs_private; in ext4_check_opt_consistency()
2746 struct ext4_sb_info *sbi = fc->s_fs_info; in ext4_check_opt_consistency()
2747 int is_remount = fc->purpose == FS_CONTEXT_FOR_RECONFIGURE; in ext4_check_opt_consistency()
2750 if ((ctx->opt_flags & MOPT_NO_EXT2) && IS_EXT2_SB(sb)) { in ext4_check_opt_consistency()
2753 return -EINVAL; in ext4_check_opt_consistency()
2755 if ((ctx->opt_flags & MOPT_NO_EXT3) && IS_EXT3_SB(sb)) { in ext4_check_opt_consistency()
2758 return -EINVAL; in ext4_check_opt_consistency()
2761 if (ctx->s_want_extra_isize > in ext4_check_opt_consistency()
2762 (sbi->s_inode_size - EXT4_GOOD_OLD_INODE_SIZE)) { in ext4_check_opt_consistency()
2765 ctx->s_want_extra_isize); in ext4_check_opt_consistency()
2766 return -EINVAL; in ext4_check_opt_consistency()
2773 if ((ctx->spec & EXT4_SPEC_DATAJ) && is_remount) { in ext4_check_opt_consistency()
2774 if (!sbi->s_journal) { in ext4_check_opt_consistency()
2783 return -EINVAL; in ext4_check_opt_consistency()
2792 return -EINVAL; in ext4_check_opt_consistency()
2796 (!(sbi->s_mount_opt & EXT4_MOUNT_DAX_ALWAYS) || in ext4_check_opt_consistency()
2797 (sbi->s_mount_opt2 & EXT4_MOUNT2_DAX_NEVER))) { in ext4_check_opt_consistency()
2801 return -EINVAL; in ext4_check_opt_consistency()
2803 (!(sbi->s_mount_opt2 & EXT4_MOUNT2_DAX_NEVER) || in ext4_check_opt_consistency()
2804 (sbi->s_mount_opt & EXT4_MOUNT_DAX_ALWAYS))) { in ext4_check_opt_consistency()
2807 ((sbi->s_mount_opt & EXT4_MOUNT_DAX_ALWAYS) || in ext4_check_opt_consistency()
2808 (sbi->s_mount_opt2 & EXT4_MOUNT2_DAX_NEVER) || in ext4_check_opt_consistency()
2809 !(sbi->s_mount_opt2 & EXT4_MOUNT2_DAX_INODE))) { in ext4_check_opt_consistency()
2819 struct ext4_fs_context *ctx = fc->fs_private; in ext4_apply_options()
2820 struct ext4_sb_info *sbi = fc->s_fs_info; in ext4_apply_options()
2822 sbi->s_mount_opt &= ~ctx->mask_s_mount_opt; in ext4_apply_options()
2823 sbi->s_mount_opt |= ctx->vals_s_mount_opt; in ext4_apply_options()
2824 sbi->s_mount_opt2 &= ~ctx->mask_s_mount_opt2; in ext4_apply_options()
2825 sbi->s_mount_opt2 |= ctx->vals_s_mount_opt2; in ext4_apply_options()
2826 sb->s_flags &= ~ctx->mask_s_flags; in ext4_apply_options()
2827 sb->s_flags |= ctx->vals_s_flags; in ext4_apply_options()
2829 #define APPLY(X) ({ if (ctx->spec & EXT4_SPEC_##X) sbi->X = ctx->X; }) in ext4_apply_options()
2853 struct ext4_fs_context *ctx = fc->fs_private; in ext4_validate_options()
2856 usr_qf_name = ctx->s_qf_names[USRQUOTA]; in ext4_validate_options()
2857 grp_qf_name = ctx->s_qf_names[GRPQUOTA]; in ext4_validate_options()
2870 return -EINVAL; in ext4_validate_options()
2884 if (sbi->s_jquota_fmt) { in ext4_show_quota_options()
2887 switch (sbi->s_jquota_fmt) { in ext4_show_quota_options()
2902 usr_qf_name = rcu_dereference(sbi->s_qf_names[USRQUOTA]); in ext4_show_quota_options()
2903 grp_qf_name = rcu_dereference(sbi->s_qf_names[GRPQUOTA]); in ext4_show_quota_options()
2916 for (spec = ext4_param_specs; spec->name != NULL; spec++) in token2str()
2917 if (spec->opt == token && !spec->type) in token2str()
2919 return spec->name; in token2str()
2924 * - it's set to a non-default value OR
2925 * - if the per-sb default is different from the global default
2931 struct ext4_super_block *es = sbi->s_es; in _ext4_show_options() local
2939 if (sbi->s_sb_block != 1) in _ext4_show_options()
2940 SEQ_OPTS_PRINT("sb=%llu", sbi->s_sb_block); in _ext4_show_options()
2942 for (m = ext4_mount_opts; m->token != Opt_err; m++) { in _ext4_show_options()
2943 int want_set = m->flags & MOPT_SET; in _ext4_show_options()
2944 int opt_2 = m->flags & MOPT_2; in _ext4_show_options()
2947 if (((m->flags & (MOPT_SET|MOPT_CLEAR)) == 0) || in _ext4_show_options()
2948 m->flags & MOPT_SKIP) in _ext4_show_options()
2952 mount_opt = sbi->s_mount_opt2; in _ext4_show_options()
2953 def_mount_opt = sbi->s_def_mount_opt2; in _ext4_show_options()
2955 mount_opt = sbi->s_mount_opt; in _ext4_show_options()
2956 def_mount_opt = sbi->s_def_mount_opt; in _ext4_show_options()
2959 if (!nodefs && !(m->mount_opt & (mount_opt ^ def_mount_opt))) in _ext4_show_options()
2963 (mount_opt & m->mount_opt) != m->mount_opt) || in _ext4_show_options()
2964 (!want_set && (mount_opt & m->mount_opt))) in _ext4_show_options()
2966 SEQ_OPTS_PRINT("%s", token2str(m->token)); in _ext4_show_options()
2969 if (nodefs || !uid_eq(sbi->s_resuid, make_kuid(&init_user_ns, EXT4_DEF_RESUID)) || in _ext4_show_options()
2970 le16_to_cpu(es->s_def_resuid) != EXT4_DEF_RESUID) in _ext4_show_options()
2972 from_kuid_munged(&init_user_ns, sbi->s_resuid)); in _ext4_show_options()
2973 if (nodefs || !gid_eq(sbi->s_resgid, make_kgid(&init_user_ns, EXT4_DEF_RESGID)) || in _ext4_show_options()
2974 le16_to_cpu(es->s_def_resgid) != EXT4_DEF_RESGID) in _ext4_show_options()
2976 from_kgid_munged(&init_user_ns, sbi->s_resgid)); in _ext4_show_options()
2977 def_errors = nodefs ? -1 : le16_to_cpu(es->s_errors); in _ext4_show_options()
2979 SEQ_OPTS_PUTS("errors=remount-ro"); in _ext4_show_options()
2984 if (nodefs || sbi->s_commit_interval != JBD2_DEFAULT_MAX_COMMIT_AGE*HZ) in _ext4_show_options()
2985 SEQ_OPTS_PRINT("commit=%lu", sbi->s_commit_interval / HZ); in _ext4_show_options()
2986 if (nodefs || sbi->s_min_batch_time != EXT4_DEF_MIN_BATCH_TIME) in _ext4_show_options()
2987 SEQ_OPTS_PRINT("min_batch_time=%u", sbi->s_min_batch_time); in _ext4_show_options()
2988 if (nodefs || sbi->s_max_batch_time != EXT4_DEF_MAX_BATCH_TIME) in _ext4_show_options()
2989 SEQ_OPTS_PRINT("max_batch_time=%u", sbi->s_max_batch_time); in _ext4_show_options()
2990 if (nodefs || sbi->s_stripe) in _ext4_show_options()
2991 SEQ_OPTS_PRINT("stripe=%lu", sbi->s_stripe); in _ext4_show_options()
2993 (sbi->s_mount_opt ^ sbi->s_def_mount_opt)) { in _ext4_show_options()
3002 sbi->s_inode_readahead_blks != EXT4_DEF_INODE_READAHEAD_BLKS) in _ext4_show_options()
3004 sbi->s_inode_readahead_blks); in _ext4_show_options()
3007 (sbi->s_li_wait_mult != EXT4_DEF_LI_WAIT_MULT))) in _ext4_show_options()
3008 SEQ_OPTS_PRINT("init_itable=%u", sbi->s_li_wait_mult); in _ext4_show_options()
3009 if (nodefs || sbi->s_max_dir_size_kb) in _ext4_show_options()
3010 SEQ_OPTS_PRINT("max_dir_size_kb=%u", sbi->s_max_dir_size_kb); in _ext4_show_options()
3016 if (sb->s_flags & SB_INLINECRYPT) in _ext4_show_options()
3030 if (sbi->s_groups_count >= MB_DEFAULT_LINEAR_SCAN_THRESHOLD && in _ext4_show_options()
3033 } else if (sbi->s_groups_count < MB_DEFAULT_LINEAR_SCAN_THRESHOLD && in _ext4_show_options()
3047 return _ext4_show_options(seq, root->d_sb, 0); in ext4_show_options()
3052 struct super_block *sb = seq->private; in ext4_seq_options_show()
3061 static int ext4_setup_super(struct super_block *sb, struct ext4_super_block *es, in ext4_setup_super() argument
3067 if (le32_to_cpu(es->s_rev_level) > EXT4_MAX_SUPP_REV) { in ext4_setup_super()
3069 "forcing read-only mode"); in ext4_setup_super()
3070 err = -EROFS; in ext4_setup_super()
3075 if (!(sbi->s_mount_state & EXT4_VALID_FS)) in ext4_setup_super()
3078 else if (sbi->s_mount_state & EXT4_ERROR_FS) in ext4_setup_super()
3082 else if ((__s16) le16_to_cpu(es->s_max_mnt_count) > 0 && in ext4_setup_super()
3083 le16_to_cpu(es->s_mnt_count) >= in ext4_setup_super()
3084 (unsigned short) (__s16) le16_to_cpu(es->s_max_mnt_count)) in ext4_setup_super()
3088 else if (le32_to_cpu(es->s_checkinterval) && in ext4_setup_super()
3089 (ext4_get_tstamp(es, s_lastcheck) + in ext4_setup_super()
3090 le32_to_cpu(es->s_checkinterval) <= ktime_get_real_seconds())) in ext4_setup_super()
3094 if (!sbi->s_journal) in ext4_setup_super()
3095 es->s_state &= cpu_to_le16(~EXT4_VALID_FS); in ext4_setup_super()
3096 if (!(__s16) le16_to_cpu(es->s_max_mnt_count)) in ext4_setup_super()
3097 es->s_max_mnt_count = cpu_to_le16(EXT4_DFL_MAX_MNT_COUNT); in ext4_setup_super()
3098 le16_add_cpu(&es->s_mnt_count, 1); in ext4_setup_super()
3099 ext4_update_tstamp(es, s_mtime); in ext4_setup_super()
3100 if (sbi->s_journal) { in ext4_setup_super()
3111 sb->s_blocksize, in ext4_setup_super()
3112 sbi->s_groups_count, in ext4_setup_super()
3115 sbi->s_mount_opt, sbi->s_mount_opt2); in ext4_setup_super()
3125 if (!sbi->s_log_groups_per_flex) in ext4_alloc_flex_bg_array()
3128 size = ext4_flex_group(sbi, ngroup - 1) + 1; in ext4_alloc_flex_bg_array()
3129 if (size <= sbi->s_flex_groups_allocated) in ext4_alloc_flex_bg_array()
3133 sizeof(*sbi->s_flex_groups)), GFP_KERNEL); in ext4_alloc_flex_bg_array()
3137 return -ENOMEM; in ext4_alloc_flex_bg_array()
3139 for (i = sbi->s_flex_groups_allocated; i < size; i++) { in ext4_alloc_flex_bg_array()
3144 for (j = sbi->s_flex_groups_allocated; j < i; j++) in ext4_alloc_flex_bg_array()
3149 return -ENOMEM; in ext4_alloc_flex_bg_array()
3153 old_groups = rcu_dereference(sbi->s_flex_groups); in ext4_alloc_flex_bg_array()
3156 (sbi->s_flex_groups_allocated * in ext4_alloc_flex_bg_array()
3159 rcu_assign_pointer(sbi->s_flex_groups, new_groups); in ext4_alloc_flex_bg_array()
3160 sbi->s_flex_groups_allocated = size; in ext4_alloc_flex_bg_array()
3174 sbi->s_log_groups_per_flex = sbi->s_es->s_log_groups_per_flex; in ext4_fill_flex_info()
3175 if (sbi->s_log_groups_per_flex < 1 || sbi->s_log_groups_per_flex > 31) { in ext4_fill_flex_info()
3176 sbi->s_log_groups_per_flex = 0; in ext4_fill_flex_info()
3180 err = ext4_alloc_flex_bg_array(sb, sbi->s_groups_count); in ext4_fill_flex_info()
3184 for (i = 0; i < sbi->s_groups_count; i++) { in ext4_fill_flex_info()
3189 atomic_add(ext4_free_inodes_count(sb, gdp), &fg->free_inodes); in ext4_fill_flex_info()
3191 &fg->free_clusters); in ext4_fill_flex_info()
3192 atomic_add(ext4_used_dirs_count(sb, gdp), &fg->used_dirs); in ext4_fill_flex_info()
3208 if (ext4_has_metadata_csum(sbi->s_sb)) { in ext4_group_desc_csum()
3213 csum32 = ext4_chksum(sbi, sbi->s_csum_seed, (__u8 *)&le_group, in ext4_group_desc_csum()
3219 if (offset < sbi->s_desc_size) in ext4_group_desc_csum()
3221 sbi->s_desc_size - offset); in ext4_group_desc_csum()
3231 crc = crc16(~0, sbi->s_es->s_uuid, sizeof(sbi->s_es->s_uuid)); in ext4_group_desc_csum()
3234 offset += sizeof(gdp->bg_checksum); /* skip checksum */ in ext4_group_desc_csum()
3236 if (ext4_has_feature_64bit(sb) && offset < sbi->s_desc_size) in ext4_group_desc_csum()
3238 sbi->s_desc_size - offset); in ext4_group_desc_csum()
3248 (gdp->bg_checksum != ext4_group_desc_csum(sb, block_group, gdp))) in ext4_group_desc_csum_verify()
3259 gdp->bg_checksum = ext4_group_desc_csum(sb, block_group, gdp); in ext4_group_desc_csum_set()
3262 /* Called at mount-time, super-block is locked */
3268 ext4_fsblk_t first_block = le32_to_cpu(sbi->s_es->s_first_data_block); in ext4_check_descriptors()
3275 ext4_group_t i, grp = sbi->s_groups_count; in ext4_check_descriptors()
3282 for (i = 0; i < sbi->s_groups_count; i++) { in ext4_check_descriptors()
3285 if (i == sbi->s_groups_count - 1 || flexbg_flag) in ext4_check_descriptors()
3286 last_block = ext4_blocks_count(sbi->s_es) - 1; in ext4_check_descriptors()
3289 (EXT4_BLOCKS_PER_GROUP(sb) - 1); in ext4_check_descriptors()
3291 if ((grp == sbi->s_groups_count) && in ext4_check_descriptors()
3292 !(gdp->bg_flags & cpu_to_le16(EXT4_BG_INODE_ZEROED))) in ext4_check_descriptors()
3356 inode_table + sbi->s_itb_per_group - 1 > last_block) { in ext4_check_descriptors()
3367 gdp)), le16_to_cpu(gdp->bg_checksum)); in ext4_check_descriptors()
3384 * Resulting logical blkno at s_maxbytes must fit in our on-disk
3391 * covering maximum file size must fit into on-disk format containers as
3405 upper_limit = (1LL << 32) - 1; in ext4_max_size()
3408 upper_limit >>= (blkbits - 9); in ext4_max_size()
3413 * 32-bit extent-start container, ee_block. We lower the maxbytes in ext4_max_size()
3417 res = (1LL << 32) - 1; in ext4_max_size()
3420 /* Sanity check against vm- & vfs- imposed limits */ in ext4_max_size()
3428 * Maximal bitmap file size. There is a direct, and {,double-,triple-}indirect
3429 * block limit, and also a limit of (2^48 - 1) 512-byte sectors in i_blocks.
3436 unsigned int ppb = 1 << (bits - 2); in ext4_max_bitmap_size()
3440 * mapped file such that the file's total number of 512-byte sectors, in ext4_max_bitmap_size()
3441 * including data and all indirect blocks, does not exceed (2^48 - 1). in ext4_max_bitmap_size()
3444 * number of 512-byte sectors of the file. in ext4_max_bitmap_size()
3449 * represents total file blocks in 2^32 512-byte sectors == in ext4_max_bitmap_size()
3452 upper_limit = (1LL << 32) - 1; in ext4_max_bitmap_size()
3455 upper_limit >>= (bits - 9); in ext4_max_bitmap_size()
3464 upper_limit = (1LL << 48) - 1; in ext4_max_bitmap_size()
3482 upper_limit -= EXT4_NDIR_BLOCKS; in ext4_max_bitmap_size()
3485 upper_limit -= ppb; in ext4_max_bitmap_size()
3489 res -= meta_blocks; in ext4_max_bitmap_size()
3493 upper_limit -= ppb * ppb; in ext4_max_bitmap_size()
3497 res -= meta_blocks; in ext4_max_bitmap_size()
3513 first_meta_bg = le32_to_cpu(sbi->s_es->s_first_meta_bg); in descriptor_loc()
3517 bg = sbi->s_desc_per_block * nr; in descriptor_loc()
3527 if (sb->s_blocksize == 1024 && nr == 0 && in descriptor_loc()
3528 le32_to_cpu(sbi->s_es->s_first_data_block) == 0) in descriptor_loc()
3547 unsigned long stride = le16_to_cpu(sbi->s_es->s_raid_stride); in ext4_get_stripe_size()
3549 le32_to_cpu(sbi->s_es->s_raid_stripe_width); in ext4_get_stripe_size()
3552 if (sbi->s_stripe && sbi->s_stripe <= sbi->s_blocks_per_group) in ext4_get_stripe_size()
3553 ret = sbi->s_stripe; in ext4_get_stripe_size()
3554 else if (stripe_width && stripe_width <= sbi->s_blocks_per_group) in ext4_get_stripe_size()
3556 else if (stride && stride <= sbi->s_blocks_per_group) in ext4_get_stripe_size()
3583 (le32_to_cpu(EXT4_SB(sb)->s_es->s_feature_incompat) & in ext4_feature_set_ok()
3599 ext4_msg(sb, KERN_INFO, "filesystem is read-only"); in ext4_feature_set_ok()
3600 sb->s_flags |= SB_RDONLY; in ext4_feature_set_ok()
3604 /* Check that feature set is OK for a read-write mount */ in ext4_feature_set_ok()
3608 (le32_to_cpu(EXT4_SB(sb)->s_es->s_feature_ro_compat) & in ext4_feature_set_ok()
3637 struct super_block *sb = sbi->s_sb; in print_daily_error_info()
3638 struct ext4_super_block *es = sbi->s_es; in print_daily_error_info() local
3640 if (es->s_error_count) in print_daily_error_info()
3643 le32_to_cpu(es->s_error_count)); in print_daily_error_info()
3644 if (es->s_first_error_time) { in print_daily_error_info()
3645 printk(KERN_NOTICE "EXT4-fs (%s): initial error at time %llu: %.*s:%d", in print_daily_error_info()
3646 sb->s_id, in print_daily_error_info()
3647 ext4_get_tstamp(es, s_first_error_time), in print_daily_error_info()
3648 (int) sizeof(es->s_first_error_func), in print_daily_error_info()
3649 es->s_first_error_func, in print_daily_error_info()
3650 le32_to_cpu(es->s_first_error_line)); in print_daily_error_info()
3651 if (es->s_first_error_ino) in print_daily_error_info()
3653 le32_to_cpu(es->s_first_error_ino)); in print_daily_error_info()
3654 if (es->s_first_error_block) in print_daily_error_info()
3656 le64_to_cpu(es->s_first_error_block)); in print_daily_error_info()
3659 if (es->s_last_error_time) { in print_daily_error_info()
3660 printk(KERN_NOTICE "EXT4-fs (%s): last error at time %llu: %.*s:%d", in print_daily_error_info()
3661 sb->s_id, in print_daily_error_info()
3662 ext4_get_tstamp(es, s_last_error_time), in print_daily_error_info()
3663 (int) sizeof(es->s_last_error_func), in print_daily_error_info()
3664 es->s_last_error_func, in print_daily_error_info()
3665 le32_to_cpu(es->s_last_error_line)); in print_daily_error_info()
3666 if (es->s_last_error_ino) in print_daily_error_info()
3668 le32_to_cpu(es->s_last_error_ino)); in print_daily_error_info()
3669 if (es->s_last_error_block) in print_daily_error_info()
3671 le64_to_cpu(es->s_last_error_block)); in print_daily_error_info()
3674 mod_timer(&sbi->s_err_report, jiffies + 24*60*60*HZ); /* Once a day */ in print_daily_error_info()
3681 struct super_block *sb = elr->lr_super; in ext4_run_li_request()
3682 ext4_group_t ngroups = EXT4_SB(sb)->s_groups_count; in ext4_run_li_request()
3683 ext4_group_t group = elr->lr_next_group; in ext4_run_li_request()
3686 int nr = EXT4_SB(sb)->s_mb_prefetch; in ext4_run_li_request()
3689 if (elr->lr_mode == EXT4_LI_MODE_PREFETCH_BBITMAP) { in ext4_run_li_request()
3690 elr->lr_next_group = ext4_mb_prefetch(sb, group, nr, &prefetch_ios); in ext4_run_li_request()
3691 ext4_mb_prefetch_fini(sb, elr->lr_next_group, nr); in ext4_run_li_request()
3692 trace_ext4_prefetch_bitmaps(sb, group, elr->lr_next_group, nr); in ext4_run_li_request()
3693 if (group >= elr->lr_next_group) { in ext4_run_li_request()
3695 if (elr->lr_first_not_zeroed != ngroups && in ext4_run_li_request()
3697 elr->lr_next_group = elr->lr_first_not_zeroed; in ext4_run_li_request()
3698 elr->lr_mode = EXT4_LI_MODE_ITABLE; in ext4_run_li_request()
3712 if (!(gdp->bg_flags & cpu_to_le16(EXT4_BG_INODE_ZEROED))) in ext4_run_li_request()
3722 elr->lr_timeout ? 0 : 1); in ext4_run_li_request()
3724 if (elr->lr_timeout == 0) { in ext4_run_li_request()
3725 elr->lr_timeout = nsecs_to_jiffies((ktime_get_ns() - start_time) * in ext4_run_li_request()
3726 EXT4_SB(elr->lr_super)->s_li_wait_mult); in ext4_run_li_request()
3728 elr->lr_next_sched = jiffies + elr->lr_timeout; in ext4_run_li_request()
3729 elr->lr_next_group = group + 1; in ext4_run_li_request()
3743 list_del(&elr->lr_request); in ext4_remove_li_request()
3744 EXT4_SB(elr->lr_super)->s_li_request = NULL; in ext4_remove_li_request()
3756 mutex_lock(&ext4_li_info->li_list_mtx); in ext4_unregister_li_request()
3757 ext4_remove_li_request(EXT4_SB(sb)->s_li_request); in ext4_unregister_li_request()
3758 mutex_unlock(&ext4_li_info->li_list_mtx); in ext4_unregister_li_request()
3788 mutex_lock(&eli->li_list_mtx); in ext4_lazyinit_thread()
3789 if (list_empty(&eli->li_request_list)) { in ext4_lazyinit_thread()
3790 mutex_unlock(&eli->li_list_mtx); in ext4_lazyinit_thread()
3793 list_for_each_safe(pos, n, &eli->li_request_list) { in ext4_lazyinit_thread()
3799 if (time_before(jiffies, elr->lr_next_sched)) { in ext4_lazyinit_thread()
3801 time_before(elr->lr_next_sched, next_wakeup)) { in ext4_lazyinit_thread()
3802 next_wakeup = elr->lr_next_sched; in ext4_lazyinit_thread()
3807 if (down_read_trylock(&elr->lr_super->s_umount)) { in ext4_lazyinit_thread()
3808 if (sb_start_write_trylock(elr->lr_super)) { in ext4_lazyinit_thread()
3811 * We hold sb->s_umount, sb can not in ext4_lazyinit_thread()
3815 mutex_unlock(&eli->li_list_mtx); in ext4_lazyinit_thread()
3817 sb_end_write(elr->lr_super); in ext4_lazyinit_thread()
3818 mutex_lock(&eli->li_list_mtx); in ext4_lazyinit_thread()
3819 n = pos->next; in ext4_lazyinit_thread()
3821 up_read((&elr->lr_super->s_umount)); in ext4_lazyinit_thread()
3829 elr->lr_next_sched = jiffies + in ext4_lazyinit_thread()
3833 time_before(elr->lr_next_sched, next_wakeup)) { in ext4_lazyinit_thread()
3834 next_wakeup = elr->lr_next_sched; in ext4_lazyinit_thread()
3838 mutex_unlock(&eli->li_list_mtx); in ext4_lazyinit_thread()
3848 schedule_timeout_interruptible(next_wakeup - cur); in ext4_lazyinit_thread()
3866 mutex_lock(&eli->li_list_mtx); in ext4_lazyinit_thread()
3867 if (!list_empty(&eli->li_request_list)) { in ext4_lazyinit_thread()
3868 mutex_unlock(&eli->li_list_mtx); in ext4_lazyinit_thread()
3872 mutex_unlock(&eli->li_list_mtx); in ext4_lazyinit_thread()
3885 mutex_lock(&ext4_li_info->li_list_mtx); in ext4_clear_request_list()
3886 list_for_each_safe(pos, n, &ext4_li_info->li_request_list) { in ext4_clear_request_list()
3891 mutex_unlock(&ext4_li_info->li_list_mtx); in ext4_clear_request_list()
3903 printk(KERN_CRIT "EXT4-fs: error %d creating inode table " in ext4_run_lazyinit_thread()
3908 ext4_li_info->li_state |= EXT4_LAZYINIT_RUNNING; in ext4_run_lazyinit_thread()
3920 ext4_group_t group, ngroups = EXT4_SB(sb)->s_groups_count; in ext4_has_uninit_itable()
3931 if (!(gdp->bg_flags & cpu_to_le16(EXT4_BG_INODE_ZEROED))) in ext4_has_uninit_itable()
3944 return -ENOMEM; in ext4_li_info_new()
3946 INIT_LIST_HEAD(&eli->li_request_list); in ext4_li_info_new()
3947 mutex_init(&eli->li_list_mtx); in ext4_li_info_new()
3949 eli->li_state |= EXT4_LAZYINIT_QUIT; in ext4_li_info_new()
3965 elr->lr_super = sb; in ext4_li_request_new()
3966 elr->lr_first_not_zeroed = start; in ext4_li_request_new()
3968 elr->lr_mode = EXT4_LI_MODE_ITABLE; in ext4_li_request_new()
3969 elr->lr_next_group = start; in ext4_li_request_new()
3971 elr->lr_mode = EXT4_LI_MODE_PREFETCH_BBITMAP; in ext4_li_request_new()
3979 elr->lr_next_sched = jiffies + get_random_u32_below(EXT4_DEF_LI_MAX_START_DELAY * HZ); in ext4_li_request_new()
3988 ext4_group_t ngroups = sbi->s_groups_count; in ext4_register_li_request()
3992 if (sbi->s_li_request != NULL) { in ext4_register_li_request()
3997 sbi->s_li_request->lr_timeout = 0; in ext4_register_li_request()
4008 ret = -ENOMEM; in ext4_register_li_request()
4018 mutex_lock(&ext4_li_info->li_list_mtx); in ext4_register_li_request()
4019 list_add(&elr->lr_request, &ext4_li_info->li_request_list); in ext4_register_li_request()
4020 mutex_unlock(&ext4_li_info->li_list_mtx); in ext4_register_li_request()
4022 sbi->s_li_request = elr; in ext4_register_li_request()
4030 if (!(ext4_li_info->li_state & EXT4_LAZYINIT_RUNNING)) { in ext4_register_li_request()
4074 jbd2_journal_clear_features(sbi->s_journal, in set_journal_csum_feature_set()
4079 ret = jbd2_journal_set_features(sbi->s_journal, in set_journal_csum_feature_set()
4084 ret = jbd2_journal_set_features(sbi->s_journal, in set_journal_csum_feature_set()
4087 jbd2_journal_clear_features(sbi->s_journal, 0, 0, in set_journal_csum_feature_set()
4090 jbd2_journal_clear_features(sbi->s_journal, 0, 0, in set_journal_csum_feature_set()
4105 * older file systems --- and if we come across with a bigalloc file
4107 * correct especially for very large cluster sizes --- but for newer
4110 * present (even for non-bigalloc file systems), we will use it.
4124 (has_super ? le16_to_cpu(sbi->s_es->s_reserved_gdt_blocks) : 0) + in count_overhead()
4125 sbi->s_itb_per_group + 2); in count_overhead()
4127 first_block = le32_to_cpu(sbi->s_es->s_first_data_block) + in count_overhead()
4129 last_block = first_block + EXT4_BLOCKS_PER_GROUP(sb) - 1; in count_overhead()
4134 ext4_set_bit(EXT4_B2C(sbi, b - first_block), buf); in count_overhead()
4139 ext4_set_bit(EXT4_B2C(sbi, b - first_block), buf); in count_overhead()
4143 if (b >= first_block && b + sbi->s_itb_per_group <= last_block) in count_overhead()
4144 for (j = 0; j < sbi->s_itb_per_group; j++, b++) { in count_overhead()
4145 int c = EXT4_B2C(sbi, b - first_block); in count_overhead()
4160 j = EXT4_BLOCKS_PER_GROUP(sb) - s; in count_overhead()
4163 for (; j > 0; j--) in count_overhead()
4168 return EXT4_CLUSTERS_PER_GROUP(sb) - in count_overhead()
4173 * Compute the overhead and stash it in sbi->s_overhead
4178 struct ext4_super_block *es = sbi->s_es; in ext4_calculate_overhead() local
4180 unsigned int j_blocks, j_inum = le32_to_cpu(es->s_journal_inum); in ext4_calculate_overhead()
4186 return -ENOMEM; in ext4_calculate_overhead()
4197 overhead = EXT4_B2C(sbi, le32_to_cpu(es->s_first_data_block)); in ext4_calculate_overhead()
4216 if (sbi->s_journal && !sbi->s_journal_bdev_file) in ext4_calculate_overhead()
4217 overhead += EXT4_NUM_B2C(sbi, sbi->s_journal->j_total_len); in ext4_calculate_overhead()
4218 else if (ext4_has_feature_journal(sb) && !sbi->s_journal && j_inum) { in ext4_calculate_overhead()
4219 /* j_inum for internal journal is non-zero */ in ext4_calculate_overhead()
4222 j_blocks = j_inode->i_size >> sb->s_blocksize_bits; in ext4_calculate_overhead()
4229 sbi->s_overhead = overhead; in ext4_calculate_overhead()
4256 resv_clusters = (ext4_blocks_count(sbi->s_es) >> in ext4_set_resv_clusters()
4257 sbi->s_cluster_bits); in ext4_set_resv_clusters()
4262 atomic64_set(&sbi->s_resv_clusters, resv_clusters); in ext4_set_resv_clusters()
4271 if (EXT4_SB(sb)->s_journal && ext4_is_quota_journalled(sb)) in ext4_quota_mode()
4290 sbi->s_journal_triggers[type].sb = sb; in ext4_setup_csum_trigger()
4291 sbi->s_journal_triggers[type].tr_triggers.t_frozen = trigger; in ext4_setup_csum_trigger()
4299 kfree(sbi->s_blockgroup_lock); in ext4_free_sbi()
4300 fs_put_dax(sbi->s_daxdev, NULL); in ext4_free_sbi()
4312 sbi->s_daxdev = fs_dax_get_by_bdev(sb->s_bdev, &sbi->s_dax_part_off, in ext4_alloc_sbi()
4315 sbi->s_blockgroup_lock = in ext4_alloc_sbi()
4318 if (!sbi->s_blockgroup_lock) in ext4_alloc_sbi()
4321 sb->s_fs_info = sbi; in ext4_alloc_sbi()
4322 sbi->s_sb = sb; in ext4_alloc_sbi()
4325 fs_put_dax(sbi->s_daxdev, NULL); in ext4_alloc_sbi()
4331 struct ext4_super_block *es) in ext4_set_def_opts() argument
4336 def_mount_opts = le32_to_cpu(es->s_default_mount_opts); in ext4_set_def_opts()
4351 /* don't forget to enable journal_csum when metadata_csum is enabled. */ in ext4_set_def_opts()
4362 if (le16_to_cpu(es->s_errors) == EXT4_ERRORS_PANIC) in ext4_set_def_opts()
4364 else if (le16_to_cpu(es->s_errors) == EXT4_ERRORS_CONTINUE) in ext4_set_def_opts()
4377 * enable delayed allocation by default in ext4_set_def_opts()
4378 * Use -o nodelalloc to turn it off in ext4_set_def_opts()
4384 if (sb->s_blocksize <= PAGE_SIZE) in ext4_set_def_opts()
4391 struct ext4_super_block *es = sbi->s_es; in ext4_handle_clustersize() local
4395 clustersize = BLOCK_SIZE << le32_to_cpu(es->s_log_cluster_size); in ext4_handle_clustersize()
4397 if (clustersize < sb->s_blocksize) { in ext4_handle_clustersize()
4400 "block size (%lu)", clustersize, sb->s_blocksize); in ext4_handle_clustersize()
4401 return -EINVAL; in ext4_handle_clustersize()
4403 sbi->s_cluster_bits = le32_to_cpu(es->s_log_cluster_size) - in ext4_handle_clustersize()
4404 le32_to_cpu(es->s_log_block_size); in ext4_handle_clustersize()
4406 if (clustersize != sb->s_blocksize) { in ext4_handle_clustersize()
4409 "block size (%lu)", clustersize, sb->s_blocksize); in ext4_handle_clustersize()
4410 return -EINVAL; in ext4_handle_clustersize()
4412 if (sbi->s_blocks_per_group > sb->s_blocksize * 8) { in ext4_handle_clustersize()
4415 sbi->s_blocks_per_group); in ext4_handle_clustersize()
4416 return -EINVAL; in ext4_handle_clustersize()
4418 sbi->s_cluster_bits = 0; in ext4_handle_clustersize()
4420 sbi->s_clusters_per_group = le32_to_cpu(es->s_clusters_per_group); in ext4_handle_clustersize()
4421 if (sbi->s_clusters_per_group > sb->s_blocksize * 8) { in ext4_handle_clustersize()
4423 sbi->s_clusters_per_group); in ext4_handle_clustersize()
4424 return -EINVAL; in ext4_handle_clustersize()
4426 if (sbi->s_blocks_per_group != in ext4_handle_clustersize()
4427 (sbi->s_clusters_per_group * (clustersize / sb->s_blocksize))) { in ext4_handle_clustersize()
4430 sbi->s_blocks_per_group, sbi->s_clusters_per_group); in ext4_handle_clustersize()
4431 return -EINVAL; in ext4_handle_clustersize()
4433 sbi->s_cluster_ratio = clustersize / sb->s_blocksize; in ext4_handle_clustersize()
4436 if (sbi->s_blocks_per_group == clustersize << 3) in ext4_handle_clustersize()
4450 struct block_device *bdev = sb->s_bdev; in ext4_atomic_write_init()
4458 sbi->s_awu_min = max(sb->s_blocksize, in ext4_atomic_write_init()
4460 sbi->s_awu_max = min(sb->s_blocksize, in ext4_atomic_write_init()
4462 if (sbi->s_awu_min && sbi->s_awu_max && in ext4_atomic_write_init()
4463 sbi->s_awu_min <= sbi->s_awu_max) { in ext4_atomic_write_init()
4465 sbi->s_awu_min, sbi->s_awu_max); in ext4_atomic_write_init()
4467 sbi->s_awu_min = 0; in ext4_atomic_write_init()
4468 sbi->s_awu_max = 0; in ext4_atomic_write_init()
4477 atomic_set(&sbi->s_fc_subtid, 0); in ext4_fast_commit_init()
4478 INIT_LIST_HEAD(&sbi->s_fc_q[FC_Q_MAIN]); in ext4_fast_commit_init()
4479 INIT_LIST_HEAD(&sbi->s_fc_q[FC_Q_STAGING]); in ext4_fast_commit_init()
4480 INIT_LIST_HEAD(&sbi->s_fc_dentry_q[FC_Q_MAIN]); in ext4_fast_commit_init()
4481 INIT_LIST_HEAD(&sbi->s_fc_dentry_q[FC_Q_STAGING]); in ext4_fast_commit_init()
4482 sbi->s_fc_bytes = 0; in ext4_fast_commit_init()
4484 sbi->s_fc_ineligible_tid = 0; in ext4_fast_commit_init()
4485 spin_lock_init(&sbi->s_fc_lock); in ext4_fast_commit_init()
4486 memset(&sbi->s_fc_stats, 0, sizeof(sbi->s_fc_stats)); in ext4_fast_commit_init()
4487 sbi->s_fc_replay_state.fc_regions = NULL; in ext4_fast_commit_init()
4488 sbi->s_fc_replay_state.fc_regions_size = 0; in ext4_fast_commit_init()
4489 sbi->s_fc_replay_state.fc_regions_used = 0; in ext4_fast_commit_init()
4490 sbi->s_fc_replay_state.fc_regions_valid = 0; in ext4_fast_commit_init()
4491 sbi->s_fc_replay_state.fc_modified_inodes = NULL; in ext4_fast_commit_init()
4492 sbi->s_fc_replay_state.fc_modified_inodes_size = 0; in ext4_fast_commit_init()
4493 sbi->s_fc_replay_state.fc_modified_inodes_used = 0; in ext4_fast_commit_init()
4497 struct ext4_super_block *es) in ext4_inode_info_init() argument
4501 if (le32_to_cpu(es->s_rev_level) == EXT4_GOOD_OLD_REV) { in ext4_inode_info_init()
4502 sbi->s_inode_size = EXT4_GOOD_OLD_INODE_SIZE; in ext4_inode_info_init()
4503 sbi->s_first_ino = EXT4_GOOD_OLD_FIRST_INO; in ext4_inode_info_init()
4505 sbi->s_inode_size = le16_to_cpu(es->s_inode_size); in ext4_inode_info_init()
4506 sbi->s_first_ino = le32_to_cpu(es->s_first_ino); in ext4_inode_info_init()
4507 if (sbi->s_first_ino < EXT4_GOOD_OLD_FIRST_INO) { in ext4_inode_info_init()
4509 sbi->s_first_ino); in ext4_inode_info_init()
4510 return -EINVAL; in ext4_inode_info_init()
4512 if ((sbi->s_inode_size < EXT4_GOOD_OLD_INODE_SIZE) || in ext4_inode_info_init()
4513 (!is_power_of_2(sbi->s_inode_size)) || in ext4_inode_info_init()
4514 (sbi->s_inode_size > sb->s_blocksize)) { in ext4_inode_info_init()
4517 sbi->s_inode_size); in ext4_inode_info_init()
4518 ext4_msg(sb, KERN_ERR, "blocksize: %lu", sb->s_blocksize); in ext4_inode_info_init()
4519 return -EINVAL; in ext4_inode_info_init()
4527 if (sbi->s_inode_size >= offsetof(struct ext4_inode, i_atime_extra) + in ext4_inode_info_init()
4528 sizeof(((struct ext4_inode *)0)->i_atime_extra)) { in ext4_inode_info_init()
4529 sb->s_time_gran = 1; in ext4_inode_info_init()
4530 sb->s_time_max = EXT4_EXTRA_TIMESTAMP_MAX; in ext4_inode_info_init()
4532 sb->s_time_gran = NSEC_PER_SEC; in ext4_inode_info_init()
4533 sb->s_time_max = EXT4_NON_EXTRA_TIMESTAMP_MAX; in ext4_inode_info_init()
4535 sb->s_time_min = EXT4_TIMESTAMP_MIN; in ext4_inode_info_init()
4538 if (sbi->s_inode_size > EXT4_GOOD_OLD_INODE_SIZE) { in ext4_inode_info_init()
4539 sbi->s_want_extra_isize = sizeof(struct ext4_inode) - in ext4_inode_info_init()
4542 unsigned v, max = (sbi->s_inode_size - in ext4_inode_info_init()
4545 v = le16_to_cpu(es->s_want_extra_isize); in ext4_inode_info_init()
4549 return -EINVAL; in ext4_inode_info_init()
4551 if (sbi->s_want_extra_isize < v) in ext4_inode_info_init()
4552 sbi->s_want_extra_isize = v; in ext4_inode_info_init()
4554 v = le16_to_cpu(es->s_min_extra_isize); in ext4_inode_info_init()
4558 return -EINVAL; in ext4_inode_info_init()
4560 if (sbi->s_want_extra_isize < v) in ext4_inode_info_init()
4561 sbi->s_want_extra_isize = v; in ext4_inode_info_init()
4569 static int ext4_encoding_init(struct super_block *sb, struct ext4_super_block *es) in ext4_encoding_init() argument
4573 __u16 encoding_flags = le16_to_cpu(es->s_encoding_flags); in ext4_encoding_init()
4575 if (!ext4_has_feature_casefold(sb) || sb->s_encoding) in ext4_encoding_init()
4578 encoding_info = ext4_sb_read_encoding(es); in ext4_encoding_init()
4582 return -EINVAL; in ext4_encoding_init()
4585 encoding = utf8_load(encoding_info->version); in ext4_encoding_init()
4588 "can't mount with superblock charset: %s-%u.%u.%u " in ext4_encoding_init()
4590 encoding_info->name, in ext4_encoding_init()
4591 unicode_major(encoding_info->version), in ext4_encoding_init()
4592 unicode_minor(encoding_info->version), in ext4_encoding_init()
4593 unicode_rev(encoding_info->version), in ext4_encoding_init()
4595 return -EINVAL; in ext4_encoding_init()
4598 "%s-%u.%u.%u with flags 0x%hx", encoding_info->name, in ext4_encoding_init()
4599 unicode_major(encoding_info->version), in ext4_encoding_init()
4600 unicode_minor(encoding_info->version), in ext4_encoding_init()
4601 unicode_rev(encoding_info->version), in ext4_encoding_init()
4604 sb->s_encoding = encoding; in ext4_encoding_init()
4605 sb->s_encoding_flags = encoding_flags; in ext4_encoding_init()
4610 static inline int ext4_encoding_init(struct super_block *sb, struct ext4_super_block *es) in ext4_encoding_init() argument
4616 static int ext4_init_metadata_csum(struct super_block *sb, struct ext4_super_block *es) in ext4_init_metadata_csum() argument
4627 if (!ext4_verify_csum_type(sb, es)) { in ext4_init_metadata_csum()
4630 return -EINVAL; in ext4_init_metadata_csum()
4636 if (!ext4_superblock_csum_verify(sb, es)) { in ext4_init_metadata_csum()
4639 return -EFSBADCRC; in ext4_init_metadata_csum()
4644 sbi->s_csum_seed = le32_to_cpu(es->s_checksum_seed); in ext4_init_metadata_csum()
4646 sbi->s_csum_seed = ext4_chksum(sbi, ~0, es->s_uuid, in ext4_init_metadata_csum()
4647 sizeof(es->s_uuid)); in ext4_init_metadata_csum()
4652 struct ext4_super_block *es, in ext4_check_feature_compatibility() argument
4657 if (le32_to_cpu(es->s_rev_level) == EXT4_GOOD_OLD_REV && in ext4_check_feature_compatibility()
4665 if (es->s_creator_os == cpu_to_le32(EXT4_OS_HURD)) { in ext4_check_feature_compatibility()
4669 "The Hurd can't support 64-bit file systems"); in ext4_check_feature_compatibility()
4670 return -EINVAL; in ext4_check_feature_compatibility()
4680 return -EINVAL; in ext4_check_feature_compatibility()
4694 return -EINVAL; in ext4_check_feature_compatibility()
4697 return -EINVAL; in ext4_check_feature_compatibility()
4711 return -EINVAL; in ext4_check_feature_compatibility()
4714 return -EINVAL; in ext4_check_feature_compatibility()
4724 return -EINVAL; in ext4_check_feature_compatibility()
4726 if (sbi->s_daxdev) { in ext4_check_feature_compatibility()
4727 if (sb->s_blocksize == PAGE_SIZE) in ext4_check_feature_compatibility()
4728 set_bit(EXT4_FLAGS_BDEV_IS_DAX, &sbi->s_ext4_flags); in ext4_check_feature_compatibility()
4733 if (sbi->s_mount_opt & EXT4_MOUNT_DAX_ALWAYS) { in ext4_check_feature_compatibility()
4737 return -EINVAL; in ext4_check_feature_compatibility()
4739 if (!test_bit(EXT4_FLAGS_BDEV_IS_DAX, &sbi->s_ext4_flags)) { in ext4_check_feature_compatibility()
4742 return -EINVAL; in ext4_check_feature_compatibility()
4746 if (ext4_has_feature_encrypt(sb) && es->s_encryption_level) { in ext4_check_feature_compatibility()
4748 es->s_encryption_level); in ext4_check_feature_compatibility()
4749 return -EINVAL; in ext4_check_feature_compatibility()
4756 struct ext4_super_block *es) in ext4_check_geometry() argument
4762 if (le16_to_cpu(sbi->s_es->s_reserved_gdt_blocks) > (sb->s_blocksize / 4)) { in ext4_check_geometry()
4765 le16_to_cpu(sbi->s_es->s_reserved_gdt_blocks)); in ext4_check_geometry()
4766 return -EINVAL; in ext4_check_geometry()
4772 err = generic_check_addressable(sb->s_blocksize_bits, in ext4_check_geometry()
4773 ext4_blocks_count(es)); in ext4_check_geometry()
4782 if (blocks_count && ext4_blocks_count(es) > blocks_count) { in ext4_check_geometry()
4785 ext4_blocks_count(es), blocks_count); in ext4_check_geometry()
4786 return -EINVAL; in ext4_check_geometry()
4793 if (le32_to_cpu(es->s_first_data_block) >= ext4_blocks_count(es)) { in ext4_check_geometry()
4796 le32_to_cpu(es->s_first_data_block), in ext4_check_geometry()
4797 ext4_blocks_count(es)); in ext4_check_geometry()
4798 return -EINVAL; in ext4_check_geometry()
4800 if ((es->s_first_data_block == 0) && (es->s_log_block_size == 0) && in ext4_check_geometry()
4801 (sbi->s_cluster_ratio == 1)) { in ext4_check_geometry()
4804 return -EINVAL; in ext4_check_geometry()
4807 blocks_count = (ext4_blocks_count(es) - in ext4_check_geometry()
4808 le32_to_cpu(es->s_first_data_block) + in ext4_check_geometry()
4809 EXT4_BLOCKS_PER_GROUP(sb) - 1); in ext4_check_geometry()
4811 if (blocks_count > ((uint64_t)1<<32) - EXT4_DESC_PER_BLOCK(sb)) { in ext4_check_geometry()
4815 ext4_blocks_count(es), in ext4_check_geometry()
4816 le32_to_cpu(es->s_first_data_block), in ext4_check_geometry()
4818 return -EINVAL; in ext4_check_geometry()
4820 sbi->s_groups_count = blocks_count; in ext4_check_geometry()
4821 sbi->s_blockfile_groups = min_t(ext4_group_t, sbi->s_groups_count, in ext4_check_geometry()
4823 if (((u64)sbi->s_groups_count * sbi->s_inodes_per_group) != in ext4_check_geometry()
4824 le32_to_cpu(es->s_inodes_count)) { in ext4_check_geometry()
4826 le32_to_cpu(es->s_inodes_count), in ext4_check_geometry()
4827 ((u64)sbi->s_groups_count * sbi->s_inodes_per_group)); in ext4_check_geometry()
4828 return -EINVAL; in ext4_check_geometry()
4835 struct ext4_super_block *es, in ext4_group_desc_init() argument
4844 db_count = (sbi->s_groups_count + EXT4_DESC_PER_BLOCK(sb) - 1) / in ext4_group_desc_init()
4847 if (le32_to_cpu(es->s_first_meta_bg) > db_count) { in ext4_group_desc_init()
4851 le32_to_cpu(es->s_first_meta_bg), db_count); in ext4_group_desc_init()
4852 return -EINVAL; in ext4_group_desc_init()
4855 rcu_assign_pointer(sbi->s_group_desc, in ext4_group_desc_init()
4859 if (sbi->s_group_desc == NULL) { in ext4_group_desc_init()
4861 return -ENOMEM; in ext4_group_desc_init()
4864 bgl_lock_init(sbi->s_blockgroup_lock); in ext4_group_desc_init()
4866 /* Pre-read the descriptors into the buffer cache */ in ext4_group_desc_init()
4880 sbi->s_gdb_count = i; in ext4_group_desc_init()
4884 rcu_dereference(sbi->s_group_desc)[i] = bh; in ext4_group_desc_init()
4887 sbi->s_gdb_count = db_count; in ext4_group_desc_init()
4890 return -EFSCORRUPTED; in ext4_group_desc_init()
4897 struct ext4_super_block *es, in ext4_load_and_init_journal() argument
4903 err = ext4_load_journal(sb, es, ctx->journal_devnum); in ext4_load_and_init_journal()
4908 !jbd2_journal_set_features(EXT4_SB(sb)->s_journal, 0, 0, in ext4_load_and_init_journal()
4910 ext4_msg(sb, KERN_ERR, "Failed to set 64-bit journal feature"); in ext4_load_and_init_journal()
4921 !jbd2_journal_set_features(EXT4_SB(sb)->s_journal, 0, 0, in ext4_load_and_init_journal()
4937 (sbi->s_journal, 0, 0, JBD2_FEATURE_INCOMPAT_REVOKE)) { in ext4_load_and_init_journal()
4939 sbi->s_def_mount_opt |= EXT4_MOUNT_ORDERED_DATA; in ext4_load_and_init_journal()
4942 sbi->s_def_mount_opt |= EXT4_MOUNT_JOURNAL_DATA; in ext4_load_and_init_journal()
4949 (sbi->s_journal, 0, 0, JBD2_FEATURE_INCOMPAT_REVOKE)) { in ext4_load_and_init_journal()
4966 set_task_ioprio(sbi->s_journal->j_task, ctx->journal_ioprio); in ext4_load_and_init_journal()
4968 sbi->s_journal->j_submit_inode_data_buffers = in ext4_load_and_init_journal()
4970 sbi->s_journal->j_finish_inode_data_buffers = in ext4_load_and_init_journal()
4977 flush_work(&sbi->s_sb_upd_work); in ext4_load_and_init_journal()
4978 jbd2_journal_destroy(sbi->s_journal); in ext4_load_and_init_journal()
4979 sbi->s_journal = NULL; in ext4_load_and_init_journal()
4980 return -EINVAL; in ext4_load_and_init_journal()
4986 printk_once(KERN_WARNING "EXT4-fs: Warning: mounting with " in ext4_check_journal_data_mode()
4995 return -EINVAL; in ext4_check_journal_data_mode()
5000 return -EINVAL; in ext4_check_journal_data_mode()
5010 sb->s_iflags |= SB_I_CGROUPWB; in ext4_check_journal_data_mode()
5020 struct ext4_super_block *es; in ext4_load_super() local
5024 int ret = -EINVAL; in ext4_load_super()
5030 return -EINVAL; in ext4_load_super()
5038 logical_sb_block = sbi->s_sb_block * EXT4_MIN_BLOCK_SIZE; in ext4_load_super()
5041 logical_sb_block = sbi->s_sb_block; in ext4_load_super()
5051 * some ext4 macro-instructions depend on its value in ext4_load_super()
5053 es = (struct ext4_super_block *) (bh->b_data + offset); in ext4_load_super()
5054 sbi->s_es = es; in ext4_load_super()
5055 sb->s_magic = le16_to_cpu(es->s_magic); in ext4_load_super()
5056 if (sb->s_magic != EXT4_SUPER_MAGIC) { in ext4_load_super()
5062 if (le32_to_cpu(es->s_log_block_size) > in ext4_load_super()
5063 (EXT4_MAX_BLOCK_LOG_SIZE - EXT4_MIN_BLOCK_LOG_SIZE)) { in ext4_load_super()
5066 le32_to_cpu(es->s_log_block_size)); in ext4_load_super()
5069 if (le32_to_cpu(es->s_log_cluster_size) > in ext4_load_super()
5070 (EXT4_MAX_CLUSTER_LOG_SIZE - EXT4_MIN_BLOCK_LOG_SIZE)) { in ext4_load_super()
5073 le32_to_cpu(es->s_log_cluster_size)); in ext4_load_super()
5077 blocksize = EXT4_MIN_BLOCK_SIZE << le32_to_cpu(es->s_log_block_size); in ext4_load_super()
5083 if (sb->s_blocksize == blocksize) { in ext4_load_super()
5085 sbi->s_sbh = bh; in ext4_load_super()
5103 logical_sb_block = sbi->s_sb_block * EXT4_MIN_BLOCK_SIZE; in ext4_load_super()
5112 es = (struct ext4_super_block *)(bh->b_data + offset); in ext4_load_super()
5113 sbi->s_es = es; in ext4_load_super()
5114 if (es->s_magic != cpu_to_le16(EXT4_SUPER_MAGIC)) { in ext4_load_super()
5119 sbi->s_sbh = bh; in ext4_load_super()
5129 struct ext4_super_block *es = sbi->s_es; in ext4_hash_info_init() local
5132 sbi->s_def_hash_version = es->s_def_hash_version; in ext4_hash_info_init()
5134 if (sbi->s_def_hash_version > DX_HASH_LAST) { in ext4_hash_info_init()
5137 return -EINVAL; in ext4_hash_info_init()
5138 } else if (sbi->s_def_hash_version == DX_HASH_SIPHASH) { in ext4_hash_info_init()
5141 return -EINVAL; in ext4_hash_info_init()
5145 sbi->s_hash_seed[i] = le32_to_cpu(es->s_hash_seed[i]); in ext4_hash_info_init()
5148 i = le32_to_cpu(es->s_flags); in ext4_hash_info_init()
5150 sbi->s_hash_unsigned = 3; in ext4_hash_info_init()
5154 es->s_flags |= in ext4_hash_info_init()
5156 sbi->s_hash_unsigned = 3; in ext4_hash_info_init()
5159 es->s_flags |= in ext4_hash_info_init()
5170 struct ext4_super_block *es = sbi->s_es; in ext4_block_group_meta_init() local
5174 sbi->s_bitmap_maxbytes = ext4_max_bitmap_size(sb->s_blocksize_bits, in ext4_block_group_meta_init()
5176 sb->s_maxbytes = ext4_max_size(sb->s_blocksize_bits, has_huge_files); in ext4_block_group_meta_init()
5178 sbi->s_desc_size = le16_to_cpu(es->s_desc_size); in ext4_block_group_meta_init()
5180 if (sbi->s_desc_size < EXT4_MIN_DESC_SIZE_64BIT || in ext4_block_group_meta_init()
5181 sbi->s_desc_size > EXT4_MAX_DESC_SIZE || in ext4_block_group_meta_init()
5182 !is_power_of_2(sbi->s_desc_size)) { in ext4_block_group_meta_init()
5185 sbi->s_desc_size); in ext4_block_group_meta_init()
5186 return -EINVAL; in ext4_block_group_meta_init()
5189 sbi->s_desc_size = EXT4_MIN_DESC_SIZE; in ext4_block_group_meta_init()
5191 sbi->s_blocks_per_group = le32_to_cpu(es->s_blocks_per_group); in ext4_block_group_meta_init()
5192 sbi->s_inodes_per_group = le32_to_cpu(es->s_inodes_per_group); in ext4_block_group_meta_init()
5194 sbi->s_inodes_per_block = sb->s_blocksize / EXT4_INODE_SIZE(sb); in ext4_block_group_meta_init()
5195 if (sbi->s_inodes_per_block == 0 || sbi->s_blocks_per_group == 0) { in ext4_block_group_meta_init()
5198 return -EINVAL; in ext4_block_group_meta_init()
5200 if (sbi->s_inodes_per_group < sbi->s_inodes_per_block || in ext4_block_group_meta_init()
5201 sbi->s_inodes_per_group > sb->s_blocksize * 8) { in ext4_block_group_meta_init()
5203 sbi->s_inodes_per_group); in ext4_block_group_meta_init()
5204 return -EINVAL; in ext4_block_group_meta_init()
5206 sbi->s_itb_per_group = sbi->s_inodes_per_group / in ext4_block_group_meta_init()
5207 sbi->s_inodes_per_block; in ext4_block_group_meta_init()
5208 sbi->s_desc_per_block = sb->s_blocksize / EXT4_DESC_SIZE(sb); in ext4_block_group_meta_init()
5209 sbi->s_mount_state = le16_to_cpu(es->s_state) & ~EXT4_FC_REPLAY; in ext4_block_group_meta_init()
5210 sbi->s_addr_per_block_bits = ilog2(EXT4_ADDR_PER_BLOCK(sb)); in ext4_block_group_meta_init()
5211 sbi->s_desc_per_block_bits = ilog2(EXT4_DESC_PER_BLOCK(sb)); in ext4_block_group_meta_init()
5224 return (stripe > 0 && sbi->s_cluster_ratio > 1 && in ext4_is_stripe_incompatible()
5225 stripe % sbi->s_cluster_ratio != 0); in ext4_is_stripe_incompatible()
5230 struct ext4_super_block *es = NULL; in __ext4_fill_super() local
5237 struct ext4_fs_context *ctx = fc->fs_private; in __ext4_fill_super()
5238 int silent = fc->sb_flags & SB_SILENT; in __ext4_fill_super()
5241 if (!(ctx->spec & EXT4_SPEC_JOURNAL_IOPRIO)) in __ext4_fill_super()
5242 ctx->journal_ioprio = DEFAULT_JOURNAL_IOPRIO; in __ext4_fill_super()
5244 sbi->s_inode_readahead_blks = EXT4_DEF_INODE_READAHEAD_BLKS; in __ext4_fill_super()
5245 sbi->s_sectors_written_start = in __ext4_fill_super()
5246 part_stat_read(sb->s_bdev, sectors[STAT_WRITE]); in __ext4_fill_super()
5252 es = sbi->s_es; in __ext4_fill_super()
5253 sbi->s_kbytes_written = le64_to_cpu(es->s_kbytes_written); in __ext4_fill_super()
5255 err = ext4_init_metadata_csum(sb, es); in __ext4_fill_super()
5259 ext4_set_def_opts(sb, es); in __ext4_fill_super()
5261 sbi->s_resuid = make_kuid(&init_user_ns, le16_to_cpu(es->s_def_resuid)); in __ext4_fill_super()
5262 sbi->s_resgid = make_kgid(&init_user_ns, le16_to_cpu(es->s_def_resgid)); in __ext4_fill_super()
5263 sbi->s_commit_interval = JBD2_DEFAULT_MAX_COMMIT_AGE * HZ; in __ext4_fill_super()
5264 sbi->s_min_batch_time = EXT4_DEF_MIN_BATCH_TIME; in __ext4_fill_super()
5265 sbi->s_max_batch_time = EXT4_DEF_MAX_BATCH_TIME; in __ext4_fill_super()
5271 sbi->s_li_wait_mult = EXT4_DEF_LI_WAIT_MULT; in __ext4_fill_super()
5273 err = ext4_inode_info_init(sb, es); in __ext4_fill_super()
5281 sbi->s_def_mount_opt = sbi->s_mount_opt; in __ext4_fill_super()
5282 sbi->s_def_mount_opt2 = sbi->s_mount_opt2; in __ext4_fill_super()
5290 err = ext4_encoding_init(sb, es); in __ext4_fill_super()
5298 sb->s_flags = (sb->s_flags & ~SB_POSIXACL) | in __ext4_fill_super()
5302 sb->s_flags |= SB_I_VERSION; in __ext4_fill_super()
5305 sb->s_iflags |= SB_I_ALLOW_HSM; in __ext4_fill_super()
5307 err = ext4_check_feature_compatibility(sb, es, silent); in __ext4_fill_super()
5323 err = ext4_check_geometry(sb, es); in __ext4_fill_super()
5327 timer_setup(&sbi->s_err_report, print_daily_error_info, 0); in __ext4_fill_super()
5328 spin_lock_init(&sbi->s_error_lock); in __ext4_fill_super()
5329 INIT_WORK(&sbi->s_sb_upd_work, update_super_work); in __ext4_fill_super()
5331 err = ext4_group_desc_init(sb, es, logical_sb_block, &first_not_zeroed); in __ext4_fill_super()
5339 sbi->s_stripe = ext4_get_stripe_size(sbi); in __ext4_fill_super()
5340 if (ext4_is_stripe_incompatible(sb, sbi->s_stripe)) { in __ext4_fill_super()
5344 sbi->s_stripe, sbi->s_cluster_ratio); in __ext4_fill_super()
5345 sbi->s_stripe = 0; in __ext4_fill_super()
5347 sbi->s_extent_max_zeroout_kb = 32; in __ext4_fill_super()
5352 sb->s_op = &ext4_sops; in __ext4_fill_super()
5353 sb->s_export_op = &ext4_export_ops; in __ext4_fill_super()
5354 sb->s_xattr = ext4_xattr_handlers; in __ext4_fill_super()
5356 sb->s_cop = &ext4_cryptops; in __ext4_fill_super()
5359 sb->s_vop = &ext4_verityops; in __ext4_fill_super()
5362 sb->dq_op = &ext4_quota_operations; in __ext4_fill_super()
5364 sb->s_qcop = &dquot_quotactl_sysfile_ops; in __ext4_fill_super()
5366 sb->s_qcop = &ext4_qctl_operations; in __ext4_fill_super()
5367 sb->s_quota_types = QTYPE_MASK_USR | QTYPE_MASK_GRP | QTYPE_MASK_PRJ; in __ext4_fill_super()
5369 super_set_uuid(sb, es->s_uuid, sizeof(es->s_uuid)); in __ext4_fill_super()
5372 INIT_LIST_HEAD(&sbi->s_orphan); /* unlinked but open files */ in __ext4_fill_super()
5373 mutex_init(&sbi->s_orphan_lock); in __ext4_fill_super()
5375 spin_lock_init(&sbi->s_bdev_wb_lock); in __ext4_fill_super()
5380 sb->s_root = NULL; in __ext4_fill_super()
5382 needs_recovery = (es->s_last_orphan != 0 || in __ext4_fill_super()
5387 err = ext4_multi_mount_protect(sb, le64_to_cpu(es->s_mmp_block)); in __ext4_fill_super()
5392 err = -EINVAL; in __ext4_fill_super()
5398 err = ext4_load_and_init_journal(sb, es, ctx); in __ext4_fill_super()
5404 "suppressed and not mounted read-only"); in __ext4_fill_super()
5419 if (sbi->s_commit_interval != JBD2_DEFAULT_MAX_COMMIT_AGE*HZ) { in __ext4_fill_super()
5422 sbi->s_commit_interval / HZ); in __ext4_fill_super()
5426 (sbi->s_mount_opt ^ sbi->s_def_mount_opt)) { in __ext4_fill_super()
5431 sbi->s_def_mount_opt &= ~EXT4_MOUNT_JOURNAL_CHECKSUM; in __ext4_fill_super()
5435 sbi->s_journal = NULL; in __ext4_fill_super()
5440 sbi->s_ea_block_cache = ext4_xattr_create_cache(); in __ext4_fill_super()
5441 if (!sbi->s_ea_block_cache) { in __ext4_fill_super()
5444 err = -EINVAL; in __ext4_fill_super()
5449 sbi->s_ea_inode_cache = ext4_xattr_create_cache(); in __ext4_fill_super()
5450 if (!sbi->s_ea_inode_cache) { in __ext4_fill_super()
5453 err = -EINVAL; in __ext4_fill_super()
5463 sbi->s_overhead = le32_to_cpu(es->s_overhead_clusters); in __ext4_fill_super()
5465 if (sbi->s_overhead > ext4_blocks_count(es)) in __ext4_fill_super()
5466 sbi->s_overhead = 0; in __ext4_fill_super()
5473 sbi->s_overhead = 0; in __ext4_fill_super()
5474 if (sbi->s_overhead == 0) { in __ext4_fill_super()
5484 EXT4_SB(sb)->rsv_conversion_wq = in __ext4_fill_super()
5485 alloc_workqueue("ext4-rsv-conversion", WQ_MEM_RECLAIM | WQ_UNBOUND, 1); in __ext4_fill_super()
5486 if (!EXT4_SB(sb)->rsv_conversion_wq) { in __ext4_fill_super()
5487 printk(KERN_ERR "EXT4-fs: failed to create workqueue\n"); in __ext4_fill_super()
5488 err = -ENOMEM; in __ext4_fill_super()
5504 if (!S_ISDIR(root->i_mode) || !root->i_blocks || !root->i_size) { in __ext4_fill_super()
5507 err = -EFSCORRUPTED; in __ext4_fill_super()
5512 sb->s_root = d_make_root(root); in __ext4_fill_super()
5513 if (!sb->s_root) { in __ext4_fill_super()
5515 err = -ENOMEM; in __ext4_fill_super()
5519 err = ext4_setup_super(sb, es, sb_rdonly(sb)); in __ext4_fill_super()
5520 if (err == -EROFS) { in __ext4_fill_super()
5521 sb->s_flags |= SB_RDONLY; in __ext4_fill_super()
5540 * Enable optimize_scan if number of groups is > threshold. This can be in __ext4_fill_super()
5544 if (!(ctx->spec & EXT4_SPEC_mb_optimize_scan)) { in __ext4_fill_super()
5545 if (sbi->s_groups_count >= MB_DEFAULT_LINEAR_SCAN_THRESHOLD) in __ext4_fill_super()
5562 if (sbi->s_journal) in __ext4_fill_super()
5563 sbi->s_journal->j_commit_callback = in __ext4_fill_super()
5575 err = -ENOMEM; in __ext4_fill_super()
5587 /* Enable quota usage during mount. */ in __ext4_fill_super()
5599 errseq_check_and_advance(&sb->s_bdev->bd_mapping->wb_err, in __ext4_fill_super()
5600 &sbi->s_bdev_wb_err); in __ext4_fill_super()
5601 EXT4_SB(sb)->s_mount_state |= EXT4_ORPHAN_FS; in __ext4_fill_super()
5602 ext4_orphan_cleanup(sb, es); in __ext4_fill_super()
5603 EXT4_SB(sb)->s_mount_state &= ~EXT4_ORPHAN_FS; in __ext4_fill_super()
5614 err = ext4_mark_recovery_complete(sb, es); in __ext4_fill_super()
5619 if (test_opt(sb, DISCARD) && !bdev_max_discard_sectors(sb->s_bdev)) in __ext4_fill_super()
5623 if (es->s_error_count) in __ext4_fill_super()
5624 mod_timer(&sbi->s_err_report, jiffies + 300*HZ); /* 5 minutes */ in __ext4_fill_super()
5626 /* Enable message ratelimiting. Default is 10 messages per 5 secs. */ in __ext4_fill_super()
5627 ratelimit_state_init(&sbi->s_err_ratelimit_state, 5 * HZ, 10); in __ext4_fill_super()
5628 ratelimit_state_init(&sbi->s_warning_ratelimit_state, 5 * HZ, 10); in __ext4_fill_super()
5629 ratelimit_state_init(&sbi->s_msg_ratelimit_state, 5 * HZ, 10); in __ext4_fill_super()
5630 atomic_set(&sbi->s_warning_count, 0); in __ext4_fill_super()
5631 atomic_set(&sbi->s_msg_count, 0); in __ext4_fill_super()
5654 dput(sb->s_root); in __ext4_fill_super()
5655 sb->s_root = NULL; in __ext4_fill_super()
5658 if (EXT4_SB(sb)->rsv_conversion_wq) in __ext4_fill_super()
5659 destroy_workqueue(EXT4_SB(sb)->rsv_conversion_wq); in __ext4_fill_super()
5661 ext4_xattr_destroy_cache(sbi->s_ea_inode_cache); in __ext4_fill_super()
5662 sbi->s_ea_inode_cache = NULL; in __ext4_fill_super()
5664 ext4_xattr_destroy_cache(sbi->s_ea_block_cache); in __ext4_fill_super()
5665 sbi->s_ea_block_cache = NULL; in __ext4_fill_super()
5667 if (sbi->s_journal) { in __ext4_fill_super()
5669 flush_work(&sbi->s_sb_upd_work); in __ext4_fill_super()
5670 jbd2_journal_destroy(sbi->s_journal); in __ext4_fill_super()
5671 sbi->s_journal = NULL; in __ext4_fill_super()
5677 flush_work(&sbi->s_sb_upd_work); in __ext4_fill_super()
5679 del_timer_sync(&sbi->s_err_report); in __ext4_fill_super()
5683 utf8_unload(sb->s_encoding); in __ext4_fill_super()
5690 fscrypt_free_dummy_policy(&sbi->s_dummy_enc_policy); in __ext4_fill_super()
5691 brelse(sbi->s_sbh); in __ext4_fill_super()
5692 if (sbi->s_journal_bdev_file) { in __ext4_fill_super()
5693 invalidate_bdev(file_bdev(sbi->s_journal_bdev_file)); in __ext4_fill_super()
5694 bdev_fput(sbi->s_journal_bdev_file); in __ext4_fill_super()
5697 invalidate_bdev(sb->s_bdev); in __ext4_fill_super()
5698 sb->s_fs_info = NULL; in __ext4_fill_super()
5704 struct ext4_fs_context *ctx = fc->fs_private; in ext4_fill_super()
5711 return -ENOMEM; in ext4_fill_super()
5713 fc->s_fs_info = sbi; in ext4_fill_super()
5716 strreplace(sb->s_id, '/', '!'); in ext4_fill_super()
5718 sbi->s_sb_block = 1; /* Default super block location */ in ext4_fill_super()
5719 if (ctx->spec & EXT4_SPEC_s_sb_block) in ext4_fill_super()
5720 sbi->s_sb_block = ctx->s_sb_block; in ext4_fill_super()
5726 if (sbi->s_journal) { in ext4_fill_super()
5736 if (___ratelimit(&ext4_mount_msg_ratelimit, "EXT4-fs mount")) in ext4_fill_super()
5738 "Quota mode: %s.", &sb->s_uuid, in ext4_fill_super()
5748 fc->s_fs_info = NULL; in ext4_fill_super()
5758 * Setup any per-fs journal parameters now. We'll do this both on
5766 journal->j_commit_interval = sbi->s_commit_interval; in ext4_init_journal_params()
5767 journal->j_min_batch_time = sbi->s_min_batch_time; in ext4_init_journal_params()
5768 journal->j_max_batch_time = sbi->s_max_batch_time; in ext4_init_journal_params()
5771 write_lock(&journal->j_state_lock); in ext4_init_journal_params()
5773 journal->j_flags |= JBD2_BARRIER; in ext4_init_journal_params()
5775 journal->j_flags &= ~JBD2_BARRIER; in ext4_init_journal_params()
5777 journal->j_flags |= JBD2_ABORT_ON_SYNCDATA_ERR; in ext4_init_journal_params()
5779 journal->j_flags &= ~JBD2_ABORT_ON_SYNCDATA_ERR; in ext4_init_journal_params()
5781 * Always enable journal cycle record option, letting the journal in ext4_init_journal_params()
5784 journal->j_flags |= JBD2_CYCLE_RECORD; in ext4_init_journal_params()
5785 write_unlock(&journal->j_state_lock); in ext4_init_journal_params()
5803 if (!journal_inode->i_nlink) { in ext4_get_journal_inode()
5807 return ERR_PTR(-EFSCORRUPTED); in ext4_get_journal_inode()
5809 if (!S_ISREG(journal_inode->i_mode) || IS_ENCRYPTED(journal_inode)) { in ext4_get_journal_inode()
5812 return ERR_PTR(-EFSCORRUPTED); in ext4_get_journal_inode()
5816 journal_inode, journal_inode->i_size); in ext4_get_journal_inode()
5825 if (journal->j_inode == NULL) in ext4_journal_bmap()
5830 ret = ext4_map_blocks(NULL, journal->j_inode, &map, 0); in ext4_journal_bmap()
5832 ext4_msg(journal->j_inode->i_sb, KERN_CRIT, in ext4_journal_bmap()
5835 jbd2_journal_abort(journal, ret ? ret : -EIO); in ext4_journal_bmap()
5858 journal->j_private = sb; in ext4_open_inode_journal()
5859 journal->j_bmap = ext4_journal_bmap; in ext4_open_inode_journal()
5874 struct ext4_super_block *es; in ext4_get_journal_blkdev() local
5882 "failed to open journal device unknown-block(%u,%u) %ld", in ext4_get_journal_blkdev()
5888 blocksize = sb->s_blocksize; in ext4_get_journal_blkdev()
5893 errno = -EINVAL; in ext4_get_journal_blkdev()
5904 errno = -EINVAL; in ext4_get_journal_blkdev()
5908 es = (struct ext4_super_block *) (bh->b_data + offset); in ext4_get_journal_blkdev()
5909 if ((le16_to_cpu(es->s_magic) != EXT4_SUPER_MAGIC) || in ext4_get_journal_blkdev()
5910 !(le32_to_cpu(es->s_feature_incompat) & in ext4_get_journal_blkdev()
5913 errno = -EFSCORRUPTED; in ext4_get_journal_blkdev()
5917 if ((le32_to_cpu(es->s_feature_ro_compat) & in ext4_get_journal_blkdev()
5919 es->s_checksum != ext4_superblock_csum(sb, es)) { in ext4_get_journal_blkdev()
5921 errno = -EFSCORRUPTED; in ext4_get_journal_blkdev()
5925 if (memcmp(EXT4_SB(sb)->s_es->s_journal_uuid, es->s_uuid, 16)) { in ext4_get_journal_blkdev()
5927 errno = -EFSCORRUPTED; in ext4_get_journal_blkdev()
5932 *j_len = ext4_blocks_count(es); in ext4_get_journal_blkdev()
5956 journal = jbd2_journal_init_dev(file_bdev(bdev_file), sb->s_bdev, j_start, in ext4_open_dev_journal()
5957 j_len, sb->s_blocksize); in ext4_open_dev_journal()
5963 if (be32_to_cpu(journal->j_superblock->s_nr_users) != 1) { in ext4_open_dev_journal()
5965 "user (unsupported) - %d", in ext4_open_dev_journal()
5966 be32_to_cpu(journal->j_superblock->s_nr_users)); in ext4_open_dev_journal()
5967 errno = -EINVAL; in ext4_open_dev_journal()
5970 journal->j_private = sb; in ext4_open_dev_journal()
5971 EXT4_SB(sb)->s_journal_bdev_file = bdev_file; in ext4_open_dev_journal()
5983 struct ext4_super_block *es, in ext4_load_journal() argument
5987 unsigned int journal_inum = le32_to_cpu(es->s_journal_inum); in ext4_load_journal()
5994 return -EFSCORRUPTED; in ext4_load_journal()
5997 journal_devnum != le32_to_cpu(es->s_journal_dev)) { in ext4_load_journal()
6002 journal_dev = new_decode_dev(le32_to_cpu(es->s_journal_dev)); in ext4_load_journal()
6007 return -EINVAL; in ext4_load_journal()
6020 journal_dev_ro = bdev_read_only(journal->j_dev); in ext4_load_journal()
6021 really_read_only = bdev_read_only(sb->s_bdev) | journal_dev_ro; in ext4_load_journal()
6025 "journal device read-only, try mounting with '-o ro'"); in ext4_load_journal()
6026 err = -EROFS; in ext4_load_journal()
6033 * can get read-write access to the device. in ext4_load_journal()
6043 err = -EROFS; in ext4_load_journal()
6051 if (!(journal->j_flags & JBD2_BARRIER)) in ext4_load_journal()
6062 memcpy(save, ((char *) es) + in ext4_load_journal()
6065 if (save && memcmp(((char *) es) + EXT4_S_ERR_START, in ext4_load_journal()
6067 memcpy(((char *) es) + EXT4_S_ERR_START, in ext4_load_journal()
6072 orig_state = es->s_state; in ext4_load_journal()
6073 es->s_state |= cpu_to_le16(EXT4_SB(sb)->s_mount_state & in ext4_load_journal()
6075 if (orig_state != es->s_state) in ext4_load_journal()
6090 EXT4_SB(sb)->s_journal = journal; in ext4_load_journal()
6091 err = ext4_clear_journal_err(sb, es); in ext4_load_journal()
6093 EXT4_SB(sb)->s_journal = NULL; in ext4_load_journal()
6099 journal_devnum != le32_to_cpu(es->s_journal_dev)) { in ext4_load_journal()
6100 es->s_journal_dev = cpu_to_le32(journal_devnum); in ext4_load_journal()
6104 journal_inum != le32_to_cpu(es->s_journal_inum)) { in ext4_load_journal()
6105 es->s_journal_inum = cpu_to_le32(journal_inum); in ext4_load_journal()
6116 /* Copy state of EXT4_SB(sb) into buffer for on-disk superblock */
6120 struct ext4_super_block *es = sbi->s_es; in ext4_update_super() local
6121 struct buffer_head *sbh = sbi->s_sbh; in ext4_update_super()
6125 * If the file system is mounted read-only, don't update the in ext4_update_super()
6130 * tick in localtime for Windows bug-for-bug compatibility, in ext4_update_super()
6135 ext4_update_tstamp(es, s_wtime); in ext4_update_super()
6136 es->s_kbytes_written = in ext4_update_super()
6137 cpu_to_le64(sbi->s_kbytes_written + in ext4_update_super()
6138 ((part_stat_read(sb->s_bdev, sectors[STAT_WRITE]) - in ext4_update_super()
6139 sbi->s_sectors_written_start) >> 1)); in ext4_update_super()
6140 if (percpu_counter_initialized(&sbi->s_freeclusters_counter)) in ext4_update_super()
6141 ext4_free_blocks_count_set(es, in ext4_update_super()
6143 &sbi->s_freeclusters_counter))); in ext4_update_super()
6144 if (percpu_counter_initialized(&sbi->s_freeinodes_counter)) in ext4_update_super()
6145 es->s_free_inodes_count = in ext4_update_super()
6147 &sbi->s_freeinodes_counter)); in ext4_update_super()
6148 /* Copy error information to the on-disk superblock */ in ext4_update_super()
6149 spin_lock(&sbi->s_error_lock); in ext4_update_super()
6150 if (sbi->s_add_error_count > 0) { in ext4_update_super()
6151 es->s_state |= cpu_to_le16(EXT4_ERROR_FS); in ext4_update_super()
6152 if (!es->s_first_error_time && !es->s_first_error_time_hi) { in ext4_update_super()
6153 __ext4_update_tstamp(&es->s_first_error_time, in ext4_update_super()
6154 &es->s_first_error_time_hi, in ext4_update_super()
6155 sbi->s_first_error_time); in ext4_update_super()
6156 strtomem_pad(es->s_first_error_func, in ext4_update_super()
6157 sbi->s_first_error_func, 0); in ext4_update_super()
6158 es->s_first_error_line = in ext4_update_super()
6159 cpu_to_le32(sbi->s_first_error_line); in ext4_update_super()
6160 es->s_first_error_ino = in ext4_update_super()
6161 cpu_to_le32(sbi->s_first_error_ino); in ext4_update_super()
6162 es->s_first_error_block = in ext4_update_super()
6163 cpu_to_le64(sbi->s_first_error_block); in ext4_update_super()
6164 es->s_first_error_errcode = in ext4_update_super()
6165 ext4_errno_to_code(sbi->s_first_error_code); in ext4_update_super()
6167 __ext4_update_tstamp(&es->s_last_error_time, in ext4_update_super()
6168 &es->s_last_error_time_hi, in ext4_update_super()
6169 sbi->s_last_error_time); in ext4_update_super()
6170 strtomem_pad(es->s_last_error_func, sbi->s_last_error_func, 0); in ext4_update_super()
6171 es->s_last_error_line = cpu_to_le32(sbi->s_last_error_line); in ext4_update_super()
6172 es->s_last_error_ino = cpu_to_le32(sbi->s_last_error_ino); in ext4_update_super()
6173 es->s_last_error_block = cpu_to_le64(sbi->s_last_error_block); in ext4_update_super()
6174 es->s_last_error_errcode = in ext4_update_super()
6175 ext4_errno_to_code(sbi->s_last_error_code); in ext4_update_super()
6180 if (!es->s_error_count) in ext4_update_super()
6181 mod_timer(&sbi->s_err_report, jiffies + 24*60*60*HZ); in ext4_update_super()
6182 le32_add_cpu(&es->s_error_count, sbi->s_add_error_count); in ext4_update_super()
6183 sbi->s_add_error_count = 0; in ext4_update_super()
6185 spin_unlock(&sbi->s_error_lock); in ext4_update_super()
6193 struct buffer_head *sbh = EXT4_SB(sb)->s_sbh; in ext4_commit_super()
6196 return -EINVAL; in ext4_commit_super()
6204 return -EIO; in ext4_commit_super()
6224 sbh->b_end_io = end_buffer_write_sync; in ext4_commit_super()
6233 return -EIO; in ext4_commit_super()
6244 struct ext4_super_block *es) in ext4_mark_recovery_complete() argument
6247 journal_t *journal = EXT4_SB(sb)->s_journal; in ext4_mark_recovery_complete()
6253 return -EFSCORRUPTED; in ext4_mark_recovery_complete()
6265 ext4_error(sb, "Orphan file not empty on read-only fs."); in ext4_mark_recovery_complete()
6266 err = -EFSCORRUPTED; in ext4_mark_recovery_complete()
6279 * If we are mounting (or read-write remounting) a filesystem whose journal
6284 struct ext4_super_block *es) in ext4_clear_journal_err() argument
6292 return -EFSCORRUPTED; in ext4_clear_journal_err()
6295 journal = EXT4_SB(sb)->s_journal; in ext4_clear_journal_err()
6310 EXT4_SB(sb)->s_mount_state |= EXT4_ERROR_FS; in ext4_clear_journal_err()
6311 es->s_state |= cpu_to_le16(EXT4_ERROR_FS); in ext4_clear_journal_err()
6329 return ext4_journal_force_commit(EXT4_SB(sb)->s_journal); in ext4_force_commit()
6340 return -EIO; in ext4_sync_fs()
6343 flush_workqueue(sbi->rsv_conversion_wq); in ext4_sync_fs()
6345 * Writeback quota in non-journalled quota case - journalled quota has in ext4_sync_fs()
6348 dquot_writeback_dquots(sb, -1); in ext4_sync_fs()
6354 if (sbi->s_journal) { in ext4_sync_fs()
6355 target = jbd2_get_latest_transaction(sbi->s_journal); in ext4_sync_fs()
6356 if (wait && sbi->s_journal->j_flags & JBD2_BARRIER && in ext4_sync_fs()
6357 !jbd2_trans_will_send_data_barrier(sbi->s_journal, target)) in ext4_sync_fs()
6360 if (jbd2_journal_start_commit(sbi->s_journal, &target)) { in ext4_sync_fs()
6362 ret = jbd2_log_wait_commit(sbi->s_journal, in ext4_sync_fs()
6369 err = blkdev_issue_flush(sb->s_bdev); in ext4_sync_fs()
6378 * LVM calls this function before a (read-only) snapshot is created. This
6388 journal_t *journal = EXT4_SB(sb)->s_journal; in ext4_freeze()
6425 if (EXT4_SB(sb)->s_journal) { in ext4_unfreeze()
6454 struct ext4_fs_context *ctx = fc->fs_private; in __ext4_remount()
6455 struct ext4_super_block *es; in __ext4_remount() local
6470 old_sb_flags = sb->s_flags; in __ext4_remount()
6471 old_opts.s_mount_opt = sbi->s_mount_opt; in __ext4_remount()
6472 old_opts.s_mount_opt2 = sbi->s_mount_opt2; in __ext4_remount()
6473 old_opts.s_resuid = sbi->s_resuid; in __ext4_remount()
6474 old_opts.s_resgid = sbi->s_resgid; in __ext4_remount()
6475 old_opts.s_commit_interval = sbi->s_commit_interval; in __ext4_remount()
6476 old_opts.s_min_batch_time = sbi->s_min_batch_time; in __ext4_remount()
6477 old_opts.s_max_batch_time = sbi->s_max_batch_time; in __ext4_remount()
6479 old_opts.s_jquota_fmt = sbi->s_jquota_fmt; in __ext4_remount()
6481 if (sbi->s_qf_names[i]) { in __ext4_remount()
6488 return -ENOMEM; in __ext4_remount()
6493 if (!(ctx->spec & EXT4_SPEC_JOURNAL_IOPRIO)) { in __ext4_remount()
6494 if (sbi->s_journal && sbi->s_journal->j_task->io_context) in __ext4_remount()
6495 ctx->journal_ioprio = in __ext4_remount()
6496 sbi->s_journal->j_task->io_context->ioprio; in __ext4_remount()
6498 ctx->journal_ioprio = DEFAULT_JOURNAL_IOPRIO; in __ext4_remount()
6502 if ((ctx->spec & EXT4_SPEC_s_stripe) && in __ext4_remount()
6503 ext4_is_stripe_incompatible(sb, ctx->s_stripe)) { in __ext4_remount()
6507 ctx->s_stripe, sbi->s_cluster_ratio); in __ext4_remount()
6508 ctx->s_stripe = 0; in __ext4_remount()
6526 sbi->s_mount_opt ^= EXT4_MOUNT_JOURNAL_CHECKSUM; in __ext4_remount()
6533 err = -EINVAL; in __ext4_remount()
6539 err = -EINVAL; in __ext4_remount()
6546 err = -EINVAL; in __ext4_remount()
6551 if ((sbi->s_mount_opt ^ old_opts.s_mount_opt) & EXT4_MOUNT_NO_MBCACHE) { in __ext4_remount()
6552 ext4_msg(sb, KERN_ERR, "can't enable nombcache during remount"); in __ext4_remount()
6553 err = -EINVAL; in __ext4_remount()
6560 err = -EINVAL; in __ext4_remount()
6564 sb->s_flags = (sb->s_flags & ~SB_POSIXACL) | in __ext4_remount()
6567 es = sbi->s_es; in __ext4_remount()
6569 if (sbi->s_journal) { in __ext4_remount()
6570 ext4_init_journal_params(sb, sbi->s_journal); in __ext4_remount()
6571 set_task_ioprio(sbi->s_journal->j_task, ctx->journal_ioprio); in __ext4_remount()
6575 flush_work(&sbi->s_sb_upd_work); in __ext4_remount()
6577 if ((bool)(fc->sb_flags & SB_RDONLY) != sb_rdonly(sb)) { in __ext4_remount()
6579 err = -EROFS; in __ext4_remount()
6583 if (fc->sb_flags & SB_RDONLY) { in __ext4_remount()
6587 err = dquot_suspend(sb, -1); in __ext4_remount()
6595 sb->s_flags |= SB_RDONLY; in __ext4_remount()
6602 if (!(es->s_state & cpu_to_le16(EXT4_VALID_FS)) && in __ext4_remount()
6603 (sbi->s_mount_state & EXT4_VALID_FS)) in __ext4_remount()
6604 es->s_state = cpu_to_le16(sbi->s_mount_state); in __ext4_remount()
6606 if (sbi->s_journal) { in __ext4_remount()
6608 * We let remount-ro finish even if marking fs in __ext4_remount()
6611 ext4_mark_recovery_complete(sb, es); in __ext4_remount()
6617 err = -EROFS; in __ext4_remount()
6624 for (g = 0; g < sbi->s_groups_count; g++) { in __ext4_remount()
6632 le16_to_cpu(gdp->bg_checksum)); in __ext4_remount()
6633 err = -EFSBADCRC; in __ext4_remount()
6643 if (es->s_last_orphan || !ext4_orphan_file_empty(sb)) { in __ext4_remount()
6648 err = -EINVAL; in __ext4_remount()
6653 * Mounting a RDONLY partition read-write, so reread in __ext4_remount()
6658 if (sbi->s_journal) { in __ext4_remount()
6659 err = ext4_clear_journal_err(sb, es); in __ext4_remount()
6663 sbi->s_mount_state = (le16_to_cpu(es->s_state) & in __ext4_remount()
6666 err = ext4_setup_super(sb, es, 0); in __ext4_remount()
6670 sb->s_flags &= ~SB_RDONLY; in __ext4_remount()
6673 le64_to_cpu(es->s_mmp_block)); in __ext4_remount()
6688 if (test_opt(sb, BLOCK_VALIDITY) && !sbi->s_system_blks) { in __ext4_remount()
6694 if (sbi->s_journal == NULL && !(old_sb_flags & SB_RDONLY)) { in __ext4_remount()
6703 dquot_resume(sb, -1); in __ext4_remount()
6714 if (!test_opt(sb, BLOCK_VALIDITY) && sbi->s_system_blks) in __ext4_remount()
6745 * re-enable quota in __ext4_remount()
6749 dquot_resume(sb, -1); in __ext4_remount()
6752 sb->s_flags = old_sb_flags; in __ext4_remount()
6753 sbi->s_mount_opt = old_opts.s_mount_opt; in __ext4_remount()
6754 sbi->s_mount_opt2 = old_opts.s_mount_opt2; in __ext4_remount()
6755 sbi->s_resuid = old_opts.s_resuid; in __ext4_remount()
6756 sbi->s_resgid = old_opts.s_resgid; in __ext4_remount()
6757 sbi->s_commit_interval = old_opts.s_commit_interval; in __ext4_remount()
6758 sbi->s_min_batch_time = old_opts.s_min_batch_time; in __ext4_remount()
6759 sbi->s_max_batch_time = old_opts.s_max_batch_time; in __ext4_remount()
6762 if (!test_opt(sb, BLOCK_VALIDITY) && sbi->s_system_blks) in __ext4_remount()
6765 sbi->s_jquota_fmt = old_opts.s_jquota_fmt; in __ext4_remount()
6768 rcu_assign_pointer(sbi->s_qf_names[i], old_opts.s_qf_names[i]); in __ext4_remount()
6781 struct super_block *sb = fc->root->d_sb; in ext4_reconfigure()
6784 fc->s_fs_info = EXT4_SB(sb); in ext4_reconfigure()
6794 ext4_msg(sb, KERN_INFO, "re-mounted %pU %s. Quota mode: %s.", in ext4_reconfigure()
6795 &sb->s_uuid, sb_rdonly(sb) ? "ro" : "r/w", in ext4_reconfigure()
6814 spin_lock(&dquot->dq_dqb_lock); in ext4_statfs_project()
6816 limit = min_not_zero(dquot->dq_dqb.dqb_bsoftlimit, in ext4_statfs_project()
6817 dquot->dq_dqb.dqb_bhardlimit); in ext4_statfs_project()
6818 limit >>= sb->s_blocksize_bits; in ext4_statfs_project()
6820 if (limit && buf->f_blocks > limit) { in ext4_statfs_project()
6821 curblock = (dquot->dq_dqb.dqb_curspace + in ext4_statfs_project()
6822 dquot->dq_dqb.dqb_rsvspace) >> sb->s_blocksize_bits; in ext4_statfs_project()
6823 buf->f_blocks = limit; in ext4_statfs_project()
6824 buf->f_bfree = buf->f_bavail = in ext4_statfs_project()
6825 (buf->f_blocks > curblock) ? in ext4_statfs_project()
6826 (buf->f_blocks - curblock) : 0; in ext4_statfs_project()
6829 limit = min_not_zero(dquot->dq_dqb.dqb_isoftlimit, in ext4_statfs_project()
6830 dquot->dq_dqb.dqb_ihardlimit); in ext4_statfs_project()
6831 if (limit && buf->f_files > limit) { in ext4_statfs_project()
6832 buf->f_files = limit; in ext4_statfs_project()
6833 buf->f_ffree = in ext4_statfs_project()
6834 (buf->f_files > dquot->dq_dqb.dqb_curinodes) ? in ext4_statfs_project()
6835 (buf->f_files - dquot->dq_dqb.dqb_curinodes) : 0; in ext4_statfs_project()
6838 spin_unlock(&dquot->dq_dqb_lock); in ext4_statfs_project()
6846 struct super_block *sb = dentry->d_sb; in ext4_statfs()
6848 struct ext4_super_block *es = sbi->s_es; in ext4_statfs() local
6851 resv_blocks = EXT4_C2B(sbi, atomic64_read(&sbi->s_resv_clusters)); in ext4_statfs()
6854 overhead = sbi->s_overhead; in ext4_statfs()
6856 buf->f_type = EXT4_SUPER_MAGIC; in ext4_statfs()
6857 buf->f_bsize = sb->s_blocksize; in ext4_statfs()
6858 buf->f_blocks = ext4_blocks_count(es) - EXT4_C2B(sbi, overhead); in ext4_statfs()
6859 bfree = percpu_counter_sum_positive(&sbi->s_freeclusters_counter) - in ext4_statfs()
6860 percpu_counter_sum_positive(&sbi->s_dirtyclusters_counter); in ext4_statfs()
6862 buf->f_bfree = EXT4_C2B(sbi, max_t(s64, bfree, 0)); in ext4_statfs()
6863 buf->f_bavail = buf->f_bfree - in ext4_statfs()
6864 (ext4_r_blocks_count(es) + resv_blocks); in ext4_statfs()
6865 if (buf->f_bfree < (ext4_r_blocks_count(es) + resv_blocks)) in ext4_statfs()
6866 buf->f_bavail = 0; in ext4_statfs()
6867 buf->f_files = le32_to_cpu(es->s_inodes_count); in ext4_statfs()
6868 buf->f_ffree = percpu_counter_sum_positive(&sbi->s_freeinodes_counter); in ext4_statfs()
6869 buf->f_namelen = EXT4_NAME_LEN; in ext4_statfs()
6870 buf->f_fsid = uuid_to_fsid(es->s_uuid); in ext4_statfs()
6873 if (ext4_test_inode_flag(dentry->d_inode, EXT4_INODE_PROJINHERIT) && in ext4_statfs()
6875 ext4_statfs_project(sb, EXT4_I(dentry->d_inode)->i_projid, buf); in ext4_statfs()
6889 return sb_dqopt(dquot->dq_sb)->files[dquot->dq_id.type]; in dquot_to_inode()
6900 EXT4_QUOTA_TRANS_BLOCKS(dquot->dq_sb)); in ext4_write_dquot()
6905 ext4_error_err(dquot->dq_sb, -ret, in ext4_write_dquot()
6907 dquot->dq_id.type); in ext4_write_dquot()
6920 EXT4_QUOTA_INIT_BLOCKS(dquot->dq_sb)); in ext4_acquire_dquot()
6925 ext4_error_err(dquot->dq_sb, -ret, in ext4_acquire_dquot()
6927 dquot->dq_id.type); in ext4_acquire_dquot()
6940 EXT4_QUOTA_DEL_BLOCKS(dquot->dq_sb)); in ext4_release_dquot()
6948 ext4_error_err(dquot->dq_sb, -ret, in ext4_release_dquot()
6950 dquot->dq_id.type); in ext4_release_dquot()
6959 struct super_block *sb = dquot->dq_sb; in ext4_mark_dquot_dirty()
6990 * *exactly* the same as the argument to init_rwsem() --- in in lockdep_set_quota_inode()
6991 * this case, in init_once() --- or lockdep gets unhappy in lockdep_set_quota_inode()
6996 lockdep_set_subclass(&ei->i_data_sem, subclass); in lockdep_set_quota_inode()
7008 return -EINVAL; in ext4_quota_on()
7011 if (path->dentry->d_sb != sb) in ext4_quota_on()
7012 return -EXDEV; in ext4_quota_on()
7015 if (IS_NOQUOTA(d_inode(path->dentry))) in ext4_quota_on()
7016 return -EBUSY; in ext4_quota_on()
7019 if (EXT4_SB(sb)->s_qf_names[type]) { in ext4_quota_on()
7021 if (path->dentry->d_parent != sb->s_root) in ext4_quota_on()
7025 sb_dqopt(sb)->flags |= DQUOT_NOLIST_DIRTY; in ext4_quota_on()
7031 sb_dqopt(sb)->flags &= ~DQUOT_NOLIST_DIRTY; in ext4_quota_on()
7034 lockdep_set_quota_inode(path->dentry->d_inode, I_DATA_SEM_QUOTA); in ext4_quota_on()
7037 struct inode *inode = d_inode(path->dentry); in ext4_quota_on()
7049 EXT4_I(inode)->i_flags |= EXT4_NOATIME_FL | EXT4_IMMUTABLE_FL; in ext4_quota_on()
7060 lockdep_set_quota_inode(path->dentry->d_inode, in ext4_quota_on()
7085 le32_to_cpu(EXT4_SB(sb)->s_es->s_usr_quota_inum), in ext4_quota_enable()
7086 le32_to_cpu(EXT4_SB(sb)->s_es->s_grp_quota_inum), in ext4_quota_enable()
7087 le32_to_cpu(EXT4_SB(sb)->s_es->s_prj_quota_inum) in ext4_quota_enable()
7093 return -EPERM; in ext4_quota_enable()
7098 return -EUCLEAN; in ext4_quota_enable()
7109 qf_inode->i_flags |= S_NOQUOTA; in ext4_quota_enable()
7119 /* Enable usage tracking for all quota types. */
7124 le32_to_cpu(EXT4_SB(sb)->s_es->s_usr_quota_inum), in ext4_enable_quotas()
7125 le32_to_cpu(EXT4_SB(sb)->s_es->s_grp_quota_inum), in ext4_enable_quotas()
7126 le32_to_cpu(EXT4_SB(sb)->s_es->s_prj_quota_inum) in ext4_enable_quotas()
7134 sb_dqopt(sb)->flags |= DQUOT_QUOTA_SYS_FILE | DQUOT_NOLIST_DIRTY; in ext4_enable_quotas()
7142 "Failed to enable quota tracking " in ext4_enable_quotas()
7157 struct inode *inode = sb_dqopt(sb)->files[type]; in ext4_quota_off()
7173 * When the filesystem was remounted read-only first, we cannot cleanup in ext4_quota_off()
7191 EXT4_I(inode)->i_flags &= ~(EXT4_NOATIME_FL | EXT4_IMMUTABLE_FL); in ext4_quota_off()
7206 /* Read data from quotafile - avoid pagecache and such because we cannot afford
7213 struct inode *inode = sb_dqopt(sb)->files[type]; in ext4_quota_read()
7215 int offset = off & (sb->s_blocksize - 1); in ext4_quota_read()
7224 len = i_size-off; in ext4_quota_read()
7227 tocopy = min_t(unsigned long, sb->s_blocksize - offset, toread); in ext4_quota_read()
7234 memcpy(data, bh->b_data+offset, tocopy); in ext4_quota_read()
7237 toread -= tocopy; in ext4_quota_read()
7249 struct inode *inode = sb_dqopt(sb)->files[type]; in ext4_quota_write()
7251 int err = 0, err2 = 0, offset = off & (sb->s_blocksize - 1); in ext4_quota_write()
7260 return -EIO; in ext4_quota_write()
7266 if (sb->s_blocksize - offset < len) { in ext4_quota_write()
7270 return -EIO; in ext4_quota_write()
7277 } while (PTR_ERR(bh) == -ENOSPC && in ext4_quota_write()
7278 ext4_should_retry_alloc(inode->i_sb, &retries)); in ext4_quota_write()
7290 memcpy(bh->b_data+offset, data, len); in ext4_quota_write()
7291 flush_dcache_page(bh->b_page); in ext4_quota_write()
7296 if (inode->i_size < off + len) { in ext4_quota_write()
7298 EXT4_I(inode)->i_disksize = inode->i_size; in ext4_quota_write()
7313 "EXT4-fs: Unable to register as ext2 (%d)\n", err); in register_as_ext2()
7342 "EXT4-fs: Unable to register as ext3 (%d)\n", err); in register_as_ext3()
7366 struct file *bdev_file = sbi ? sbi->s_journal_bdev_file : NULL; in ext4_kill_sb()
7394 /* Build-time check for flags consistency */ in ext4_init_fs()