• Home
  • Raw
  • Download

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>
71 struct ext4_super_block *es);
73 struct ext4_super_block *es);
93 * Note the difference between i_mmap_sem (EXT4_I(inode)->i_mmap_sem) and
94 * i_mmap_rwsem (inode->i_mmap_rwsem)!
97 * mmap_lock -> sb_start_pagefault -> i_mmap_sem (r) -> transaction start ->
98 * page lock -> i_data_sem (rw)
101 * sb_start_write -> i_mutex -> mmap_lock
102 * sb_start_write -> i_mutex -> transaction start -> page lock ->
106 * sb_start_write -> i_mutex -> i_mmap_sem (w) -> i_mmap_rwsem (w) -> page lock
107 * sb_start_write -> i_mutex -> i_mmap_sem (w) -> transaction start ->
111 * sb_start_write -> i_mutex -> mmap_lock
112 * sb_start_write -> i_mutex -> transaction start -> i_data_sem (rw)
115 * transaction start -> page lock(s) -> i_data_sem (rw)
128 #define IS_EXT2_SB(sb) ((sb)->s_bdev->bd_holder == &ext2_fs_type)
143 #define IS_EXT3_SB(sb) ((sb)->s_bdev->bd_holder == &ext3_fs_type)
156 bh->b_end_io = end_io ? end_io : end_buffer_read_sync; in __ext4_read_bh()
187 return -EIO; in ext4_read_bh()
215 return ERR_PTR(-ENOMEM); in __ext4_sb_bread_gfp()
251 struct ext4_super_block *es) in ext4_verify_csum_type() argument
256 return es->s_checksum_type == EXT4_CRC32C_CHKSUM; in ext4_verify_csum_type()
260 struct ext4_super_block *es) in ext4_superblock_csum() argument
266 csum = ext4_chksum(sbi, ~0, (char *)es, offset); in ext4_superblock_csum()
272 struct ext4_super_block *es) in ext4_superblock_csum_verify() argument
277 return es->s_checksum == ext4_superblock_csum(sb, es); in ext4_superblock_csum_verify()
282 struct ext4_super_block *es = EXT4_SB(sb)->s_es; in ext4_superblock_csum_set() local
287 es->s_checksum = ext4_superblock_csum(sb, es); in ext4_superblock_csum_set()
293 return le32_to_cpu(bg->bg_block_bitmap_lo) | in ext4_block_bitmap()
295 (ext4_fsblk_t)le32_to_cpu(bg->bg_block_bitmap_hi) << 32 : 0); in ext4_block_bitmap()
301 return le32_to_cpu(bg->bg_inode_bitmap_lo) | in ext4_inode_bitmap()
303 (ext4_fsblk_t)le32_to_cpu(bg->bg_inode_bitmap_hi) << 32 : 0); in ext4_inode_bitmap()
309 return le32_to_cpu(bg->bg_inode_table_lo) | in ext4_inode_table()
311 (ext4_fsblk_t)le32_to_cpu(bg->bg_inode_table_hi) << 32 : 0); in ext4_inode_table()
317 return le16_to_cpu(bg->bg_free_blocks_count_lo) | in ext4_free_group_clusters()
319 (__u32)le16_to_cpu(bg->bg_free_blocks_count_hi) << 16 : 0); in ext4_free_group_clusters()
325 return le16_to_cpu(bg->bg_free_inodes_count_lo) | in ext4_free_inodes_count()
327 (__u32)le16_to_cpu(bg->bg_free_inodes_count_hi) << 16 : 0); in ext4_free_inodes_count()
333 return le16_to_cpu(bg->bg_used_dirs_count_lo) | in ext4_used_dirs_count()
335 (__u32)le16_to_cpu(bg->bg_used_dirs_count_hi) << 16 : 0); in ext4_used_dirs_count()
341 return le16_to_cpu(bg->bg_itable_unused_lo) | in ext4_itable_unused_count()
343 (__u32)le16_to_cpu(bg->bg_itable_unused_hi) << 16 : 0); in ext4_itable_unused_count()
349 bg->bg_block_bitmap_lo = cpu_to_le32((u32)blk); in ext4_block_bitmap_set()
351 bg->bg_block_bitmap_hi = cpu_to_le32(blk >> 32); in ext4_block_bitmap_set()
357 bg->bg_inode_bitmap_lo = cpu_to_le32((u32)blk); in ext4_inode_bitmap_set()
359 bg->bg_inode_bitmap_hi = cpu_to_le32(blk >> 32); in ext4_inode_bitmap_set()
365 bg->bg_inode_table_lo = cpu_to_le32((u32)blk); in ext4_inode_table_set()
367 bg->bg_inode_table_hi = cpu_to_le32(blk >> 32); in ext4_inode_table_set()
373 bg->bg_free_blocks_count_lo = cpu_to_le16((__u16)count); in ext4_free_group_clusters_set()
375 bg->bg_free_blocks_count_hi = cpu_to_le16(count >> 16); in ext4_free_group_clusters_set()
381 bg->bg_free_inodes_count_lo = cpu_to_le16((__u16)count); in ext4_free_inodes_set()
383 bg->bg_free_inodes_count_hi = cpu_to_le16(count >> 16); in ext4_free_inodes_set()
389 bg->bg_used_dirs_count_lo = cpu_to_le16((__u16)count); in ext4_used_dirs_set()
391 bg->bg_used_dirs_count_hi = cpu_to_le16(count >> 16); in ext4_used_dirs_set()
397 bg->bg_itable_unused_lo = cpu_to_le16((__u16)count); in ext4_itable_unused_set()
399 bg->bg_itable_unused_hi = cpu_to_le16(count >> 16); in ext4_itable_unused_set()
404 now = clamp_val(now, 0, (1ull << 40) - 1); in __ext4_update_tstamp()
414 #define ext4_update_tstamp(es, tstamp) \ argument
415 __ext4_update_tstamp(&(es)->tstamp, &(es)->tstamp ## _hi, \
417 #define ext4_get_tstamp(es, tstamp) \ argument
418 __ext4_get_tstamp(&(es)->tstamp, &(es)->tstamp ## _hi)
421 * The del_gendisk() function uninitializes the disk-specific data
430 struct inode *bd_inode = sb->s_bdev->bd_inode; in block_device_ejected()
433 return bdi->dev == NULL; in block_device_ejected()
438 struct super_block *sb = journal->j_private; in ext4_journal_commit_callback()
443 BUG_ON(txn->t_state == T_FINISHED); in ext4_journal_commit_callback()
445 ext4_process_freed_data(sb, txn->t_tid); in ext4_journal_commit_callback()
447 spin_lock(&sbi->s_md_lock); in ext4_journal_commit_callback()
448 while (!list_empty(&txn->t_private_list)) { in ext4_journal_commit_callback()
449 jce = list_entry(txn->t_private_list.next, in ext4_journal_commit_callback()
451 list_del_init(&jce->jce_list); in ext4_journal_commit_callback()
452 spin_unlock(&sbi->s_md_lock); in ext4_journal_commit_callback()
453 jce->jce_func(sb, jce, error); in ext4_journal_commit_callback()
454 spin_lock(&sbi->s_md_lock); in ext4_journal_commit_callback()
456 spin_unlock(&sbi->s_md_lock); in ext4_journal_commit_callback()
494 (jh && (jh->b_transaction != transaction || in ext4_journalled_writepage_callback()
495 jh->b_next_transaction))) { in ext4_journalled_writepage_callback()
499 } while ((bh = bh->b_this_page) != head); in ext4_journalled_writepage_callback()
507 struct address_space *mapping = jinode->i_vfs_inode->i_mapping; in ext4_journalled_submit_inode_data_buffers()
511 .range_start = jinode->i_dirty_start, in ext4_journalled_submit_inode_data_buffers()
512 .range_end = jinode->i_dirty_end, in ext4_journalled_submit_inode_data_buffers()
517 jinode->i_transaction); in ext4_journalled_submit_inode_data_buffers()
524 if (ext4_should_journal_data(jinode->i_vfs_inode)) in ext4_journal_submit_inode_data_buffers()
536 if (!ext4_should_journal_data(jinode->i_vfs_inode)) in ext4_journal_finish_inode_data_buffers()
594 spin_lock(&sbi->s_error_lock); in save_error_info()
595 sbi->s_add_error_count++; in save_error_info()
596 sbi->s_last_error_code = error; in save_error_info()
597 sbi->s_last_error_line = line; in save_error_info()
598 sbi->s_last_error_ino = ino; in save_error_info()
599 sbi->s_last_error_block = block; in save_error_info()
600 sbi->s_last_error_func = func; in save_error_info()
601 sbi->s_last_error_time = ktime_get_real_seconds(); in save_error_info()
602 if (!sbi->s_first_error_time) { in save_error_info()
603 sbi->s_first_error_code = error; in save_error_info()
604 sbi->s_first_error_line = line; in save_error_info()
605 sbi->s_first_error_ino = ino; in save_error_info()
606 sbi->s_first_error_block = block; in save_error_info()
607 sbi->s_first_error_func = func; in save_error_info()
608 sbi->s_first_error_time = sbi->s_last_error_time; in save_error_info()
610 spin_unlock(&sbi->s_error_lock); in save_error_info()
637 journal_t *journal = EXT4_SB(sb)->s_journal; in ext4_handle_error()
640 EXT4_SB(sb)->s_mount_state |= EXT4_ERROR_FS; in ext4_handle_error()
647 jbd2_journal_abort(journal, -EIO); in ext4_handle_error()
650 if (!bdev_read_only(sb->s_bdev)) { in ext4_handle_error()
659 schedule_work(&EXT4_SB(sb)->s_error_work); in ext4_handle_error()
666 * could panic during 'reboot -f' as the underlying device got already in ext4_handle_error()
670 panic("EXT4-fs (device %s): panic forced after error\n", in ext4_handle_error()
671 sb->s_id); in ext4_handle_error()
677 ext4_msg(sb, KERN_CRIT, "Remounting filesystem read-only"); in ext4_handle_error()
679 * Make sure updated value of ->s_mount_flags will be visible before in ext4_handle_error()
680 * ->s_flags update in ext4_handle_error()
683 sb->s_flags |= SB_RDONLY; in ext4_handle_error()
690 journal_t *journal = sbi->s_journal; in flush_stashed_error_work()
701 if (!sb_rdonly(sbi->s_sb) && journal) { in flush_stashed_error_work()
702 struct buffer_head *sbh = sbi->s_sbh; in flush_stashed_error_work()
710 ext4_update_super(sbi->s_sb); in flush_stashed_error_work()
712 ext4_msg(sbi->s_sb, KERN_ERR, "previous I/O error to " in flush_stashed_error_work()
730 ext4_commit_super(sbi->s_sb); in flush_stashed_error_work()
734 ___ratelimit(&(EXT4_SB(sb)->s_err_ratelimit_state), \
735 "EXT4-fs error")
753 "EXT4-fs error (device %s): %s:%d: comm %s: %pV\n", in __ext4_error()
754 sb->s_id, function, line, current->comm, &vaf); in __ext4_error()
767 if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb)))) in __ext4_error_inode()
770 trace_ext4_error(inode->i_sb, function, line); in __ext4_error_inode()
771 if (ext4_error_ratelimit(inode->i_sb)) { in __ext4_error_inode()
776 printk(KERN_CRIT "EXT4-fs error (device %s): %s:%d: " in __ext4_error_inode()
778 inode->i_sb->s_id, function, line, inode->i_ino, in __ext4_error_inode()
779 block, current->comm, &vaf); in __ext4_error_inode()
781 printk(KERN_CRIT "EXT4-fs error (device %s): %s:%d: " in __ext4_error_inode()
783 inode->i_sb->s_id, function, line, inode->i_ino, in __ext4_error_inode()
784 current->comm, &vaf); in __ext4_error_inode()
787 ext4_handle_error(inode->i_sb, false, error, inode->i_ino, block, in __ext4_error_inode()
800 if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb)))) in __ext4_error_file()
803 trace_ext4_error(inode->i_sb, function, line); in __ext4_error_file()
804 if (ext4_error_ratelimit(inode->i_sb)) { in __ext4_error_file()
813 "EXT4-fs error (device %s): %s:%d: inode #%lu: " in __ext4_error_file()
815 inode->i_sb->s_id, function, line, inode->i_ino, in __ext4_error_file()
816 block, current->comm, path, &vaf); in __ext4_error_file()
819 "EXT4-fs error (device %s): %s:%d: inode #%lu: " in __ext4_error_file()
821 inode->i_sb->s_id, function, line, inode->i_ino, in __ext4_error_file()
822 current->comm, path, &vaf); in __ext4_error_file()
825 ext4_handle_error(inode->i_sb, false, EFSCORRUPTED, inode->i_ino, block, in __ext4_error_file()
835 case -EFSCORRUPTED: in ext4_decode_error()
838 case -EFSBADCRC: in ext4_decode_error()
841 case -EIO: in ext4_decode_error()
844 case -ENOMEM: in ext4_decode_error()
847 case -EROFS: in ext4_decode_error()
848 if (!sb || (EXT4_SB(sb)->s_journal && in ext4_decode_error()
849 EXT4_SB(sb)->s_journal->j_flags & JBD2_ABORT)) in ext4_decode_error()
860 if (snprintf(nbuf, 16, "error %d", -errno) >= 0) in ext4_decode_error()
884 if (errno == -EROFS && journal_current_handle() == NULL && sb_rdonly(sb)) in __ext4_std_error()
889 printk(KERN_CRIT "EXT4-fs error (device %s) in %s:%d: %s\n", in __ext4_std_error()
890 sb->s_id, function, line, errstr); in __ext4_std_error()
893 ext4_handle_error(sb, false, -errno, 0, 0, function, line); in __ext4_std_error()
902 atomic_inc(&EXT4_SB(sb)->s_msg_count); in __ext4_msg()
903 if (!___ratelimit(&(EXT4_SB(sb)->s_msg_ratelimit_state), "EXT4-fs")) in __ext4_msg()
909 printk("%sEXT4-fs (%s): %pV\n", prefix, sb->s_id, &vaf); in __ext4_msg()
915 atomic_inc(&EXT4_SB(sb)->s_warning_count); in ext4_warning_ratelimit()
916 return ___ratelimit(&(EXT4_SB(sb)->s_warning_ratelimit_state), in ext4_warning_ratelimit()
917 "EXT4-fs warning"); in ext4_warning_ratelimit()
932 printk(KERN_WARNING "EXT4-fs warning (device %s): %s:%d: %pV\n", in __ext4_warning()
933 sb->s_id, function, line, &vaf); in __ext4_warning()
943 if (!ext4_warning_ratelimit(inode->i_sb)) in __ext4_warning_inode()
949 printk(KERN_WARNING "EXT4-fs warning (device %s): %s:%d: " in __ext4_warning_inode()
950 "inode #%lu: comm %s: %pV\n", inode->i_sb->s_id, in __ext4_warning_inode()
951 function, line, inode->i_ino, current->comm, &vaf); in __ext4_warning_inode()
973 printk(KERN_CRIT "EXT4-fs error (device %s): %s:%d: group %u, ", in __ext4_grp_locked_error()
974 sb->s_id, function, line, grp); in __ext4_grp_locked_error()
987 EXT4_SB(sb)->s_mount_state |= EXT4_ERROR_FS; in __ext4_grp_locked_error()
988 if (!bdev_read_only(sb->s_bdev)) { in __ext4_grp_locked_error()
991 schedule_work(&EXT4_SB(sb)->s_error_work); in __ext4_grp_locked_error()
1025 &grp->bb_state); in ext4_mark_group_bitmap_corrupted()
1027 percpu_counter_sub(&sbi->s_freeclusters_counter, in ext4_mark_group_bitmap_corrupted()
1028 grp->bb_free); in ext4_mark_group_bitmap_corrupted()
1033 &grp->bb_state); in ext4_mark_group_bitmap_corrupted()
1038 percpu_counter_sub(&sbi->s_freeinodes_counter, in ext4_mark_group_bitmap_corrupted()
1046 struct ext4_super_block *es = EXT4_SB(sb)->s_es; in ext4_update_dynamic_rev() local
1048 if (le32_to_cpu(es->s_rev_level) > EXT4_GOOD_OLD_REV) in ext4_update_dynamic_rev()
1056 es->s_first_ino = cpu_to_le32(EXT4_GOOD_OLD_FIRST_INO); in ext4_update_dynamic_rev()
1057 es->s_inode_size = cpu_to_le16(EXT4_GOOD_OLD_INODE_SIZE); in ext4_update_dynamic_rev()
1058 es->s_rev_level = cpu_to_le32(EXT4_DYNAMIC_REV); in ext4_update_dynamic_rev()
1059 /* leave es->s_feature_*compat flags alone */ in ext4_update_dynamic_rev()
1060 /* es->s_uuid will be set by e2fsck if empty */ in ext4_update_dynamic_rev()
1083 "failed to open journal device unknown-block(%u,%u) %ld", in ext4_blkdev_get()
1099 bdev = sbi->s_journal_bdev; in ext4_blkdev_remove()
1103 * floating about in memory - the physical journal device may in ext4_blkdev_remove()
1104 * hotswapped, and it breaks the `ro-after' testing code. in ext4_blkdev_remove()
1108 sbi->s_journal_bdev = NULL; in ext4_blkdev_remove()
1114 return &list_entry(l, struct ext4_inode_info, i_orphan)->vfs_inode; in orphan_list_entry()
1122 le32_to_cpu(sbi->s_es->s_last_orphan)); in dump_orphan_list()
1125 list_for_each(l, &sbi->s_orphan) { in dump_orphan_list()
1129 inode->i_sb->s_id, inode->i_ino, inode, in dump_orphan_list()
1130 inode->i_mode, inode->i_nlink, in dump_orphan_list()
1155 return rcu_dereference_protected(sbi->s_qf_names[type], in get_qf_name()
1156 lockdep_is_held(&sb->s_umount)); in get_qf_name()
1167 struct ext4_super_block *es = sbi->s_es; in ext4_put_super() local
1176 * path which could have sbi->s_journal->j_task as NULL in ext4_put_super()
1177 * Unregister sysfs before flush sbi->s_error_work. in ext4_put_super()
1187 flush_work(&sbi->s_error_work); in ext4_put_super()
1188 destroy_workqueue(sbi->rsv_conversion_wq); in ext4_put_super()
1190 if (sbi->s_journal) { in ext4_put_super()
1191 aborted = is_journal_aborted(sbi->s_journal); in ext4_put_super()
1192 err = jbd2_journal_destroy(sbi->s_journal); in ext4_put_super()
1193 sbi->s_journal = NULL; in ext4_put_super()
1195 ext4_abort(sb, -err, "Couldn't clean up the journal"); in ext4_put_super()
1200 del_timer_sync(&sbi->s_err_report); in ext4_put_super()
1207 es->s_state = cpu_to_le16(sbi->s_mount_state); in ext4_put_super()
1213 group_desc = rcu_dereference(sbi->s_group_desc); in ext4_put_super()
1214 for (i = 0; i < sbi->s_gdb_count; i++) in ext4_put_super()
1217 flex_groups = rcu_dereference(sbi->s_flex_groups); in ext4_put_super()
1219 for (i = 0; i < sbi->s_flex_groups_allocated; i++) in ext4_put_super()
1224 percpu_counter_destroy(&sbi->s_freeclusters_counter); in ext4_put_super()
1225 percpu_counter_destroy(&sbi->s_freeinodes_counter); in ext4_put_super()
1226 percpu_counter_destroy(&sbi->s_dirs_counter); in ext4_put_super()
1227 percpu_counter_destroy(&sbi->s_dirtyclusters_counter); in ext4_put_super()
1228 percpu_counter_destroy(&sbi->s_sra_exceeded_retry_limit); in ext4_put_super()
1229 percpu_free_rwsem(&sbi->s_writepages_rwsem); in ext4_put_super()
1235 /* Debugging code just in case the in-memory inode orphan list in ext4_put_super()
1236 * isn't empty. The on-disk one can be non-empty if we've in ext4_put_super()
1238 * in-memory list had better be clean by this point. */ in ext4_put_super()
1239 if (!list_empty(&sbi->s_orphan)) in ext4_put_super()
1241 J_ASSERT(list_empty(&sbi->s_orphan)); in ext4_put_super()
1243 sync_blockdev(sb->s_bdev); in ext4_put_super()
1244 invalidate_bdev(sb->s_bdev); in ext4_put_super()
1245 if (sbi->s_journal_bdev && sbi->s_journal_bdev != sb->s_bdev) { in ext4_put_super()
1246 sync_blockdev(sbi->s_journal_bdev); in ext4_put_super()
1250 ext4_xattr_destroy_cache(sbi->s_ea_inode_cache); in ext4_put_super()
1251 sbi->s_ea_inode_cache = NULL; in ext4_put_super()
1253 ext4_xattr_destroy_cache(sbi->s_ea_block_cache); in ext4_put_super()
1254 sbi->s_ea_block_cache = NULL; in ext4_put_super()
1258 brelse(sbi->s_sbh); in ext4_put_super()
1259 sb->s_fs_info = NULL; in ext4_put_super()
1264 kobject_put(&sbi->s_kobj); in ext4_put_super()
1265 wait_for_completion(&sbi->s_kobj_unregister); in ext4_put_super()
1266 if (sbi->s_chksum_driver) in ext4_put_super()
1267 crypto_free_shash(sbi->s_chksum_driver); in ext4_put_super()
1268 kfree(sbi->s_blockgroup_lock); in ext4_put_super()
1269 fs_put_dax(sbi->s_daxdev); in ext4_put_super()
1270 fscrypt_free_dummy_policy(&sbi->s_dummy_enc_policy); in ext4_put_super()
1272 utf8_unload(sb->s_encoding); in ext4_put_super()
1290 inode_set_iversion(&ei->vfs_inode, 1); in ext4_alloc_inode()
1291 ei->i_flags = 0; in ext4_alloc_inode()
1292 spin_lock_init(&ei->i_raw_lock); in ext4_alloc_inode()
1293 INIT_LIST_HEAD(&ei->i_prealloc_list); in ext4_alloc_inode()
1294 atomic_set(&ei->i_prealloc_active, 0); in ext4_alloc_inode()
1295 spin_lock_init(&ei->i_prealloc_lock); in ext4_alloc_inode()
1296 ext4_es_init_tree(&ei->i_es_tree); in ext4_alloc_inode()
1297 rwlock_init(&ei->i_es_lock); in ext4_alloc_inode()
1298 INIT_LIST_HEAD(&ei->i_es_list); in ext4_alloc_inode()
1299 ei->i_es_all_nr = 0; in ext4_alloc_inode()
1300 ei->i_es_shk_nr = 0; in ext4_alloc_inode()
1301 ei->i_es_shrink_lblk = 0; in ext4_alloc_inode()
1302 ei->i_reserved_data_blocks = 0; in ext4_alloc_inode()
1303 spin_lock_init(&(ei->i_block_reservation_lock)); in ext4_alloc_inode()
1304 ext4_init_pending_tree(&ei->i_pending_tree); in ext4_alloc_inode()
1306 ei->i_reserved_quota = 0; in ext4_alloc_inode()
1307 memset(&ei->i_dquot, 0, sizeof(ei->i_dquot)); in ext4_alloc_inode()
1309 ei->jinode = NULL; in ext4_alloc_inode()
1310 INIT_LIST_HEAD(&ei->i_rsv_conversion_list); in ext4_alloc_inode()
1311 spin_lock_init(&ei->i_completed_io_lock); in ext4_alloc_inode()
1312 ei->i_sync_tid = 0; in ext4_alloc_inode()
1313 ei->i_datasync_tid = 0; in ext4_alloc_inode()
1314 atomic_set(&ei->i_unwritten, 0); in ext4_alloc_inode()
1315 INIT_WORK(&ei->i_rsv_conversion_work, ext4_end_io_rsv_work); in ext4_alloc_inode()
1316 ext4_fc_init_inode(&ei->vfs_inode); in ext4_alloc_inode()
1317 mutex_init(&ei->i_fc_lock); in ext4_alloc_inode()
1318 return &ei->vfs_inode; in ext4_alloc_inode()
1335 if (!list_empty(&(EXT4_I(inode)->i_fc_list))) { in ext4_free_in_core_inode()
1337 __func__, inode->i_ino); in ext4_free_in_core_inode()
1344 if (!list_empty(&(EXT4_I(inode)->i_orphan))) { in ext4_destroy_inode()
1345 ext4_msg(inode->i_sb, KERN_ERR, in ext4_destroy_inode()
1347 inode->i_ino, EXT4_I(inode)); in ext4_destroy_inode()
1354 if (EXT4_I(inode)->i_reserved_data_blocks) in ext4_destroy_inode()
1355 ext4_msg(inode->i_sb, KERN_ERR, in ext4_destroy_inode()
1357 inode->i_ino, EXT4_I(inode), in ext4_destroy_inode()
1358 EXT4_I(inode)->i_reserved_data_blocks); in ext4_destroy_inode()
1365 INIT_LIST_HEAD(&ei->i_orphan); in init_once()
1366 init_rwsem(&ei->xattr_sem); in init_once()
1367 init_rwsem(&ei->i_data_sem); in init_once()
1368 init_rwsem(&ei->i_mmap_sem); in init_once()
1369 inode_init_once(&ei->vfs_inode); in init_once()
1370 ext4_fc_init_inode(&ei->vfs_inode); in init_once()
1383 return -ENOMEM; in init_inodecache()
1405 if (EXT4_I(inode)->jinode) { in ext4_clear_inode()
1407 EXT4_I(inode)->jinode); in ext4_clear_inode()
1408 jbd2_free_inode(EXT4_I(inode)->jinode); in ext4_clear_inode()
1409 EXT4_I(inode)->jinode = NULL; in ext4_clear_inode()
1427 if (generation && inode->i_generation != generation) { in ext4_nfs_get_inode()
1429 return ERR_PTR(-ESTALE); in ext4_nfs_get_inode()
1478 if (inode->i_ino == EXT4_ROOT_INO) in ext4_set_context()
1479 return -EPERM; in ext4_set_context()
1482 return -EINVAL; in ext4_set_context()
1485 return -EOPNOTSUPP; in ext4_set_context()
1509 * Update inode->i_flags - S_ENCRYPTED will be enabled, in ext4_set_context()
1536 * Update inode->i_flags - S_ENCRYPTED will be enabled, in ext4_set_context()
1546 if (res == -ENOSPC && ext4_should_retry_alloc(inode->i_sb, &retries)) in ext4_set_context()
1555 return EXT4_SB(sb)->s_dummy_enc_policy.policy; in ext4_get_dummy_policy()
1566 *ino_bits_ret = 8 * sizeof(EXT4_SB(sb)->s_es->s_inodes_count); in ext4_get_ino_and_lblk_bits()
1604 return EXT4_I(inode)->i_dquot; in ext4_get_dquots()
1704 {Opt_err_ro, "errors=remount-ro"},
1807 printk(KERN_ERR "EXT4-fs: Invalid sb specification: %s\n", in get_sb_block()
1821 "Contact linux-ext4@vger.kernel.org if you think we should keep it.\n";
1828 int ret = -1; in set_qf_name()
1834 return -1; in set_qf_name()
1845 return -1; in set_qf_name()
1861 rcu_assign_pointer(sbi->s_qf_names[qtype], qname); in set_qf_name()
1878 return -1; in clear_qf_name()
1880 rcu_assign_pointer(sbi->s_qf_names[qtype], NULL); in clear_qf_name()
2025 static int ext4_sb_read_encoding(const struct ext4_super_block *es, in ext4_sb_read_encoding() argument
2029 __u16 magic = le16_to_cpu(es->s_encoding); in ext4_sb_read_encoding()
2037 return -EINVAL; in ext4_sb_read_encoding()
2040 *flags = le16_to_cpu(es->s_encoding_flags); in ext4_sb_read_encoding()
2058 return -1; in ext4_set_test_dummy_encryption()
2067 if (is_remount && !sbi->s_dummy_enc_policy.policy) { in ext4_set_test_dummy_encryption()
2070 return -1; in ext4_set_test_dummy_encryption()
2072 err = fscrypt_set_test_dummy_encryption(sb, arg->from, in ext4_set_test_dummy_encryption()
2073 &sbi->s_dummy_enc_policy); in ext4_set_test_dummy_encryption()
2075 if (err == -EEXIST) in ext4_set_test_dummy_encryption()
2078 else if (err == -EINVAL) in ext4_set_test_dummy_encryption()
2085 return -1; in ext4_set_test_dummy_encryption()
2092 return -1; in ext4_set_test_dummy_encryption()
2131 sb->s_flags |= SB_I_VERSION; in handle_mount_opt()
2134 sb->s_flags |= SB_LAZYTIME; in handle_mount_opt()
2137 sb->s_flags &= ~SB_LAZYTIME; in handle_mount_opt()
2141 sb->s_flags |= SB_INLINECRYPT; in handle_mount_opt()
2148 for (m = ext4_mount_opts; m->token != Opt_err; m++) in handle_mount_opt()
2149 if (token == m->token) in handle_mount_opt()
2152 if (m->token == Opt_err) { in handle_mount_opt()
2155 return -1; in handle_mount_opt()
2158 if ((m->flags & MOPT_NO_EXT2) && IS_EXT2_SB(sb)) { in handle_mount_opt()
2161 return -1; in handle_mount_opt()
2163 if ((m->flags & MOPT_NO_EXT3) && IS_EXT3_SB(sb)) { in handle_mount_opt()
2166 return -1; in handle_mount_opt()
2169 if (args->from && !(m->flags & MOPT_STRING) && match_int(args, &arg)) in handle_mount_opt()
2170 return -1; in handle_mount_opt()
2171 if (args->from && (m->flags & MOPT_GTE0) && (arg < 0)) in handle_mount_opt()
2172 return -1; in handle_mount_opt()
2173 if (m->flags & MOPT_EXPLICIT) { in handle_mount_opt()
2174 if (m->mount_opt & EXT4_MOUNT_DELALLOC) { in handle_mount_opt()
2176 } else if (m->mount_opt & EXT4_MOUNT_JOURNAL_CHECKSUM) { in handle_mount_opt()
2179 return -1; in handle_mount_opt()
2181 if (m->flags & MOPT_CLEAR_ERR) in handle_mount_opt()
2186 return -1; in handle_mount_opt()
2189 if (m->flags & MOPT_NOSUPPORT) { in handle_mount_opt()
2199 return -1; in handle_mount_opt()
2201 sbi->s_commit_interval = HZ * arg; in handle_mount_opt()
2205 (arg > (sbi->s_inode_size - EXT4_GOOD_OLD_INODE_SIZE))) { in handle_mount_opt()
2208 return -1; in handle_mount_opt()
2210 sbi->s_want_extra_isize = arg; in handle_mount_opt()
2212 sbi->s_max_batch_time = arg; in handle_mount_opt()
2214 sbi->s_min_batch_time = arg; in handle_mount_opt()
2218 "EXT4-fs: inode_readahead_blks must be " in handle_mount_opt()
2220 return -1; in handle_mount_opt()
2222 sbi->s_inode_readahead_blks = arg; in handle_mount_opt()
2225 if (!args->from) in handle_mount_opt()
2227 sbi->s_li_wait_mult = arg; in handle_mount_opt()
2229 sbi->s_max_dir_size_kb = arg; in handle_mount_opt()
2232 sbi->s_fc_debug_max_replay = arg; in handle_mount_opt()
2235 sbi->s_stripe = arg; in handle_mount_opt()
2240 return -1; in handle_mount_opt()
2242 sbi->s_resuid = uid; in handle_mount_opt()
2247 return -1; in handle_mount_opt()
2249 sbi->s_resgid = gid; in handle_mount_opt()
2254 return -1; in handle_mount_opt()
2266 return -1; in handle_mount_opt()
2272 return -1; in handle_mount_opt()
2280 return -1; in handle_mount_opt()
2284 if (!S_ISBLK(journal_inode->i_mode)) { in handle_mount_opt()
2289 return -1; in handle_mount_opt()
2292 *journal_devnum = new_encode_dev(journal_inode->i_rdev); in handle_mount_opt()
2298 " (must be 0-7)"); in handle_mount_opt()
2299 return -1; in handle_mount_opt()
2306 } else if (m->flags & MOPT_DATAJ) { in handle_mount_opt()
2308 if (!sbi->s_journal) in handle_mount_opt()
2310 else if (test_opt(sb, DATA_FLAGS) != m->mount_opt) { in handle_mount_opt()
2313 return -1; in handle_mount_opt()
2317 sbi->s_mount_opt |= m->mount_opt; in handle_mount_opt()
2320 } else if (m->flags & MOPT_QFMT) { in handle_mount_opt()
2322 sbi->s_jquota_fmt != m->mount_opt) { in handle_mount_opt()
2325 return -1; in handle_mount_opt()
2333 sbi->s_jquota_fmt = m->mount_opt; in handle_mount_opt()
2342 (!(sbi->s_mount_opt & EXT4_MOUNT_DAX_ALWAYS) || in handle_mount_opt()
2343 (sbi->s_mount_opt2 & EXT4_MOUNT2_DAX_NEVER))) { in handle_mount_opt()
2347 return -1; in handle_mount_opt()
2354 return -1; in handle_mount_opt()
2358 sbi->s_mount_opt |= EXT4_MOUNT_DAX_ALWAYS; in handle_mount_opt()
2359 sbi->s_mount_opt2 &= ~EXT4_MOUNT2_DAX_NEVER; in handle_mount_opt()
2363 (!(sbi->s_mount_opt2 & EXT4_MOUNT2_DAX_NEVER) || in handle_mount_opt()
2364 (sbi->s_mount_opt & EXT4_MOUNT_DAX_ALWAYS))) in handle_mount_opt()
2366 sbi->s_mount_opt2 |= EXT4_MOUNT2_DAX_NEVER; in handle_mount_opt()
2367 sbi->s_mount_opt &= ~EXT4_MOUNT_DAX_ALWAYS; in handle_mount_opt()
2371 ((sbi->s_mount_opt & EXT4_MOUNT_DAX_ALWAYS) || in handle_mount_opt()
2372 (sbi->s_mount_opt2 & EXT4_MOUNT2_DAX_NEVER) || in handle_mount_opt()
2373 !(sbi->s_mount_opt2 & EXT4_MOUNT2_DAX_INODE))) in handle_mount_opt()
2375 sbi->s_mount_opt &= ~EXT4_MOUNT_DAX_ALWAYS; in handle_mount_opt()
2376 sbi->s_mount_opt2 &= ~EXT4_MOUNT2_DAX_NEVER; in handle_mount_opt()
2378 sbi->s_mount_opt2 |= EXT4_MOUNT2_DAX_INODE; in handle_mount_opt()
2383 sbi->s_mount_opt2 |= EXT4_MOUNT2_DAX_NEVER; in handle_mount_opt()
2384 sbi->s_mount_opt &= ~EXT4_MOUNT_DAX_ALWAYS; in handle_mount_opt()
2385 return -1; in handle_mount_opt()
2388 sbi->s_mount_opt |= m->mount_opt; in handle_mount_opt()
2390 sbi->s_mount_opt &= ~m->mount_opt; in handle_mount_opt()
2392 if (!args->from) in handle_mount_opt()
2394 if (m->flags & MOPT_CLEAR) in handle_mount_opt()
2396 else if (unlikely(!(m->flags & MOPT_SET))) { in handle_mount_opt()
2400 return -1; in handle_mount_opt()
2402 if (m->flags & MOPT_2) { in handle_mount_opt()
2404 sbi->s_mount_opt2 |= m->mount_opt; in handle_mount_opt()
2406 sbi->s_mount_opt2 &= ~m->mount_opt; in handle_mount_opt()
2409 sbi->s_mount_opt |= m->mount_opt; in handle_mount_opt()
2411 sbi->s_mount_opt &= ~m->mount_opt; in handle_mount_opt()
2451 "Cannot enable project quota enforcement."); in parse_options()
2469 if (!sbi->s_jquota_fmt) { in parse_options()
2478 BLOCK_SIZE << le32_to_cpu(sbi->s_es->s_log_block_size); in parse_options()
2494 if (sbi->s_jquota_fmt) { in ext4_show_quota_options()
2497 switch (sbi->s_jquota_fmt) { in ext4_show_quota_options()
2512 usr_qf_name = rcu_dereference(sbi->s_qf_names[USRQUOTA]); in ext4_show_quota_options()
2513 grp_qf_name = rcu_dereference(sbi->s_qf_names[GRPQUOTA]); in ext4_show_quota_options()
2526 for (t = tokens; t->token != Opt_err; t++) in token2str()
2527 if (t->token == token && !strchr(t->pattern, '=')) in token2str()
2529 return t->pattern; in token2str()
2534 * - it's set to a non-default value OR
2535 * - if the per-sb default is different from the global default
2541 struct ext4_super_block *es = sbi->s_es; in _ext4_show_options() local
2542 int def_errors, def_mount_opt = sbi->s_def_mount_opt; in _ext4_show_options()
2549 if (sbi->s_sb_block != 1) in _ext4_show_options()
2550 SEQ_OPTS_PRINT("sb=%llu", sbi->s_sb_block); in _ext4_show_options()
2552 for (m = ext4_mount_opts; m->token != Opt_err; m++) { in _ext4_show_options()
2553 int want_set = m->flags & MOPT_SET; in _ext4_show_options()
2554 if (((m->flags & (MOPT_SET|MOPT_CLEAR)) == 0) || in _ext4_show_options()
2555 (m->flags & MOPT_CLEAR_ERR) || m->flags & MOPT_SKIP) in _ext4_show_options()
2557 if (!nodefs && !(m->mount_opt & (sbi->s_mount_opt ^ def_mount_opt))) in _ext4_show_options()
2560 (sbi->s_mount_opt & m->mount_opt) != m->mount_opt) || in _ext4_show_options()
2561 (!want_set && (sbi->s_mount_opt & m->mount_opt))) in _ext4_show_options()
2563 SEQ_OPTS_PRINT("%s", token2str(m->token)); in _ext4_show_options()
2566 if (nodefs || !uid_eq(sbi->s_resuid, make_kuid(&init_user_ns, EXT4_DEF_RESUID)) || in _ext4_show_options()
2567 le16_to_cpu(es->s_def_resuid) != EXT4_DEF_RESUID) in _ext4_show_options()
2569 from_kuid_munged(&init_user_ns, sbi->s_resuid)); in _ext4_show_options()
2570 if (nodefs || !gid_eq(sbi->s_resgid, make_kgid(&init_user_ns, EXT4_DEF_RESGID)) || in _ext4_show_options()
2571 le16_to_cpu(es->s_def_resgid) != EXT4_DEF_RESGID) in _ext4_show_options()
2573 from_kgid_munged(&init_user_ns, sbi->s_resgid)); in _ext4_show_options()
2574 def_errors = nodefs ? -1 : le16_to_cpu(es->s_errors); in _ext4_show_options()
2576 SEQ_OPTS_PUTS("errors=remount-ro"); in _ext4_show_options()
2581 if (nodefs || sbi->s_commit_interval != JBD2_DEFAULT_MAX_COMMIT_AGE*HZ) in _ext4_show_options()
2582 SEQ_OPTS_PRINT("commit=%lu", sbi->s_commit_interval / HZ); in _ext4_show_options()
2583 if (nodefs || sbi->s_min_batch_time != EXT4_DEF_MIN_BATCH_TIME) in _ext4_show_options()
2584 SEQ_OPTS_PRINT("min_batch_time=%u", sbi->s_min_batch_time); in _ext4_show_options()
2585 if (nodefs || sbi->s_max_batch_time != EXT4_DEF_MAX_BATCH_TIME) in _ext4_show_options()
2586 SEQ_OPTS_PRINT("max_batch_time=%u", sbi->s_max_batch_time); in _ext4_show_options()
2587 if (sb->s_flags & SB_I_VERSION) in _ext4_show_options()
2589 if (nodefs || sbi->s_stripe) in _ext4_show_options()
2590 SEQ_OPTS_PRINT("stripe=%lu", sbi->s_stripe); in _ext4_show_options()
2592 (sbi->s_mount_opt ^ def_mount_opt)) { in _ext4_show_options()
2601 sbi->s_inode_readahead_blks != EXT4_DEF_INODE_READAHEAD_BLKS) in _ext4_show_options()
2603 sbi->s_inode_readahead_blks); in _ext4_show_options()
2606 (sbi->s_li_wait_mult != EXT4_DEF_LI_WAIT_MULT))) in _ext4_show_options()
2607 SEQ_OPTS_PRINT("init_itable=%u", sbi->s_li_wait_mult); in _ext4_show_options()
2608 if (nodefs || sbi->s_max_dir_size_kb) in _ext4_show_options()
2609 SEQ_OPTS_PRINT("max_dir_size_kb=%u", sbi->s_max_dir_size_kb); in _ext4_show_options()
2615 if (sb->s_flags & SB_INLINECRYPT) in _ext4_show_options()
2634 return _ext4_show_options(seq, root->d_sb, 0); in ext4_show_options()
2639 struct super_block *sb = seq->private; in ext4_seq_options_show()
2648 static int ext4_setup_super(struct super_block *sb, struct ext4_super_block *es, in ext4_setup_super() argument
2654 if (le32_to_cpu(es->s_rev_level) > EXT4_MAX_SUPP_REV) { in ext4_setup_super()
2656 "forcing read-only mode"); in ext4_setup_super()
2657 err = -EROFS; in ext4_setup_super()
2662 if (!(sbi->s_mount_state & EXT4_VALID_FS)) in ext4_setup_super()
2665 else if (sbi->s_mount_state & EXT4_ERROR_FS) in ext4_setup_super()
2669 else if ((__s16) le16_to_cpu(es->s_max_mnt_count) > 0 && in ext4_setup_super()
2670 le16_to_cpu(es->s_mnt_count) >= in ext4_setup_super()
2671 (unsigned short) (__s16) le16_to_cpu(es->s_max_mnt_count)) in ext4_setup_super()
2675 else if (le32_to_cpu(es->s_checkinterval) && in ext4_setup_super()
2676 (ext4_get_tstamp(es, s_lastcheck) + in ext4_setup_super()
2677 le32_to_cpu(es->s_checkinterval) <= ktime_get_real_seconds())) in ext4_setup_super()
2681 if (!sbi->s_journal) in ext4_setup_super()
2682 es->s_state &= cpu_to_le16(~EXT4_VALID_FS); in ext4_setup_super()
2683 if (!(__s16) le16_to_cpu(es->s_max_mnt_count)) in ext4_setup_super()
2684 es->s_max_mnt_count = cpu_to_le16(EXT4_DFL_MAX_MNT_COUNT); in ext4_setup_super()
2685 le16_add_cpu(&es->s_mnt_count, 1); in ext4_setup_super()
2686 ext4_update_tstamp(es, s_mtime); in ext4_setup_super()
2687 if (sbi->s_journal) in ext4_setup_super()
2695 sb->s_blocksize, in ext4_setup_super()
2696 sbi->s_groups_count, in ext4_setup_super()
2699 sbi->s_mount_opt, sbi->s_mount_opt2); in ext4_setup_super()
2711 if (!sbi->s_log_groups_per_flex) in ext4_alloc_flex_bg_array()
2714 size = ext4_flex_group(sbi, ngroup - 1) + 1; in ext4_alloc_flex_bg_array()
2715 if (size <= sbi->s_flex_groups_allocated) in ext4_alloc_flex_bg_array()
2719 sizeof(*sbi->s_flex_groups)), GFP_KERNEL); in ext4_alloc_flex_bg_array()
2723 return -ENOMEM; in ext4_alloc_flex_bg_array()
2725 for (i = sbi->s_flex_groups_allocated; i < size; i++) { in ext4_alloc_flex_bg_array()
2730 for (j = sbi->s_flex_groups_allocated; j < i; j++) in ext4_alloc_flex_bg_array()
2735 return -ENOMEM; in ext4_alloc_flex_bg_array()
2739 old_groups = rcu_dereference(sbi->s_flex_groups); in ext4_alloc_flex_bg_array()
2742 (sbi->s_flex_groups_allocated * in ext4_alloc_flex_bg_array()
2745 rcu_assign_pointer(sbi->s_flex_groups, new_groups); in ext4_alloc_flex_bg_array()
2746 sbi->s_flex_groups_allocated = size; in ext4_alloc_flex_bg_array()
2760 sbi->s_log_groups_per_flex = sbi->s_es->s_log_groups_per_flex; in ext4_fill_flex_info()
2761 if (sbi->s_log_groups_per_flex < 1 || sbi->s_log_groups_per_flex > 31) { in ext4_fill_flex_info()
2762 sbi->s_log_groups_per_flex = 0; in ext4_fill_flex_info()
2766 err = ext4_alloc_flex_bg_array(sb, sbi->s_groups_count); in ext4_fill_flex_info()
2770 for (i = 0; i < sbi->s_groups_count; i++) { in ext4_fill_flex_info()
2775 atomic_add(ext4_free_inodes_count(sb, gdp), &fg->free_inodes); in ext4_fill_flex_info()
2777 &fg->free_clusters); in ext4_fill_flex_info()
2778 atomic_add(ext4_used_dirs_count(sb, gdp), &fg->used_dirs); in ext4_fill_flex_info()
2794 if (ext4_has_metadata_csum(sbi->s_sb)) { in ext4_group_desc_csum()
2799 csum32 = ext4_chksum(sbi, sbi->s_csum_seed, (__u8 *)&le_group, in ext4_group_desc_csum()
2805 if (offset < sbi->s_desc_size) in ext4_group_desc_csum()
2807 sbi->s_desc_size - offset); in ext4_group_desc_csum()
2817 crc = crc16(~0, sbi->s_es->s_uuid, sizeof(sbi->s_es->s_uuid)); in ext4_group_desc_csum()
2820 offset += sizeof(gdp->bg_checksum); /* skip checksum */ in ext4_group_desc_csum()
2822 if (ext4_has_feature_64bit(sb) && offset < sbi->s_desc_size) in ext4_group_desc_csum()
2824 sbi->s_desc_size - offset); in ext4_group_desc_csum()
2834 (gdp->bg_checksum != ext4_group_desc_csum(sb, block_group, gdp))) in ext4_group_desc_csum_verify()
2845 gdp->bg_checksum = ext4_group_desc_csum(sb, block_group, gdp); in ext4_group_desc_csum_set()
2848 /* Called at mount-time, super-block is locked */
2854 ext4_fsblk_t first_block = le32_to_cpu(sbi->s_es->s_first_data_block); in ext4_check_descriptors()
2861 ext4_group_t i, grp = sbi->s_groups_count; in ext4_check_descriptors()
2868 for (i = 0; i < sbi->s_groups_count; i++) { in ext4_check_descriptors()
2871 if (i == sbi->s_groups_count - 1 || flexbg_flag) in ext4_check_descriptors()
2872 last_block = ext4_blocks_count(sbi->s_es) - 1; in ext4_check_descriptors()
2875 (EXT4_BLOCKS_PER_GROUP(sb) - 1); in ext4_check_descriptors()
2877 if ((grp == sbi->s_groups_count) && in ext4_check_descriptors()
2878 !(gdp->bg_flags & cpu_to_le16(EXT4_BG_INODE_ZEROED))) in ext4_check_descriptors()
2942 inode_table + sbi->s_itb_per_group - 1 > last_block) { in ext4_check_descriptors()
2953 gdp)), le16_to_cpu(gdp->bg_checksum)); in ext4_check_descriptors()
2968 /* ext4_orphan_cleanup() walks a singly-linked list of inodes (starting at
2971 * inodes at recovery time (only with a read-write filesystem).
2979 * accidentally point at an in-use or already deleted inode. The worst that
2986 struct ext4_super_block *es) in ext4_orphan_cleanup() argument
2988 unsigned int s_flags = sb->s_flags; in ext4_orphan_cleanup()
2994 if (!es->s_last_orphan) { in ext4_orphan_cleanup()
2999 if (bdev_read_only(sb->s_bdev)) { in ext4_orphan_cleanup()
3012 if (EXT4_SB(sb)->s_mount_state & EXT4_ERROR_FS) { in ext4_orphan_cleanup()
3014 if (es->s_last_orphan && !(s_flags & SB_RDONLY)) { in ext4_orphan_cleanup()
3017 es->s_last_orphan = 0; in ext4_orphan_cleanup()
3025 sb->s_flags &= ~SB_RDONLY; in ext4_orphan_cleanup()
3029 * Turn on quotas which were not enabled for read-only mounts if in ext4_orphan_cleanup()
3044 if (EXT4_SB(sb)->s_qf_names[i]) { in ext4_orphan_cleanup()
3057 while (es->s_last_orphan) { in ext4_orphan_cleanup()
3064 if (EXT4_SB(sb)->s_mount_state & EXT4_ERROR_FS) { in ext4_orphan_cleanup()
3066 es->s_last_orphan = 0; in ext4_orphan_cleanup()
3070 inode = ext4_orphan_get(sb, le32_to_cpu(es->s_last_orphan)); in ext4_orphan_cleanup()
3072 es->s_last_orphan = 0; in ext4_orphan_cleanup()
3076 list_add(&EXT4_I(inode)->i_orphan, &EXT4_SB(sb)->s_orphan); in ext4_orphan_cleanup()
3078 if (inode->i_nlink) { in ext4_orphan_cleanup()
3082 __func__, inode->i_ino, inode->i_size); in ext4_orphan_cleanup()
3084 inode->i_ino, inode->i_size); in ext4_orphan_cleanup()
3086 truncate_inode_pages(inode->i_mapping, inode->i_size); in ext4_orphan_cleanup()
3090 * We need to clean up the in-core orphan list in ext4_orphan_cleanup()
3095 ext4_std_error(inode->i_sb, ret); in ext4_orphan_cleanup()
3103 __func__, inode->i_ino); in ext4_orphan_cleanup()
3105 inode->i_ino); in ext4_orphan_cleanup()
3123 if (sb_dqopt(sb)->files[i]) in ext4_orphan_cleanup()
3128 sb->s_flags = s_flags; /* Restore SB_RDONLY status */ in ext4_orphan_cleanup()
3133 * Resulting logical blkno at s_maxbytes must fit in our on-disk
3140 * covering maximum file size must fit into on-disk format containers as
3154 upper_limit = (1LL << 32) - 1; in ext4_max_size()
3157 upper_limit >>= (blkbits - 9); in ext4_max_size()
3162 * 32-bit extent-start container, ee_block. We lower the maxbytes in ext4_max_size()
3166 res = (1LL << 32) - 1; in ext4_max_size()
3169 /* Sanity check against vm- & vfs- imposed limits */ in ext4_max_size()
3177 * Maximal bitmap file size. There is a direct, and {,double-,triple-}indirect
3178 * block limit, and also a limit of (2^48 - 1) 512-byte sectors in i_blocks.
3188 * mapped file such that the file's total number of 512-byte sectors, in ext4_max_bitmap_size()
3189 * including data and all indirect blocks, does not exceed (2^48 - 1). in ext4_max_bitmap_size()
3192 * number of 512-byte sectors of the file. in ext4_max_bitmap_size()
3197 * represents total file blocks in 2^32 512-byte sectors == in ext4_max_bitmap_size()
3200 upper_limit = (1LL << 32) - 1; in ext4_max_bitmap_size()
3203 upper_limit >>= (bits - 9); in ext4_max_bitmap_size()
3212 upper_limit = (1LL << 48) - 1; in ext4_max_bitmap_size()
3219 meta_blocks += 1 + (1LL << (bits-2)); in ext4_max_bitmap_size()
3221 meta_blocks += 1 + (1LL << (bits-2)) + (1LL << (2*(bits-2))); in ext4_max_bitmap_size()
3223 upper_limit -= meta_blocks; in ext4_max_bitmap_size()
3226 res += 1LL << (bits-2); in ext4_max_bitmap_size()
3227 res += 1LL << (2*(bits-2)); in ext4_max_bitmap_size()
3228 res += 1LL << (3*(bits-2)); in ext4_max_bitmap_size()
3246 first_meta_bg = le32_to_cpu(sbi->s_es->s_first_meta_bg); in descriptor_loc()
3250 bg = sbi->s_desc_per_block * nr; in descriptor_loc()
3260 if (sb->s_blocksize == 1024 && nr == 0 && in descriptor_loc()
3261 le32_to_cpu(sbi->s_es->s_first_data_block) == 0) in descriptor_loc()
3280 unsigned long stride = le16_to_cpu(sbi->s_es->s_raid_stride); in ext4_get_stripe_size()
3282 le32_to_cpu(sbi->s_es->s_raid_stripe_width); in ext4_get_stripe_size()
3285 if (sbi->s_stripe && sbi->s_stripe <= sbi->s_blocks_per_group) in ext4_get_stripe_size()
3286 ret = sbi->s_stripe; in ext4_get_stripe_size()
3287 else if (stripe_width && stripe_width <= sbi->s_blocks_per_group) in ext4_get_stripe_size()
3289 else if (stride && stride <= sbi->s_blocks_per_group) in ext4_get_stripe_size()
3316 (le32_to_cpu(EXT4_SB(sb)->s_es->s_feature_incompat) & in ext4_feature_set_ok()
3334 ext4_msg(sb, KERN_INFO, "filesystem is read-only"); in ext4_feature_set_ok()
3335 sb->s_flags |= SB_RDONLY; in ext4_feature_set_ok()
3339 /* Check that feature set is OK for a read-write mount */ in ext4_feature_set_ok()
3343 (le32_to_cpu(EXT4_SB(sb)->s_es->s_feature_ro_compat) & in ext4_feature_set_ok()
3372 struct super_block *sb = sbi->s_sb; in print_daily_error_info()
3373 struct ext4_super_block *es = sbi->s_es; in print_daily_error_info() local
3375 if (es->s_error_count) in print_daily_error_info()
3378 le32_to_cpu(es->s_error_count)); in print_daily_error_info()
3379 if (es->s_first_error_time) { in print_daily_error_info()
3380 printk(KERN_NOTICE "EXT4-fs (%s): initial error at time %llu: %.*s:%d", in print_daily_error_info()
3381 sb->s_id, in print_daily_error_info()
3382 ext4_get_tstamp(es, s_first_error_time), in print_daily_error_info()
3383 (int) sizeof(es->s_first_error_func), in print_daily_error_info()
3384 es->s_first_error_func, in print_daily_error_info()
3385 le32_to_cpu(es->s_first_error_line)); in print_daily_error_info()
3386 if (es->s_first_error_ino) in print_daily_error_info()
3388 le32_to_cpu(es->s_first_error_ino)); in print_daily_error_info()
3389 if (es->s_first_error_block) in print_daily_error_info()
3391 le64_to_cpu(es->s_first_error_block)); in print_daily_error_info()
3394 if (es->s_last_error_time) { in print_daily_error_info()
3395 printk(KERN_NOTICE "EXT4-fs (%s): last error at time %llu: %.*s:%d", in print_daily_error_info()
3396 sb->s_id, in print_daily_error_info()
3397 ext4_get_tstamp(es, s_last_error_time), in print_daily_error_info()
3398 (int) sizeof(es->s_last_error_func), in print_daily_error_info()
3399 es->s_last_error_func, in print_daily_error_info()
3400 le32_to_cpu(es->s_last_error_line)); in print_daily_error_info()
3401 if (es->s_last_error_ino) in print_daily_error_info()
3403 le32_to_cpu(es->s_last_error_ino)); in print_daily_error_info()
3404 if (es->s_last_error_block) in print_daily_error_info()
3406 le64_to_cpu(es->s_last_error_block)); in print_daily_error_info()
3409 mod_timer(&sbi->s_err_report, jiffies + 24*60*60*HZ); /* Once a day */ in print_daily_error_info()
3416 struct super_block *sb = elr->lr_super; in ext4_run_li_request()
3417 ext4_group_t ngroups = EXT4_SB(sb)->s_groups_count; in ext4_run_li_request()
3418 ext4_group_t group = elr->lr_next_group; in ext4_run_li_request()
3423 if (elr->lr_mode == EXT4_LI_MODE_PREFETCH_BBITMAP) { in ext4_run_li_request()
3424 elr->lr_next_group = ext4_mb_prefetch(sb, group, in ext4_run_li_request()
3425 EXT4_SB(sb)->s_mb_prefetch, &prefetch_ios); in ext4_run_li_request()
3427 ext4_mb_prefetch_fini(sb, elr->lr_next_group, in ext4_run_li_request()
3429 trace_ext4_prefetch_bitmaps(sb, group, elr->lr_next_group, in ext4_run_li_request()
3431 if (group >= elr->lr_next_group) { in ext4_run_li_request()
3433 if (elr->lr_first_not_zeroed != ngroups && in ext4_run_li_request()
3435 elr->lr_next_group = elr->lr_first_not_zeroed; in ext4_run_li_request()
3436 elr->lr_mode = EXT4_LI_MODE_ITABLE; in ext4_run_li_request()
3450 if (!(gdp->bg_flags & cpu_to_le16(EXT4_BG_INODE_ZEROED))) in ext4_run_li_request()
3460 elr->lr_timeout ? 0 : 1); in ext4_run_li_request()
3462 if (elr->lr_timeout == 0) { in ext4_run_li_request()
3463 elr->lr_timeout = nsecs_to_jiffies((ktime_get_real_ns() - start_time) * in ext4_run_li_request()
3464 EXT4_SB(elr->lr_super)->s_li_wait_mult); in ext4_run_li_request()
3466 elr->lr_next_sched = jiffies + elr->lr_timeout; in ext4_run_li_request()
3467 elr->lr_next_group = group + 1; in ext4_run_li_request()
3481 list_del(&elr->lr_request); in ext4_remove_li_request()
3482 EXT4_SB(elr->lr_super)->s_li_request = NULL; in ext4_remove_li_request()
3494 mutex_lock(&ext4_li_info->li_list_mtx); in ext4_unregister_li_request()
3495 ext4_remove_li_request(EXT4_SB(sb)->s_li_request); in ext4_unregister_li_request()
3496 mutex_unlock(&ext4_li_info->li_list_mtx); in ext4_unregister_li_request()
3525 mutex_lock(&eli->li_list_mtx); in ext4_lazyinit_thread()
3526 if (list_empty(&eli->li_request_list)) { in ext4_lazyinit_thread()
3527 mutex_unlock(&eli->li_list_mtx); in ext4_lazyinit_thread()
3530 list_for_each_safe(pos, n, &eli->li_request_list) { in ext4_lazyinit_thread()
3536 if (time_before(jiffies, elr->lr_next_sched)) { in ext4_lazyinit_thread()
3537 if (time_before(elr->lr_next_sched, next_wakeup)) in ext4_lazyinit_thread()
3538 next_wakeup = elr->lr_next_sched; in ext4_lazyinit_thread()
3541 if (down_read_trylock(&elr->lr_super->s_umount)) { in ext4_lazyinit_thread()
3542 if (sb_start_write_trylock(elr->lr_super)) { in ext4_lazyinit_thread()
3545 * We hold sb->s_umount, sb can not in ext4_lazyinit_thread()
3549 mutex_unlock(&eli->li_list_mtx); in ext4_lazyinit_thread()
3551 sb_end_write(elr->lr_super); in ext4_lazyinit_thread()
3552 mutex_lock(&eli->li_list_mtx); in ext4_lazyinit_thread()
3553 n = pos->next; in ext4_lazyinit_thread()
3555 up_read((&elr->lr_super->s_umount)); in ext4_lazyinit_thread()
3563 elr->lr_next_sched = jiffies + in ext4_lazyinit_thread()
3567 if (time_before(elr->lr_next_sched, next_wakeup)) in ext4_lazyinit_thread()
3568 next_wakeup = elr->lr_next_sched; in ext4_lazyinit_thread()
3570 mutex_unlock(&eli->li_list_mtx); in ext4_lazyinit_thread()
3581 schedule_timeout_interruptible(next_wakeup - cur); in ext4_lazyinit_thread()
3599 mutex_lock(&eli->li_list_mtx); in ext4_lazyinit_thread()
3600 if (!list_empty(&eli->li_request_list)) { in ext4_lazyinit_thread()
3601 mutex_unlock(&eli->li_list_mtx); in ext4_lazyinit_thread()
3605 mutex_unlock(&eli->li_list_mtx); in ext4_lazyinit_thread()
3618 mutex_lock(&ext4_li_info->li_list_mtx); in ext4_clear_request_list()
3619 list_for_each_safe(pos, n, &ext4_li_info->li_request_list) { in ext4_clear_request_list()
3624 mutex_unlock(&ext4_li_info->li_list_mtx); in ext4_clear_request_list()
3636 printk(KERN_CRIT "EXT4-fs: error %d creating inode table " in ext4_run_lazyinit_thread()
3641 ext4_li_info->li_state |= EXT4_LAZYINIT_RUNNING; in ext4_run_lazyinit_thread()
3653 ext4_group_t group, ngroups = EXT4_SB(sb)->s_groups_count; in ext4_has_uninit_itable()
3664 if (!(gdp->bg_flags & cpu_to_le16(EXT4_BG_INODE_ZEROED))) in ext4_has_uninit_itable()
3677 return -ENOMEM; in ext4_li_info_new()
3679 INIT_LIST_HEAD(&eli->li_request_list); in ext4_li_info_new()
3680 mutex_init(&eli->li_list_mtx); in ext4_li_info_new()
3682 eli->li_state |= EXT4_LAZYINIT_QUIT; in ext4_li_info_new()
3698 elr->lr_super = sb; in ext4_li_request_new()
3699 elr->lr_first_not_zeroed = start; in ext4_li_request_new()
3701 elr->lr_mode = EXT4_LI_MODE_PREFETCH_BBITMAP; in ext4_li_request_new()
3703 elr->lr_mode = EXT4_LI_MODE_ITABLE; in ext4_li_request_new()
3704 elr->lr_next_group = start; in ext4_li_request_new()
3712 elr->lr_next_sched = jiffies + (prandom_u32() % in ext4_li_request_new()
3722 ext4_group_t ngroups = sbi->s_groups_count; in ext4_register_li_request()
3726 if (sbi->s_li_request != NULL) { in ext4_register_li_request()
3731 sbi->s_li_request->lr_timeout = 0; in ext4_register_li_request()
3742 ret = -ENOMEM; in ext4_register_li_request()
3752 mutex_lock(&ext4_li_info->li_list_mtx); in ext4_register_li_request()
3753 list_add(&elr->lr_request, &ext4_li_info->li_request_list); in ext4_register_li_request()
3754 mutex_unlock(&ext4_li_info->li_list_mtx); in ext4_register_li_request()
3756 sbi->s_li_request = elr; in ext4_register_li_request()
3764 if (!(ext4_li_info->li_state & EXT4_LAZYINIT_RUNNING)) { in ext4_register_li_request()
3808 jbd2_journal_clear_features(sbi->s_journal, in set_journal_csum_feature_set()
3813 ret = jbd2_journal_set_features(sbi->s_journal, in set_journal_csum_feature_set()
3818 ret = jbd2_journal_set_features(sbi->s_journal, in set_journal_csum_feature_set()
3821 jbd2_journal_clear_features(sbi->s_journal, 0, 0, in set_journal_csum_feature_set()
3824 jbd2_journal_clear_features(sbi->s_journal, 0, 0, in set_journal_csum_feature_set()
3839 * older file systems --- and if we come across with a bigalloc file
3841 * correct especially for very large cluster sizes --- but for newer
3844 * present (even for non-bigalloc file systems), we will use it.
3858 (has_super ? le16_to_cpu(sbi->s_es->s_reserved_gdt_blocks) : 0) + in count_overhead()
3859 sbi->s_itb_per_group + 2); in count_overhead()
3861 first_block = le32_to_cpu(sbi->s_es->s_first_data_block) + in count_overhead()
3863 last_block = first_block + EXT4_BLOCKS_PER_GROUP(sb) - 1; in count_overhead()
3868 ext4_set_bit(EXT4_B2C(sbi, b - first_block), buf); in count_overhead()
3873 ext4_set_bit(EXT4_B2C(sbi, b - first_block), buf); in count_overhead()
3877 if (b >= first_block && b + sbi->s_itb_per_group <= last_block) in count_overhead()
3878 for (j = 0; j < sbi->s_itb_per_group; j++, b++) { in count_overhead()
3879 int c = EXT4_B2C(sbi, b - first_block); in count_overhead()
3894 j = EXT4_BLOCKS_PER_GROUP(sb) - s; in count_overhead()
3897 for (; j > 0; j--) in count_overhead()
3902 return EXT4_CLUSTERS_PER_GROUP(sb) - in count_overhead()
3907 * Compute the overhead and stash it in sbi->s_overhead
3912 struct ext4_super_block *es = sbi->s_es; in ext4_calculate_overhead() local
3914 unsigned int j_blocks, j_inum = le32_to_cpu(es->s_journal_inum); in ext4_calculate_overhead()
3920 return -ENOMEM; in ext4_calculate_overhead()
3931 overhead = EXT4_B2C(sbi, le32_to_cpu(es->s_first_data_block)); in ext4_calculate_overhead()
3950 if (sbi->s_journal && !sbi->s_journal_bdev) in ext4_calculate_overhead()
3951 overhead += EXT4_NUM_B2C(sbi, sbi->s_journal->j_total_len); in ext4_calculate_overhead()
3952 else if (ext4_has_feature_journal(sb) && !sbi->s_journal && j_inum) { in ext4_calculate_overhead()
3953 /* j_inum for internal journal is non-zero */ in ext4_calculate_overhead()
3956 j_blocks = j_inode->i_size >> sb->s_blocksize_bits; in ext4_calculate_overhead()
3963 sbi->s_overhead = overhead; in ext4_calculate_overhead()
3990 resv_clusters = (ext4_blocks_count(sbi->s_es) >> in ext4_set_resv_clusters()
3991 sbi->s_cluster_bits); in ext4_set_resv_clusters()
3996 atomic64_set(&sbi->s_resv_clusters, resv_clusters); in ext4_set_resv_clusters()
4001 struct dax_device *dax_dev = fs_dax_get_by_bdev(sb->s_bdev); in ext4_fill_super()
4004 struct ext4_super_block *es = NULL; in ext4_fill_super() local
4015 int ret = -ENOMEM; in ext4_fill_super()
4028 sbi->s_daxdev = dax_dev; in ext4_fill_super()
4029 sbi->s_blockgroup_lock = in ext4_fill_super()
4031 if (!sbi->s_blockgroup_lock) in ext4_fill_super()
4034 sb->s_fs_info = sbi; in ext4_fill_super()
4035 sbi->s_sb = sb; in ext4_fill_super()
4036 sbi->s_inode_readahead_blks = EXT4_DEF_INODE_READAHEAD_BLKS; in ext4_fill_super()
4037 sbi->s_sb_block = sb_block; in ext4_fill_super()
4038 if (sb->s_bdev->bd_part) in ext4_fill_super()
4039 sbi->s_sectors_written_start = in ext4_fill_super()
4040 part_stat_read(sb->s_bdev->bd_part, sectors[STAT_WRITE]); in ext4_fill_super()
4043 strreplace(sb->s_id, '/', '!'); in ext4_fill_super()
4045 /* -EINVAL is default */ in ext4_fill_super()
4046 ret = -EINVAL; in ext4_fill_super()
4073 * some ext4 macro-instructions depend on its value in ext4_fill_super()
4075 es = (struct ext4_super_block *) (bh->b_data + offset); in ext4_fill_super()
4076 sbi->s_es = es; in ext4_fill_super()
4077 sb->s_magic = le16_to_cpu(es->s_magic); in ext4_fill_super()
4078 if (sb->s_magic != EXT4_SUPER_MAGIC) in ext4_fill_super()
4080 sbi->s_kbytes_written = le64_to_cpu(es->s_kbytes_written); in ext4_fill_super()
4089 if (!ext4_verify_csum_type(sb, es)) { in ext4_fill_super()
4097 sbi->s_chksum_driver = crypto_alloc_shash("crc32c", 0, 0); in ext4_fill_super()
4098 if (IS_ERR(sbi->s_chksum_driver)) { in ext4_fill_super()
4100 ret = PTR_ERR(sbi->s_chksum_driver); in ext4_fill_super()
4101 sbi->s_chksum_driver = NULL; in ext4_fill_super()
4106 if (!ext4_superblock_csum_verify(sb, es)) { in ext4_fill_super()
4110 ret = -EFSBADCRC; in ext4_fill_super()
4116 sbi->s_csum_seed = le32_to_cpu(es->s_checksum_seed); in ext4_fill_super()
4118 sbi->s_csum_seed = ext4_chksum(sbi, ~0, es->s_uuid, in ext4_fill_super()
4119 sizeof(es->s_uuid)); in ext4_fill_super()
4122 def_mount_opts = le32_to_cpu(es->s_default_mount_opts); in ext4_fill_super()
4137 /* don't forget to enable journal_csum when metadata_csum is enabled. */ in ext4_fill_super()
4148 if (le16_to_cpu(sbi->s_es->s_errors) == EXT4_ERRORS_PANIC) in ext4_fill_super()
4150 else if (le16_to_cpu(sbi->s_es->s_errors) == EXT4_ERRORS_CONTINUE) in ext4_fill_super()
4159 sbi->s_resuid = make_kuid(&init_user_ns, le16_to_cpu(es->s_def_resuid)); in ext4_fill_super()
4160 sbi->s_resgid = make_kgid(&init_user_ns, le16_to_cpu(es->s_def_resgid)); in ext4_fill_super()
4161 sbi->s_commit_interval = JBD2_DEFAULT_MAX_COMMIT_AGE * HZ; in ext4_fill_super()
4162 sbi->s_min_batch_time = EXT4_DEF_MIN_BATCH_TIME; in ext4_fill_super()
4163 sbi->s_max_batch_time = EXT4_DEF_MAX_BATCH_TIME; in ext4_fill_super()
4169 * enable delayed allocation by default in ext4_fill_super()
4170 * Use -o nodelalloc to turn it off in ext4_fill_super()
4180 sbi->s_li_wait_mult = EXT4_DEF_LI_WAIT_MULT; in ext4_fill_super()
4182 if (le32_to_cpu(es->s_log_block_size) > in ext4_fill_super()
4183 (EXT4_MAX_BLOCK_LOG_SIZE - EXT4_MIN_BLOCK_LOG_SIZE)) { in ext4_fill_super()
4186 le32_to_cpu(es->s_log_block_size)); in ext4_fill_super()
4189 if (le32_to_cpu(es->s_log_cluster_size) > in ext4_fill_super()
4190 (EXT4_MAX_CLUSTER_LOG_SIZE - EXT4_MIN_BLOCK_LOG_SIZE)) { in ext4_fill_super()
4193 le32_to_cpu(es->s_log_cluster_size)); in ext4_fill_super()
4197 blocksize = EXT4_MIN_BLOCK_SIZE << le32_to_cpu(es->s_log_block_size); in ext4_fill_super()
4202 if (le32_to_cpu(es->s_rev_level) == EXT4_GOOD_OLD_REV) { in ext4_fill_super()
4203 sbi->s_inode_size = EXT4_GOOD_OLD_INODE_SIZE; in ext4_fill_super()
4204 sbi->s_first_ino = EXT4_GOOD_OLD_FIRST_INO; in ext4_fill_super()
4206 sbi->s_inode_size = le16_to_cpu(es->s_inode_size); in ext4_fill_super()
4207 sbi->s_first_ino = le32_to_cpu(es->s_first_ino); in ext4_fill_super()
4208 if (sbi->s_first_ino < EXT4_GOOD_OLD_FIRST_INO) { in ext4_fill_super()
4210 sbi->s_first_ino); in ext4_fill_super()
4213 if ((sbi->s_inode_size < EXT4_GOOD_OLD_INODE_SIZE) || in ext4_fill_super()
4214 (!is_power_of_2(sbi->s_inode_size)) || in ext4_fill_super()
4215 (sbi->s_inode_size > blocksize)) { in ext4_fill_super()
4218 sbi->s_inode_size); in ext4_fill_super()
4228 if (sbi->s_inode_size >= offsetof(struct ext4_inode, i_atime_extra) + in ext4_fill_super()
4229 sizeof(((struct ext4_inode *)0)->i_atime_extra)) { in ext4_fill_super()
4230 sb->s_time_gran = 1; in ext4_fill_super()
4231 sb->s_time_max = EXT4_EXTRA_TIMESTAMP_MAX; in ext4_fill_super()
4233 sb->s_time_gran = NSEC_PER_SEC; in ext4_fill_super()
4234 sb->s_time_max = EXT4_NON_EXTRA_TIMESTAMP_MAX; in ext4_fill_super()
4236 sb->s_time_min = EXT4_TIMESTAMP_MIN; in ext4_fill_super()
4238 if (sbi->s_inode_size > EXT4_GOOD_OLD_INODE_SIZE) { in ext4_fill_super()
4239 sbi->s_want_extra_isize = sizeof(struct ext4_inode) - in ext4_fill_super()
4242 unsigned v, max = (sbi->s_inode_size - in ext4_fill_super()
4245 v = le16_to_cpu(es->s_want_extra_isize); in ext4_fill_super()
4251 if (sbi->s_want_extra_isize < v) in ext4_fill_super()
4252 sbi->s_want_extra_isize = v; in ext4_fill_super()
4254 v = le16_to_cpu(es->s_min_extra_isize); in ext4_fill_super()
4260 if (sbi->s_want_extra_isize < v) in ext4_fill_super()
4261 sbi->s_want_extra_isize = v; in ext4_fill_super()
4265 if (sbi->s_es->s_mount_opts[0]) { in ext4_fill_super()
4266 char *s_mount_opts = kstrndup(sbi->s_es->s_mount_opts, in ext4_fill_super()
4267 sizeof(sbi->s_es->s_mount_opts), in ext4_fill_super()
4279 sbi->s_def_mount_opt = sbi->s_mount_opt; in ext4_fill_super()
4285 if (ext4_has_feature_casefold(sb) && !sb->s_encoding) { in ext4_fill_super()
4296 if (ext4_sb_read_encoding(es, &encoding_info, in ext4_fill_super()
4303 encoding = utf8_load(encoding_info->version); in ext4_fill_super()
4306 "can't mount with superblock charset: %s-%s " in ext4_fill_super()
4308 encoding_info->name, encoding_info->version, in ext4_fill_super()
4313 "%s-%s with flags 0x%hx", encoding_info->name, in ext4_fill_super()
4314 encoding_info->version?:"\b", encoding_flags); in ext4_fill_super()
4316 sb->s_encoding = encoding; in ext4_fill_super()
4317 sb->s_encoding_flags = encoding_flags; in ext4_fill_super()
4322 …printk_once(KERN_WARNING "EXT4-fs: Warning: mounting with data=journal disables delayed allocation… in ext4_fill_super()
4344 sb->s_iflags |= SB_I_CGROUPWB; in ext4_fill_super()
4347 sb->s_flags = (sb->s_flags & ~SB_POSIXACL) | in ext4_fill_super()
4350 if (le32_to_cpu(es->s_rev_level) == EXT4_GOOD_OLD_REV && in ext4_fill_super()
4358 if (es->s_creator_os == cpu_to_le32(EXT4_OS_HURD)) { in ext4_fill_super()
4362 "The Hurd can't support 64-bit file systems"); in ext4_fill_super()
4419 if (le16_to_cpu(sbi->s_es->s_reserved_gdt_blocks) > (blocksize / 4)) { in ext4_fill_super()
4422 le16_to_cpu(sbi->s_es->s_reserved_gdt_blocks)); in ext4_fill_super()
4426 if (bdev_dax_supported(sb->s_bdev, blocksize)) in ext4_fill_super()
4427 set_bit(EXT4_FLAGS_BDEV_IS_DAX, &sbi->s_ext4_flags); in ext4_fill_super()
4429 if (sbi->s_mount_opt & EXT4_MOUNT_DAX_ALWAYS) { in ext4_fill_super()
4435 if (!test_bit(EXT4_FLAGS_BDEV_IS_DAX, &sbi->s_ext4_flags)) { in ext4_fill_super()
4442 if (ext4_has_feature_encrypt(sb) && es->s_encryption_level) { in ext4_fill_super()
4444 es->s_encryption_level); in ext4_fill_super()
4448 if (sb->s_blocksize != blocksize) { in ext4_fill_super()
4473 es = (struct ext4_super_block *)(bh->b_data + offset); in ext4_fill_super()
4474 sbi->s_es = es; in ext4_fill_super()
4475 if (es->s_magic != cpu_to_le16(EXT4_SUPER_MAGIC)) { in ext4_fill_super()
4483 sbi->s_bitmap_maxbytes = ext4_max_bitmap_size(sb->s_blocksize_bits, in ext4_fill_super()
4485 sb->s_maxbytes = ext4_max_size(sb->s_blocksize_bits, has_huge_files); in ext4_fill_super()
4487 sbi->s_desc_size = le16_to_cpu(es->s_desc_size); in ext4_fill_super()
4489 if (sbi->s_desc_size < EXT4_MIN_DESC_SIZE_64BIT || in ext4_fill_super()
4490 sbi->s_desc_size > EXT4_MAX_DESC_SIZE || in ext4_fill_super()
4491 !is_power_of_2(sbi->s_desc_size)) { in ext4_fill_super()
4494 sbi->s_desc_size); in ext4_fill_super()
4498 sbi->s_desc_size = EXT4_MIN_DESC_SIZE; in ext4_fill_super()
4500 sbi->s_blocks_per_group = le32_to_cpu(es->s_blocks_per_group); in ext4_fill_super()
4501 sbi->s_inodes_per_group = le32_to_cpu(es->s_inodes_per_group); in ext4_fill_super()
4503 sbi->s_inodes_per_block = blocksize / EXT4_INODE_SIZE(sb); in ext4_fill_super()
4504 if (sbi->s_inodes_per_block == 0) in ext4_fill_super()
4506 if (sbi->s_inodes_per_group < sbi->s_inodes_per_block || in ext4_fill_super()
4507 sbi->s_inodes_per_group > blocksize * 8) { in ext4_fill_super()
4509 sbi->s_inodes_per_group); in ext4_fill_super()
4512 sbi->s_itb_per_group = sbi->s_inodes_per_group / in ext4_fill_super()
4513 sbi->s_inodes_per_block; in ext4_fill_super()
4514 sbi->s_desc_per_block = blocksize / EXT4_DESC_SIZE(sb); in ext4_fill_super()
4515 sbi->s_sbh = bh; in ext4_fill_super()
4516 sbi->s_mount_state = le16_to_cpu(es->s_state) & ~EXT4_FC_REPLAY; in ext4_fill_super()
4517 sbi->s_addr_per_block_bits = ilog2(EXT4_ADDR_PER_BLOCK(sb)); in ext4_fill_super()
4518 sbi->s_desc_per_block_bits = ilog2(EXT4_DESC_PER_BLOCK(sb)); in ext4_fill_super()
4521 sbi->s_hash_seed[i] = le32_to_cpu(es->s_hash_seed[i]); in ext4_fill_super()
4522 sbi->s_def_hash_version = es->s_def_hash_version; in ext4_fill_super()
4524 i = le32_to_cpu(es->s_flags); in ext4_fill_super()
4526 sbi->s_hash_unsigned = 3; in ext4_fill_super()
4530 es->s_flags |= in ext4_fill_super()
4532 sbi->s_hash_unsigned = 3; in ext4_fill_super()
4535 es->s_flags |= in ext4_fill_super()
4542 clustersize = BLOCK_SIZE << le32_to_cpu(es->s_log_cluster_size); in ext4_fill_super()
4550 sbi->s_cluster_bits = le32_to_cpu(es->s_log_cluster_size) - in ext4_fill_super()
4551 le32_to_cpu(es->s_log_block_size); in ext4_fill_super()
4552 sbi->s_clusters_per_group = in ext4_fill_super()
4553 le32_to_cpu(es->s_clusters_per_group); in ext4_fill_super()
4554 if (sbi->s_clusters_per_group > blocksize * 8) { in ext4_fill_super()
4557 sbi->s_clusters_per_group); in ext4_fill_super()
4560 if (sbi->s_blocks_per_group != in ext4_fill_super()
4561 (sbi->s_clusters_per_group * (clustersize / blocksize))) { in ext4_fill_super()
4564 sbi->s_blocks_per_group, in ext4_fill_super()
4565 sbi->s_clusters_per_group); in ext4_fill_super()
4575 if (sbi->s_blocks_per_group > blocksize * 8) { in ext4_fill_super()
4578 sbi->s_blocks_per_group); in ext4_fill_super()
4581 sbi->s_clusters_per_group = sbi->s_blocks_per_group; in ext4_fill_super()
4582 sbi->s_cluster_bits = 0; in ext4_fill_super()
4584 sbi->s_cluster_ratio = clustersize / blocksize; in ext4_fill_super()
4587 if (sbi->s_blocks_per_group == clustersize << 3) in ext4_fill_super()
4594 err = generic_check_addressable(sb->s_blocksize_bits, in ext4_fill_super()
4595 ext4_blocks_count(es)); in ext4_fill_super()
4606 blocks_count = sb->s_bdev->bd_inode->i_size >> sb->s_blocksize_bits; in ext4_fill_super()
4607 if (blocks_count && ext4_blocks_count(es) > blocks_count) { in ext4_fill_super()
4610 ext4_blocks_count(es), blocks_count); in ext4_fill_super()
4618 if (le32_to_cpu(es->s_first_data_block) >= ext4_blocks_count(es)) { in ext4_fill_super()
4621 le32_to_cpu(es->s_first_data_block), in ext4_fill_super()
4622 ext4_blocks_count(es)); in ext4_fill_super()
4625 if ((es->s_first_data_block == 0) && (es->s_log_block_size == 0) && in ext4_fill_super()
4626 (sbi->s_cluster_ratio == 1)) { in ext4_fill_super()
4632 blocks_count = (ext4_blocks_count(es) - in ext4_fill_super()
4633 le32_to_cpu(es->s_first_data_block) + in ext4_fill_super()
4634 EXT4_BLOCKS_PER_GROUP(sb) - 1); in ext4_fill_super()
4636 if (blocks_count > ((uint64_t)1<<32) - EXT4_DESC_PER_BLOCK(sb)) { in ext4_fill_super()
4640 ext4_blocks_count(es), in ext4_fill_super()
4641 le32_to_cpu(es->s_first_data_block), in ext4_fill_super()
4645 sbi->s_groups_count = blocks_count; in ext4_fill_super()
4646 sbi->s_blockfile_groups = min_t(ext4_group_t, sbi->s_groups_count, in ext4_fill_super()
4648 if (((u64)sbi->s_groups_count * sbi->s_inodes_per_group) != in ext4_fill_super()
4649 le32_to_cpu(es->s_inodes_count)) { in ext4_fill_super()
4651 le32_to_cpu(es->s_inodes_count), in ext4_fill_super()
4652 ((u64)sbi->s_groups_count * sbi->s_inodes_per_group)); in ext4_fill_super()
4653 ret = -EINVAL; in ext4_fill_super()
4656 db_count = (sbi->s_groups_count + EXT4_DESC_PER_BLOCK(sb) - 1) / in ext4_fill_super()
4659 if (le32_to_cpu(es->s_first_meta_bg) > db_count) { in ext4_fill_super()
4663 le32_to_cpu(es->s_first_meta_bg), db_count); in ext4_fill_super()
4667 rcu_assign_pointer(sbi->s_group_desc, in ext4_fill_super()
4671 if (sbi->s_group_desc == NULL) { in ext4_fill_super()
4673 ret = -ENOMEM; in ext4_fill_super()
4677 bgl_lock_init(sbi->s_blockgroup_lock); in ext4_fill_super()
4679 /* Pre-read the descriptors into the buffer cache */ in ext4_fill_super()
4699 rcu_dereference(sbi->s_group_desc)[i] = bh; in ext4_fill_super()
4702 sbi->s_gdb_count = db_count; in ext4_fill_super()
4705 ret = -EFSCORRUPTED; in ext4_fill_super()
4709 timer_setup(&sbi->s_err_report, print_daily_error_info, 0); in ext4_fill_super()
4710 spin_lock_init(&sbi->s_error_lock); in ext4_fill_super()
4711 INIT_WORK(&sbi->s_error_work, flush_stashed_error_work); in ext4_fill_super()
4717 sbi->s_stripe = ext4_get_stripe_size(sbi); in ext4_fill_super()
4718 sbi->s_extent_max_zeroout_kb = 32; in ext4_fill_super()
4723 sb->s_op = &ext4_sops; in ext4_fill_super()
4724 sb->s_export_op = &ext4_export_ops; in ext4_fill_super()
4725 sb->s_xattr = ext4_xattr_handlers; in ext4_fill_super()
4727 sb->s_cop = &ext4_cryptops; in ext4_fill_super()
4730 sb->s_vop = &ext4_verityops; in ext4_fill_super()
4733 sb->dq_op = &ext4_quota_operations; in ext4_fill_super()
4735 sb->s_qcop = &dquot_quotactl_sysfile_ops; in ext4_fill_super()
4737 sb->s_qcop = &ext4_qctl_operations; in ext4_fill_super()
4738 sb->s_quota_types = QTYPE_MASK_USR | QTYPE_MASK_GRP | QTYPE_MASK_PRJ; in ext4_fill_super()
4740 memcpy(&sb->s_uuid, es->s_uuid, sizeof(es->s_uuid)); in ext4_fill_super()
4742 INIT_LIST_HEAD(&sbi->s_orphan); /* unlinked but open files */ in ext4_fill_super()
4743 mutex_init(&sbi->s_orphan_lock); in ext4_fill_super()
4746 atomic_set(&sbi->s_fc_subtid, 0); in ext4_fill_super()
4747 atomic_set(&sbi->s_fc_ineligible_updates, 0); in ext4_fill_super()
4748 INIT_LIST_HEAD(&sbi->s_fc_q[FC_Q_MAIN]); in ext4_fill_super()
4749 INIT_LIST_HEAD(&sbi->s_fc_q[FC_Q_STAGING]); in ext4_fill_super()
4750 INIT_LIST_HEAD(&sbi->s_fc_dentry_q[FC_Q_MAIN]); in ext4_fill_super()
4751 INIT_LIST_HEAD(&sbi->s_fc_dentry_q[FC_Q_STAGING]); in ext4_fill_super()
4752 sbi->s_fc_bytes = 0; in ext4_fill_super()
4755 spin_lock_init(&sbi->s_fc_lock); in ext4_fill_super()
4756 memset(&sbi->s_fc_stats, 0, sizeof(sbi->s_fc_stats)); in ext4_fill_super()
4757 sbi->s_fc_replay_state.fc_regions = NULL; in ext4_fill_super()
4758 sbi->s_fc_replay_state.fc_regions_size = 0; in ext4_fill_super()
4759 sbi->s_fc_replay_state.fc_regions_used = 0; in ext4_fill_super()
4760 sbi->s_fc_replay_state.fc_regions_valid = 0; in ext4_fill_super()
4761 sbi->s_fc_replay_state.fc_modified_inodes = NULL; in ext4_fill_super()
4762 sbi->s_fc_replay_state.fc_modified_inodes_size = 0; in ext4_fill_super()
4763 sbi->s_fc_replay_state.fc_modified_inodes_used = 0; in ext4_fill_super()
4765 sb->s_root = NULL; in ext4_fill_super()
4767 needs_recovery = (es->s_last_orphan != 0 || in ext4_fill_super()
4771 err = ext4_multi_mount_protect(sb, le64_to_cpu(es->s_mmp_block)); in ext4_fill_super()
4781 err = ext4_load_journal(sb, es, journal_devnum); in ext4_fill_super()
4787 "suppressed and not mounted read-only"); in ext4_fill_super()
4802 if (sbi->s_commit_interval != JBD2_DEFAULT_MAX_COMMIT_AGE*HZ) { in ext4_fill_super()
4805 sbi->s_commit_interval / HZ); in ext4_fill_super()
4809 (sbi->s_mount_opt ^ sbi->s_def_mount_opt)) { in ext4_fill_super()
4814 sbi->s_def_mount_opt &= ~EXT4_MOUNT_JOURNAL_CHECKSUM; in ext4_fill_super()
4818 sbi->s_journal = NULL; in ext4_fill_super()
4824 !jbd2_journal_set_features(EXT4_SB(sb)->s_journal, 0, 0, in ext4_fill_super()
4826 ext4_msg(sb, KERN_ERR, "Failed to set 64-bit journal feature"); in ext4_fill_super()
4837 !jbd2_journal_set_features(EXT4_SB(sb)->s_journal, 0, 0, in ext4_fill_super()
4853 (sbi->s_journal, 0, 0, JBD2_FEATURE_INCOMPAT_REVOKE)) { in ext4_fill_super()
4855 sbi->s_def_mount_opt |= EXT4_MOUNT_ORDERED_DATA; in ext4_fill_super()
4858 sbi->s_def_mount_opt |= EXT4_MOUNT_JOURNAL_DATA; in ext4_fill_super()
4865 (sbi->s_journal, 0, 0, JBD2_FEATURE_INCOMPAT_REVOKE)) { in ext4_fill_super()
4881 set_task_ioprio(sbi->s_journal->j_task, journal_ioprio); in ext4_fill_super()
4883 sbi->s_journal->j_submit_inode_data_buffers = in ext4_fill_super()
4885 sbi->s_journal->j_finish_inode_data_buffers = in ext4_fill_super()
4890 sbi->s_ea_block_cache = ext4_xattr_create_cache(); in ext4_fill_super()
4891 if (!sbi->s_ea_block_cache) { in ext4_fill_super()
4898 sbi->s_ea_inode_cache = ext4_xattr_create_cache(); in ext4_fill_super()
4899 if (!sbi->s_ea_inode_cache) { in ext4_fill_super()
4908 ext4_msg(sb, KERN_ERR, "Unsupported blocksize for fs-verity"); in ext4_fill_super()
4916 sbi->s_overhead = le32_to_cpu(es->s_overhead_clusters); in ext4_fill_super()
4918 if (sbi->s_overhead > ext4_blocks_count(es)) in ext4_fill_super()
4919 sbi->s_overhead = 0; in ext4_fill_super()
4926 sbi->s_overhead = 0; in ext4_fill_super()
4927 if (sbi->s_overhead == 0) { in ext4_fill_super()
4937 EXT4_SB(sb)->rsv_conversion_wq = in ext4_fill_super()
4938 alloc_workqueue("ext4-rsv-conversion", WQ_MEM_RECLAIM | WQ_UNBOUND, 1); in ext4_fill_super()
4939 if (!EXT4_SB(sb)->rsv_conversion_wq) { in ext4_fill_super()
4940 printk(KERN_ERR "EXT4-fs: failed to create workqueue\n"); in ext4_fill_super()
4941 ret = -ENOMEM; in ext4_fill_super()
4957 if (!S_ISDIR(root->i_mode) || !root->i_blocks || !root->i_size) { in ext4_fill_super()
4964 if (sb->s_encoding) in ext4_fill_super()
4965 sb->s_d_op = &ext4_dentry_ops; in ext4_fill_super()
4968 sb->s_root = d_make_root(root); in ext4_fill_super()
4969 if (!sb->s_root) { in ext4_fill_super()
4971 ret = -ENOMEM; in ext4_fill_super()
4975 ret = ext4_setup_super(sb, es, sb_rdonly(sb)); in ext4_fill_super()
4976 if (ret == -EROFS) { in ext4_fill_super()
4977 sb->s_flags |= SB_RDONLY; in ext4_fill_super()
5006 if (sbi->s_journal) in ext4_fill_super()
5007 sbi->s_journal->j_commit_callback = in ext4_fill_super()
5011 ext4_free_blocks_count_set(sbi->s_es, in ext4_fill_super()
5013 err = percpu_counter_init(&sbi->s_freeclusters_counter, block, in ext4_fill_super()
5017 sbi->s_es->s_free_inodes_count = cpu_to_le32(freei); in ext4_fill_super()
5018 err = percpu_counter_init(&sbi->s_freeinodes_counter, freei, in ext4_fill_super()
5030 err = percpu_counter_init(&sbi->s_dirs_counter, in ext4_fill_super()
5033 err = percpu_counter_init(&sbi->s_dirtyclusters_counter, 0, in ext4_fill_super()
5036 err = percpu_counter_init(&sbi->s_sra_exceeded_retry_limit, 0, in ext4_fill_super()
5039 err = percpu_init_rwsem(&sbi->s_writepages_rwsem); in ext4_fill_super()
5051 ret = -ENOMEM; in ext4_fill_super()
5064 /* Enable quota usage during mount. */ in ext4_fill_super()
5076 spin_lock_init(&sbi->s_bdev_wb_lock); in ext4_fill_super()
5077 errseq_check_and_advance(&sb->s_bdev->bd_inode->i_mapping->wb_err, in ext4_fill_super()
5078 &sbi->s_bdev_wb_err); in ext4_fill_super()
5079 sb->s_bdev->bd_super = sb; in ext4_fill_super()
5080 EXT4_SB(sb)->s_mount_state |= EXT4_ORPHAN_FS; in ext4_fill_super()
5081 ext4_orphan_cleanup(sb, es); in ext4_fill_super()
5082 EXT4_SB(sb)->s_mount_state &= ~EXT4_ORPHAN_FS; in ext4_fill_super()
5085 err = ext4_mark_recovery_complete(sb, es); in ext4_fill_super()
5089 if (EXT4_SB(sb)->s_journal) { in ext4_fill_super()
5100 struct request_queue *q = bdev_get_queue(sb->s_bdev); in ext4_fill_super()
5107 if (___ratelimit(&ext4_mount_msg_ratelimit, "EXT4-fs mount")) in ext4_fill_super()
5110 (int) sizeof(sbi->s_es->s_mount_opts), in ext4_fill_super()
5111 sbi->s_es->s_mount_opts, in ext4_fill_super()
5112 *sbi->s_es->s_mount_opts ? "; " : "", orig_data); in ext4_fill_super()
5114 if (es->s_error_count) in ext4_fill_super()
5115 mod_timer(&sbi->s_err_report, jiffies + 300*HZ); /* 5 minutes */ in ext4_fill_super()
5117 /* Enable message ratelimiting. Default is 10 messages per 5 secs. */ in ext4_fill_super()
5118 ratelimit_state_init(&sbi->s_err_ratelimit_state, 5 * HZ, 10); in ext4_fill_super()
5119 ratelimit_state_init(&sbi->s_warning_ratelimit_state, 5 * HZ, 10); in ext4_fill_super()
5120 ratelimit_state_init(&sbi->s_msg_ratelimit_state, 5 * HZ, 10); in ext4_fill_super()
5121 atomic_set(&sbi->s_warning_count, 0); in ext4_fill_super()
5122 atomic_set(&sbi->s_msg_count, 0); in ext4_fill_super()
5134 kobject_put(&sbi->s_kobj); in ext4_fill_super()
5140 flex_groups = rcu_dereference(sbi->s_flex_groups); in ext4_fill_super()
5142 for (i = 0; i < sbi->s_flex_groups_allocated; i++) in ext4_fill_super()
5147 percpu_counter_destroy(&sbi->s_freeclusters_counter); in ext4_fill_super()
5148 percpu_counter_destroy(&sbi->s_freeinodes_counter); in ext4_fill_super()
5149 percpu_counter_destroy(&sbi->s_dirs_counter); in ext4_fill_super()
5150 percpu_counter_destroy(&sbi->s_dirtyclusters_counter); in ext4_fill_super()
5151 percpu_counter_destroy(&sbi->s_sra_exceeded_retry_limit); in ext4_fill_super()
5152 percpu_free_rwsem(&sbi->s_writepages_rwsem); in ext4_fill_super()
5157 dput(sb->s_root); in ext4_fill_super()
5158 sb->s_root = NULL; in ext4_fill_super()
5161 if (EXT4_SB(sb)->rsv_conversion_wq) in ext4_fill_super()
5162 destroy_workqueue(EXT4_SB(sb)->rsv_conversion_wq); in ext4_fill_super()
5164 ext4_xattr_destroy_cache(sbi->s_ea_inode_cache); in ext4_fill_super()
5165 sbi->s_ea_inode_cache = NULL; in ext4_fill_super()
5167 ext4_xattr_destroy_cache(sbi->s_ea_block_cache); in ext4_fill_super()
5168 sbi->s_ea_block_cache = NULL; in ext4_fill_super()
5170 if (sbi->s_journal) { in ext4_fill_super()
5172 flush_work(&sbi->s_error_work); in ext4_fill_super()
5173 jbd2_journal_destroy(sbi->s_journal); in ext4_fill_super()
5174 sbi->s_journal = NULL; in ext4_fill_super()
5180 flush_work(&sbi->s_error_work); in ext4_fill_super()
5181 del_timer_sync(&sbi->s_err_report); in ext4_fill_super()
5185 group_desc = rcu_dereference(sbi->s_group_desc); in ext4_fill_super()
5191 if (sbi->s_chksum_driver) in ext4_fill_super()
5192 crypto_free_shash(sbi->s_chksum_driver); in ext4_fill_super()
5195 utf8_unload(sb->s_encoding); in ext4_fill_super()
5202 fscrypt_free_dummy_policy(&sbi->s_dummy_enc_policy); in ext4_fill_super()
5207 invalidate_bdev(sb->s_bdev); in ext4_fill_super()
5208 sb->s_fs_info = NULL; in ext4_fill_super()
5209 kfree(sbi->s_blockgroup_lock); in ext4_fill_super()
5218 * Setup any per-fs journal parameters now. We'll do this both on
5226 journal->j_commit_interval = sbi->s_commit_interval; in ext4_init_journal_params()
5227 journal->j_min_batch_time = sbi->s_min_batch_time; in ext4_init_journal_params()
5228 journal->j_max_batch_time = sbi->s_max_batch_time; in ext4_init_journal_params()
5231 write_lock(&journal->j_state_lock); in ext4_init_journal_params()
5233 journal->j_flags |= JBD2_BARRIER; in ext4_init_journal_params()
5235 journal->j_flags &= ~JBD2_BARRIER; in ext4_init_journal_params()
5237 journal->j_flags |= JBD2_ABORT_ON_SYNCDATA_ERR; in ext4_init_journal_params()
5239 journal->j_flags &= ~JBD2_ABORT_ON_SYNCDATA_ERR; in ext4_init_journal_params()
5240 write_unlock(&journal->j_state_lock); in ext4_init_journal_params()
5258 if (!journal_inode->i_nlink) { in ext4_get_journal_inode()
5266 journal_inode, journal_inode->i_size); in ext4_get_journal_inode()
5267 if (!S_ISREG(journal_inode->i_mode) || IS_ENCRYPTED(journal_inode)) { in ext4_get_journal_inode()
5294 journal->j_private = sb; in ext4_get_journal()
5309 struct ext4_super_block *es; in ext4_get_dev_journal() local
5319 blocksize = sb->s_blocksize; in ext4_get_dev_journal()
5336 es = (struct ext4_super_block *) (bh->b_data + offset); in ext4_get_dev_journal()
5337 if ((le16_to_cpu(es->s_magic) != EXT4_SUPER_MAGIC) || in ext4_get_dev_journal()
5338 !(le32_to_cpu(es->s_feature_incompat) & in ext4_get_dev_journal()
5346 if ((le32_to_cpu(es->s_feature_ro_compat) & in ext4_get_dev_journal()
5348 es->s_checksum != ext4_superblock_csum(sb, es)) { in ext4_get_dev_journal()
5355 if (memcmp(EXT4_SB(sb)->s_es->s_journal_uuid, es->s_uuid, 16)) { in ext4_get_dev_journal()
5361 len = ext4_blocks_count(es); in ext4_get_dev_journal()
5365 journal = jbd2_journal_init_dev(bdev, sb->s_bdev, in ext4_get_dev_journal()
5371 journal->j_private = sb; in ext4_get_dev_journal()
5372 if (ext4_read_bh_lock(journal->j_sb_buffer, REQ_META | REQ_PRIO, true)) { in ext4_get_dev_journal()
5376 if (be32_to_cpu(journal->j_superblock->s_nr_users) != 1) { in ext4_get_dev_journal()
5378 "user (unsupported) - %d", in ext4_get_dev_journal()
5379 be32_to_cpu(journal->j_superblock->s_nr_users)); in ext4_get_dev_journal()
5382 EXT4_SB(sb)->s_journal_bdev = bdev; in ext4_get_dev_journal()
5394 struct ext4_super_block *es, in ext4_load_journal() argument
5398 unsigned int journal_inum = le32_to_cpu(es->s_journal_inum); in ext4_load_journal()
5405 return -EFSCORRUPTED; in ext4_load_journal()
5408 journal_devnum != le32_to_cpu(es->s_journal_dev)) { in ext4_load_journal()
5413 journal_dev = new_decode_dev(le32_to_cpu(es->s_journal_dev)); in ext4_load_journal()
5418 return -EINVAL; in ext4_load_journal()
5424 return -EINVAL; in ext4_load_journal()
5428 return -EINVAL; in ext4_load_journal()
5431 journal_dev_ro = bdev_read_only(journal->j_dev); in ext4_load_journal()
5432 really_read_only = bdev_read_only(sb->s_bdev) | journal_dev_ro; in ext4_load_journal()
5436 "journal device read-only, try mounting with '-o ro'"); in ext4_load_journal()
5437 err = -EROFS; in ext4_load_journal()
5444 * can get read-write access to the device. in ext4_load_journal()
5454 err = -EROFS; in ext4_load_journal()
5462 if (!(journal->j_flags & JBD2_BARRIER)) in ext4_load_journal()
5470 memcpy(save, ((char *) es) + in ext4_load_journal()
5474 memcpy(((char *) es) + EXT4_S_ERR_START, in ext4_load_journal()
5484 EXT4_SB(sb)->s_journal = journal; in ext4_load_journal()
5485 err = ext4_clear_journal_err(sb, es); in ext4_load_journal()
5487 EXT4_SB(sb)->s_journal = NULL; in ext4_load_journal()
5493 journal_devnum != le32_to_cpu(es->s_journal_dev)) { in ext4_load_journal()
5494 es->s_journal_dev = cpu_to_le32(journal_devnum); in ext4_load_journal()
5507 /* Copy state of EXT4_SB(sb) into buffer for on-disk superblock */
5511 struct ext4_super_block *es = sbi->s_es; in ext4_update_super() local
5512 struct buffer_head *sbh = sbi->s_sbh; in ext4_update_super()
5516 * If the file system is mounted read-only, don't update the in ext4_update_super()
5521 * tick in localtime for Windows bug-for-bug compatibility, in ext4_update_super()
5525 if (!(sb->s_flags & SB_RDONLY)) in ext4_update_super()
5526 ext4_update_tstamp(es, s_wtime); in ext4_update_super()
5527 if (sb->s_bdev->bd_part) in ext4_update_super()
5528 es->s_kbytes_written = in ext4_update_super()
5529 cpu_to_le64(sbi->s_kbytes_written + in ext4_update_super()
5530 ((part_stat_read(sb->s_bdev->bd_part, in ext4_update_super()
5531 sectors[STAT_WRITE]) - in ext4_update_super()
5532 sbi->s_sectors_written_start) >> 1)); in ext4_update_super()
5534 es->s_kbytes_written = cpu_to_le64(sbi->s_kbytes_written); in ext4_update_super()
5535 if (percpu_counter_initialized(&sbi->s_freeclusters_counter)) in ext4_update_super()
5536 ext4_free_blocks_count_set(es, in ext4_update_super()
5538 &sbi->s_freeclusters_counter))); in ext4_update_super()
5539 if (percpu_counter_initialized(&sbi->s_freeinodes_counter)) in ext4_update_super()
5540 es->s_free_inodes_count = in ext4_update_super()
5542 &sbi->s_freeinodes_counter)); in ext4_update_super()
5543 /* Copy error information to the on-disk superblock */ in ext4_update_super()
5544 spin_lock(&sbi->s_error_lock); in ext4_update_super()
5545 if (sbi->s_add_error_count > 0) { in ext4_update_super()
5546 es->s_state |= cpu_to_le16(EXT4_ERROR_FS); in ext4_update_super()
5547 if (!es->s_first_error_time && !es->s_first_error_time_hi) { in ext4_update_super()
5548 __ext4_update_tstamp(&es->s_first_error_time, in ext4_update_super()
5549 &es->s_first_error_time_hi, in ext4_update_super()
5550 sbi->s_first_error_time); in ext4_update_super()
5551 strncpy(es->s_first_error_func, sbi->s_first_error_func, in ext4_update_super()
5552 sizeof(es->s_first_error_func)); in ext4_update_super()
5553 es->s_first_error_line = in ext4_update_super()
5554 cpu_to_le32(sbi->s_first_error_line); in ext4_update_super()
5555 es->s_first_error_ino = in ext4_update_super()
5556 cpu_to_le32(sbi->s_first_error_ino); in ext4_update_super()
5557 es->s_first_error_block = in ext4_update_super()
5558 cpu_to_le64(sbi->s_first_error_block); in ext4_update_super()
5559 es->s_first_error_errcode = in ext4_update_super()
5560 ext4_errno_to_code(sbi->s_first_error_code); in ext4_update_super()
5562 __ext4_update_tstamp(&es->s_last_error_time, in ext4_update_super()
5563 &es->s_last_error_time_hi, in ext4_update_super()
5564 sbi->s_last_error_time); in ext4_update_super()
5565 strncpy(es->s_last_error_func, sbi->s_last_error_func, in ext4_update_super()
5566 sizeof(es->s_last_error_func)); in ext4_update_super()
5567 es->s_last_error_line = cpu_to_le32(sbi->s_last_error_line); in ext4_update_super()
5568 es->s_last_error_ino = cpu_to_le32(sbi->s_last_error_ino); in ext4_update_super()
5569 es->s_last_error_block = cpu_to_le64(sbi->s_last_error_block); in ext4_update_super()
5570 es->s_last_error_errcode = in ext4_update_super()
5571 ext4_errno_to_code(sbi->s_last_error_code); in ext4_update_super()
5576 if (!es->s_error_count) in ext4_update_super()
5577 mod_timer(&sbi->s_err_report, jiffies + 24*60*60*HZ); in ext4_update_super()
5578 le32_add_cpu(&es->s_error_count, sbi->s_add_error_count); in ext4_update_super()
5579 sbi->s_add_error_count = 0; in ext4_update_super()
5581 spin_unlock(&sbi->s_error_lock); in ext4_update_super()
5589 struct buffer_head *sbh = EXT4_SB(sb)->s_sbh; in ext4_commit_super()
5593 return -EINVAL; in ext4_commit_super()
5595 return -ENODEV; in ext4_commit_super()
5632 struct ext4_super_block *es) in ext4_mark_recovery_complete() argument
5635 journal_t *journal = EXT4_SB(sb)->s_journal; in ext4_mark_recovery_complete()
5641 return -EFSCORRUPTED; in ext4_mark_recovery_complete()
5660 * If we are mounting (or read-write remounting) a filesystem whose journal
5665 struct ext4_super_block *es) in ext4_clear_journal_err() argument
5673 return -EFSCORRUPTED; in ext4_clear_journal_err()
5676 journal = EXT4_SB(sb)->s_journal; in ext4_clear_journal_err()
5692 EXT4_SB(sb)->s_mount_state |= EXT4_ERROR_FS; in ext4_clear_journal_err()
5693 es->s_state |= cpu_to_le16(EXT4_ERROR_FS); in ext4_clear_journal_err()
5713 journal = EXT4_SB(sb)->s_journal; in ext4_force_commit()
5728 flush_workqueue(sbi->rsv_conversion_wq); in ext4_sync_fs()
5730 * Writeback quota in non-journalled quota case - journalled quota has in ext4_sync_fs()
5733 dquot_writeback_dquots(sb, -1); in ext4_sync_fs()
5739 if (sbi->s_journal) { in ext4_sync_fs()
5740 target = jbd2_get_latest_transaction(sbi->s_journal); in ext4_sync_fs()
5741 if (wait && sbi->s_journal->j_flags & JBD2_BARRIER && in ext4_sync_fs()
5742 !jbd2_trans_will_send_data_barrier(sbi->s_journal, target)) in ext4_sync_fs()
5745 if (jbd2_journal_start_commit(sbi->s_journal, &target)) { in ext4_sync_fs()
5747 ret = jbd2_log_wait_commit(sbi->s_journal, in ext4_sync_fs()
5754 err = blkdev_issue_flush(sb->s_bdev, GFP_KERNEL); in ext4_sync_fs()
5763 * LVM calls this function before a (read-only) snapshot is created. This
5778 journal = EXT4_SB(sb)->s_journal; in ext4_freeze()
5813 if (EXT4_SB(sb)->s_journal) { in ext4_unfreeze()
5840 struct ext4_super_block *es; in ext4_remount() local
5855 return -ENOMEM; in ext4_remount()
5858 old_sb_flags = sb->s_flags; in ext4_remount()
5859 old_opts.s_mount_opt = sbi->s_mount_opt; in ext4_remount()
5860 old_opts.s_mount_opt2 = sbi->s_mount_opt2; in ext4_remount()
5861 old_opts.s_resuid = sbi->s_resuid; in ext4_remount()
5862 old_opts.s_resgid = sbi->s_resgid; in ext4_remount()
5863 old_opts.s_commit_interval = sbi->s_commit_interval; in ext4_remount()
5864 old_opts.s_min_batch_time = sbi->s_min_batch_time; in ext4_remount()
5865 old_opts.s_max_batch_time = sbi->s_max_batch_time; in ext4_remount()
5867 old_opts.s_jquota_fmt = sbi->s_jquota_fmt; in ext4_remount()
5869 if (sbi->s_qf_names[i]) { in ext4_remount()
5877 return -ENOMEM; in ext4_remount()
5882 if (sbi->s_journal && sbi->s_journal->j_task->io_context) in ext4_remount()
5883 journal_ioprio = sbi->s_journal->j_task->io_context->ioprio; in ext4_remount()
5891 sb->s_flags = (sb->s_flags & ~vfs_flags) | (*flags & vfs_flags); in ext4_remount()
5894 err = -EINVAL; in ext4_remount()
5902 sbi->s_mount_opt ^= EXT4_MOUNT_JOURNAL_CHECKSUM; in ext4_remount()
5909 err = -EINVAL; in ext4_remount()
5915 err = -EINVAL; in ext4_remount()
5922 err = -EINVAL; in ext4_remount()
5927 if ((sbi->s_mount_opt ^ old_opts.s_mount_opt) & EXT4_MOUNT_NO_MBCACHE) { in ext4_remount()
5928 ext4_msg(sb, KERN_ERR, "can't enable nombcache during remount"); in ext4_remount()
5929 err = -EINVAL; in ext4_remount()
5936 sb->s_flags = (sb->s_flags & ~SB_POSIXACL) | in ext4_remount()
5939 es = sbi->s_es; in ext4_remount()
5941 if (sbi->s_journal) { in ext4_remount()
5942 ext4_init_journal_params(sb, sbi->s_journal); in ext4_remount()
5943 set_task_ioprio(sbi->s_journal->j_task, journal_ioprio); in ext4_remount()
5947 flush_work(&sbi->s_error_work); in ext4_remount()
5951 err = -EROFS; in ext4_remount()
5959 err = dquot_suspend(sb, -1); in ext4_remount()
5967 sb->s_flags |= SB_RDONLY; in ext4_remount()
5974 if (!(es->s_state & cpu_to_le16(EXT4_VALID_FS)) && in ext4_remount()
5975 (sbi->s_mount_state & EXT4_VALID_FS)) in ext4_remount()
5976 es->s_state = cpu_to_le16(sbi->s_mount_state); in ext4_remount()
5978 if (sbi->s_journal) { in ext4_remount()
5980 * We let remount-ro finish even if marking fs in ext4_remount()
5983 ext4_mark_recovery_complete(sb, es); in ext4_remount()
5989 err = -EROFS; in ext4_remount()
5996 for (g = 0; g < sbi->s_groups_count; g++) { in ext4_remount()
6004 le16_to_cpu(gdp->bg_checksum)); in ext4_remount()
6005 err = -EFSBADCRC; in ext4_remount()
6015 if (es->s_last_orphan) { in ext4_remount()
6020 err = -EINVAL; in ext4_remount()
6025 * Mounting a RDONLY partition read-write, so reread in ext4_remount()
6030 if (sbi->s_journal) { in ext4_remount()
6031 err = ext4_clear_journal_err(sb, es); in ext4_remount()
6035 sbi->s_mount_state = (le16_to_cpu(es->s_state) & in ext4_remount()
6038 err = ext4_setup_super(sb, es, 0); in ext4_remount()
6042 sb->s_flags &= ~SB_RDONLY; in ext4_remount()
6045 le64_to_cpu(es->s_mmp_block)); in ext4_remount()
6060 if (test_opt(sb, BLOCK_VALIDITY) && !sbi->s_system_blks) { in ext4_remount()
6066 if (sbi->s_journal == NULL && !(old_sb_flags & SB_RDONLY)) { in ext4_remount()
6075 dquot_resume(sb, -1); in ext4_remount()
6086 if (!test_opt(sb, BLOCK_VALIDITY) && sbi->s_system_blks) in ext4_remount()
6109 *flags = (*flags & ~vfs_flags) | (sb->s_flags & vfs_flags); in ext4_remount()
6111 ext4_msg(sb, KERN_INFO, "re-mounted. Opts: %s", orig_data); in ext4_remount()
6118 * re-enable quota in ext4_remount()
6120 if ((sb->s_flags & SB_RDONLY) && !(old_sb_flags & SB_RDONLY) && in ext4_remount()
6122 dquot_resume(sb, -1); in ext4_remount()
6123 sb->s_flags = old_sb_flags; in ext4_remount()
6124 sbi->s_mount_opt = old_opts.s_mount_opt; in ext4_remount()
6125 sbi->s_mount_opt2 = old_opts.s_mount_opt2; in ext4_remount()
6126 sbi->s_resuid = old_opts.s_resuid; in ext4_remount()
6127 sbi->s_resgid = old_opts.s_resgid; in ext4_remount()
6128 sbi->s_commit_interval = old_opts.s_commit_interval; in ext4_remount()
6129 sbi->s_min_batch_time = old_opts.s_min_batch_time; in ext4_remount()
6130 sbi->s_max_batch_time = old_opts.s_max_batch_time; in ext4_remount()
6131 if (!test_opt(sb, BLOCK_VALIDITY) && sbi->s_system_blks) in ext4_remount()
6134 sbi->s_jquota_fmt = old_opts.s_jquota_fmt; in ext4_remount()
6137 rcu_assign_pointer(sbi->s_qf_names[i], old_opts.s_qf_names[i]); in ext4_remount()
6162 spin_lock(&dquot->dq_dqb_lock); in ext4_statfs_project()
6164 limit = min_not_zero(dquot->dq_dqb.dqb_bsoftlimit, in ext4_statfs_project()
6165 dquot->dq_dqb.dqb_bhardlimit); in ext4_statfs_project()
6166 limit >>= sb->s_blocksize_bits; in ext4_statfs_project()
6168 if (limit && buf->f_blocks > limit) { in ext4_statfs_project()
6169 curblock = (dquot->dq_dqb.dqb_curspace + in ext4_statfs_project()
6170 dquot->dq_dqb.dqb_rsvspace) >> sb->s_blocksize_bits; in ext4_statfs_project()
6171 buf->f_blocks = limit; in ext4_statfs_project()
6172 buf->f_bfree = buf->f_bavail = in ext4_statfs_project()
6173 (buf->f_blocks > curblock) ? in ext4_statfs_project()
6174 (buf->f_blocks - curblock) : 0; in ext4_statfs_project()
6177 limit = min_not_zero(dquot->dq_dqb.dqb_isoftlimit, in ext4_statfs_project()
6178 dquot->dq_dqb.dqb_ihardlimit); in ext4_statfs_project()
6179 if (limit && buf->f_files > limit) { in ext4_statfs_project()
6180 buf->f_files = limit; in ext4_statfs_project()
6181 buf->f_ffree = in ext4_statfs_project()
6182 (buf->f_files > dquot->dq_dqb.dqb_curinodes) ? in ext4_statfs_project()
6183 (buf->f_files - dquot->dq_dqb.dqb_curinodes) : 0; in ext4_statfs_project()
6186 spin_unlock(&dquot->dq_dqb_lock); in ext4_statfs_project()
6194 struct super_block *sb = dentry->d_sb; in ext4_statfs()
6196 struct ext4_super_block *es = sbi->s_es; in ext4_statfs() local
6200 resv_blocks = EXT4_C2B(sbi, atomic64_read(&sbi->s_resv_clusters)); in ext4_statfs()
6203 overhead = sbi->s_overhead; in ext4_statfs()
6205 buf->f_type = EXT4_SUPER_MAGIC; in ext4_statfs()
6206 buf->f_bsize = sb->s_blocksize; in ext4_statfs()
6207 buf->f_blocks = ext4_blocks_count(es) - EXT4_C2B(sbi, overhead); in ext4_statfs()
6208 bfree = percpu_counter_sum_positive(&sbi->s_freeclusters_counter) - in ext4_statfs()
6209 percpu_counter_sum_positive(&sbi->s_dirtyclusters_counter); in ext4_statfs()
6211 buf->f_bfree = EXT4_C2B(sbi, max_t(s64, bfree, 0)); in ext4_statfs()
6212 buf->f_bavail = buf->f_bfree - in ext4_statfs()
6213 (ext4_r_blocks_count(es) + resv_blocks); in ext4_statfs()
6214 if (buf->f_bfree < (ext4_r_blocks_count(es) + resv_blocks)) in ext4_statfs()
6215 buf->f_bavail = 0; in ext4_statfs()
6216 buf->f_files = le32_to_cpu(es->s_inodes_count); in ext4_statfs()
6217 buf->f_ffree = percpu_counter_sum_positive(&sbi->s_freeinodes_counter); in ext4_statfs()
6218 buf->f_namelen = EXT4_NAME_LEN; in ext4_statfs()
6219 fsid = le64_to_cpup((void *)es->s_uuid) ^ in ext4_statfs()
6220 le64_to_cpup((void *)es->s_uuid + sizeof(u64)); in ext4_statfs()
6221 buf->f_fsid = u64_to_fsid(fsid); in ext4_statfs()
6224 if (ext4_test_inode_flag(dentry->d_inode, EXT4_INODE_PROJINHERIT) && in ext4_statfs()
6226 ext4_statfs_project(sb, EXT4_I(dentry->d_inode)->i_projid, buf); in ext4_statfs()
6240 return sb_dqopt(dquot->dq_sb)->files[dquot->dq_id.type]; in dquot_to_inode()
6251 EXT4_QUOTA_TRANS_BLOCKS(dquot->dq_sb)); in ext4_write_dquot()
6267 EXT4_QUOTA_INIT_BLOCKS(dquot->dq_sb)); in ext4_acquire_dquot()
6283 EXT4_QUOTA_DEL_BLOCKS(dquot->dq_sb)); in ext4_release_dquot()
6298 struct super_block *sb = dquot->dq_sb; in ext4_mark_dquot_dirty()
6303 sbi->s_qf_names[USRQUOTA] || sbi->s_qf_names[GRPQUOTA]) { in ext4_mark_dquot_dirty()
6328 * Turn on quotas during mount time - we need to find
6334 EXT4_SB(sb)->s_jquota_fmt, type); in ext4_quota_on_mount()
6342 * *exactly* the same as the argument to init_rwsem() --- in in lockdep_set_quota_inode()
6343 * this case, in init_once() --- or lockdep gets unhappy in lockdep_set_quota_inode()
6348 lockdep_set_subclass(&ei->i_data_sem, subclass); in lockdep_set_quota_inode()
6360 return -EINVAL; in ext4_quota_on()
6363 if (path->dentry->d_sb != sb) in ext4_quota_on()
6364 return -EXDEV; in ext4_quota_on()
6367 if (IS_NOQUOTA(d_inode(path->dentry))) in ext4_quota_on()
6368 return -EBUSY; in ext4_quota_on()
6371 if (EXT4_SB(sb)->s_qf_names[type]) { in ext4_quota_on()
6373 if (path->dentry->d_parent != sb->s_root) in ext4_quota_on()
6377 sb_dqopt(sb)->flags |= DQUOT_NOLIST_DIRTY; in ext4_quota_on()
6383 sb_dqopt(sb)->flags &= ~DQUOT_NOLIST_DIRTY; in ext4_quota_on()
6390 if (EXT4_SB(sb)->s_journal && in ext4_quota_on()
6391 ext4_should_journal_data(d_inode(path->dentry))) { in ext4_quota_on()
6396 jbd2_journal_lock_updates(EXT4_SB(sb)->s_journal); in ext4_quota_on()
6397 err = jbd2_journal_flush(EXT4_SB(sb)->s_journal); in ext4_quota_on()
6398 jbd2_journal_unlock_updates(EXT4_SB(sb)->s_journal); in ext4_quota_on()
6403 lockdep_set_quota_inode(path->dentry->d_inode, I_DATA_SEM_QUOTA); in ext4_quota_on()
6406 struct inode *inode = d_inode(path->dentry); in ext4_quota_on()
6418 EXT4_I(inode)->i_flags |= EXT4_NOATIME_FL | EXT4_IMMUTABLE_FL; in ext4_quota_on()
6429 lockdep_set_quota_inode(path->dentry->d_inode, in ext4_quota_on()
6454 le32_to_cpu(EXT4_SB(sb)->s_es->s_usr_quota_inum), in ext4_quota_enable()
6455 le32_to_cpu(EXT4_SB(sb)->s_es->s_grp_quota_inum), in ext4_quota_enable()
6456 le32_to_cpu(EXT4_SB(sb)->s_es->s_prj_quota_inum) in ext4_quota_enable()
6462 return -EPERM; in ext4_quota_enable()
6467 return -EUCLEAN; in ext4_quota_enable()
6478 qf_inode->i_flags |= S_NOQUOTA; in ext4_quota_enable()
6488 /* Enable usage tracking for all quota types. */
6493 le32_to_cpu(EXT4_SB(sb)->s_es->s_usr_quota_inum), in ext4_enable_quotas()
6494 le32_to_cpu(EXT4_SB(sb)->s_es->s_grp_quota_inum), in ext4_enable_quotas()
6495 le32_to_cpu(EXT4_SB(sb)->s_es->s_prj_quota_inum) in ext4_enable_quotas()
6503 sb_dqopt(sb)->flags |= DQUOT_QUOTA_SYS_FILE | DQUOT_NOLIST_DIRTY; in ext4_enable_quotas()
6511 "Failed to enable quota tracking " in ext4_enable_quotas()
6515 for (type--; type >= 0; type--) { in ext4_enable_quotas()
6518 inode = sb_dqopt(sb)->files[type]; in ext4_enable_quotas()
6538 struct inode *inode = sb_dqopt(sb)->files[type]; in ext4_quota_off()
6565 EXT4_I(inode)->i_flags &= ~(EXT4_NOATIME_FL | EXT4_IMMUTABLE_FL); in ext4_quota_off()
6567 inode->i_mtime = inode->i_ctime = current_time(inode); in ext4_quota_off()
6580 /* Read data from quotafile - avoid pagecache and such because we cannot afford
6587 struct inode *inode = sb_dqopt(sb)->files[type]; in ext4_quota_read()
6589 int offset = off & (sb->s_blocksize - 1); in ext4_quota_read()
6598 len = i_size-off; in ext4_quota_read()
6601 tocopy = sb->s_blocksize - offset < toread ? in ext4_quota_read()
6602 sb->s_blocksize - offset : toread; in ext4_quota_read()
6609 memcpy(data, bh->b_data+offset, tocopy); in ext4_quota_read()
6612 toread -= tocopy; in ext4_quota_read()
6624 struct inode *inode = sb_dqopt(sb)->files[type]; in ext4_quota_write()
6626 int err = 0, err2 = 0, offset = off & (sb->s_blocksize - 1); in ext4_quota_write()
6635 return -EIO; in ext4_quota_write()
6641 if (sb->s_blocksize - offset < len) { in ext4_quota_write()
6645 return -EIO; in ext4_quota_write()
6652 } while (PTR_ERR(bh) == -ENOSPC && in ext4_quota_write()
6653 ext4_should_retry_alloc(inode->i_sb, &retries)); in ext4_quota_write()
6665 memcpy(bh->b_data+offset, data, len); in ext4_quota_write()
6666 flush_dcache_page(bh->b_page); in ext4_quota_write()
6671 if (inode->i_size < off + len) { in ext4_quota_write()
6673 EXT4_I(inode)->i_disksize = inode->i_size; in ext4_quota_write()
6694 "EXT4-fs: Unable to register as ext2 (%d)\n", err); in register_as_ext2()
6723 "EXT4-fs: Unable to register as ext3 (%d)\n", err); in register_as_ext3()
6764 /* Build-time check for flags consistency */ in ext4_init_fs()