0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020 #include <linux/module.h>
0021 #include <linux/string.h>
0022 #include <linux/fs.h>
0023 #include <linux/time.h>
0024 #include <linux/vmalloc.h>
0025 #include <linux/slab.h>
0026 #include <linux/init.h>
0027 #include <linux/blkdev.h>
0028 #include <linux/backing-dev.h>
0029 #include <linux/parser.h>
0030 #include <linux/buffer_head.h>
0031 #include <linux/exportfs.h>
0032 #include <linux/vfs.h>
0033 #include <linux/random.h>
0034 #include <linux/mount.h>
0035 #include <linux/namei.h>
0036 #include <linux/quotaops.h>
0037 #include <linux/seq_file.h>
0038 #include <linux/ctype.h>
0039 #include <linux/log2.h>
0040 #include <linux/crc16.h>
0041 #include <linux/dax.h>
0042 #include <linux/uaccess.h>
0043 #include <linux/iversion.h>
0044 #include <linux/unicode.h>
0045 #include <linux/part_stat.h>
0046 #include <linux/kthread.h>
0047 #include <linux/freezer.h>
0048 #include <linux/fsnotify.h>
0049 #include <linux/fs_context.h>
0050 #include <linux/fs_parser.h>
0051
0052 #include "ext4.h"
0053 #include "ext4_extents.h" /* Needed for trace points definition */
0054 #include "ext4_jbd2.h"
0055 #include "xattr.h"
0056 #include "acl.h"
0057 #include "mballoc.h"
0058 #include "fsmap.h"
0059
0060 #define CREATE_TRACE_POINTS
0061 #include <trace/events/ext4.h>
0062
0063 static struct ext4_lazy_init *ext4_li_info;
0064 static DEFINE_MUTEX(ext4_li_mtx);
0065 static struct ratelimit_state ext4_mount_msg_ratelimit;
0066
0067 static int ext4_load_journal(struct super_block *, struct ext4_super_block *,
0068 unsigned long journal_devnum);
0069 static int ext4_show_options(struct seq_file *seq, struct dentry *root);
0070 static void ext4_update_super(struct super_block *sb);
0071 static int ext4_commit_super(struct super_block *sb);
0072 static int ext4_mark_recovery_complete(struct super_block *sb,
0073 struct ext4_super_block *es);
0074 static int ext4_clear_journal_err(struct super_block *sb,
0075 struct ext4_super_block *es);
0076 static int ext4_sync_fs(struct super_block *sb, int wait);
0077 static int ext4_statfs(struct dentry *dentry, struct kstatfs *buf);
0078 static int ext4_unfreeze(struct super_block *sb);
0079 static int ext4_freeze(struct super_block *sb);
0080 static inline int ext2_feature_set_ok(struct super_block *sb);
0081 static inline int ext3_feature_set_ok(struct super_block *sb);
0082 static void ext4_destroy_lazyinit_thread(void);
0083 static void ext4_unregister_li_request(struct super_block *sb);
0084 static void ext4_clear_request_list(void);
0085 static struct inode *ext4_get_journal_inode(struct super_block *sb,
0086 unsigned int journal_inum);
0087 static int ext4_validate_options(struct fs_context *fc);
0088 static int ext4_check_opt_consistency(struct fs_context *fc,
0089 struct super_block *sb);
0090 static void ext4_apply_options(struct fs_context *fc, struct super_block *sb);
0091 static int ext4_parse_param(struct fs_context *fc, struct fs_parameter *param);
0092 static int ext4_get_tree(struct fs_context *fc);
0093 static int ext4_reconfigure(struct fs_context *fc);
0094 static void ext4_fc_free(struct fs_context *fc);
0095 static int ext4_init_fs_context(struct fs_context *fc);
0096 static const struct fs_parameter_spec ext4_param_specs[];
0097
0098
0099
0100
0101
0102
0103
0104
0105
0106
0107
0108
0109
0110
0111
0112
0113
0114
0115
0116
0117
0118
0119
0120
0121
0122
0123
0124 static const struct fs_context_operations ext4_context_ops = {
0125 .parse_param = ext4_parse_param,
0126 .get_tree = ext4_get_tree,
0127 .reconfigure = ext4_reconfigure,
0128 .free = ext4_fc_free,
0129 };
0130
0131
0132 #if !defined(CONFIG_EXT2_FS) && !defined(CONFIG_EXT2_FS_MODULE) && defined(CONFIG_EXT4_USE_FOR_EXT2)
0133 static struct file_system_type ext2_fs_type = {
0134 .owner = THIS_MODULE,
0135 .name = "ext2",
0136 .init_fs_context = ext4_init_fs_context,
0137 .parameters = ext4_param_specs,
0138 .kill_sb = kill_block_super,
0139 .fs_flags = FS_REQUIRES_DEV,
0140 };
0141 MODULE_ALIAS_FS("ext2");
0142 MODULE_ALIAS("ext2");
0143 #define IS_EXT2_SB(sb) ((sb)->s_bdev->bd_holder == &ext2_fs_type)
0144 #else
0145 #define IS_EXT2_SB(sb) (0)
0146 #endif
0147
0148
0149 static struct file_system_type ext3_fs_type = {
0150 .owner = THIS_MODULE,
0151 .name = "ext3",
0152 .init_fs_context = ext4_init_fs_context,
0153 .parameters = ext4_param_specs,
0154 .kill_sb = kill_block_super,
0155 .fs_flags = FS_REQUIRES_DEV,
0156 };
0157 MODULE_ALIAS_FS("ext3");
0158 MODULE_ALIAS("ext3");
0159 #define IS_EXT3_SB(sb) ((sb)->s_bdev->bd_holder == &ext3_fs_type)
0160
0161
0162 static inline void __ext4_read_bh(struct buffer_head *bh, blk_opf_t op_flags,
0163 bh_end_io_t *end_io)
0164 {
0165
0166
0167
0168
0169
0170 clear_buffer_verified(bh);
0171
0172 bh->b_end_io = end_io ? end_io : end_buffer_read_sync;
0173 get_bh(bh);
0174 submit_bh(REQ_OP_READ | op_flags, bh);
0175 }
0176
0177 void ext4_read_bh_nowait(struct buffer_head *bh, blk_opf_t op_flags,
0178 bh_end_io_t *end_io)
0179 {
0180 BUG_ON(!buffer_locked(bh));
0181
0182 if (ext4_buffer_uptodate(bh)) {
0183 unlock_buffer(bh);
0184 return;
0185 }
0186 __ext4_read_bh(bh, op_flags, end_io);
0187 }
0188
0189 int ext4_read_bh(struct buffer_head *bh, blk_opf_t op_flags, bh_end_io_t *end_io)
0190 {
0191 BUG_ON(!buffer_locked(bh));
0192
0193 if (ext4_buffer_uptodate(bh)) {
0194 unlock_buffer(bh);
0195 return 0;
0196 }
0197
0198 __ext4_read_bh(bh, op_flags, end_io);
0199
0200 wait_on_buffer(bh);
0201 if (buffer_uptodate(bh))
0202 return 0;
0203 return -EIO;
0204 }
0205
0206 int ext4_read_bh_lock(struct buffer_head *bh, blk_opf_t op_flags, bool wait)
0207 {
0208 if (trylock_buffer(bh)) {
0209 if (wait)
0210 return ext4_read_bh(bh, op_flags, NULL);
0211 ext4_read_bh_nowait(bh, op_flags, NULL);
0212 return 0;
0213 }
0214 if (wait) {
0215 wait_on_buffer(bh);
0216 if (buffer_uptodate(bh))
0217 return 0;
0218 return -EIO;
0219 }
0220 return 0;
0221 }
0222
0223
0224
0225
0226
0227
0228
0229 static struct buffer_head *__ext4_sb_bread_gfp(struct super_block *sb,
0230 sector_t block,
0231 blk_opf_t op_flags, gfp_t gfp)
0232 {
0233 struct buffer_head *bh;
0234 int ret;
0235
0236 bh = sb_getblk_gfp(sb, block, gfp);
0237 if (bh == NULL)
0238 return ERR_PTR(-ENOMEM);
0239 if (ext4_buffer_uptodate(bh))
0240 return bh;
0241
0242 ret = ext4_read_bh_lock(bh, REQ_META | op_flags, true);
0243 if (ret) {
0244 put_bh(bh);
0245 return ERR_PTR(ret);
0246 }
0247 return bh;
0248 }
0249
0250 struct buffer_head *ext4_sb_bread(struct super_block *sb, sector_t block,
0251 blk_opf_t op_flags)
0252 {
0253 return __ext4_sb_bread_gfp(sb, block, op_flags, __GFP_MOVABLE);
0254 }
0255
0256 struct buffer_head *ext4_sb_bread_unmovable(struct super_block *sb,
0257 sector_t block)
0258 {
0259 return __ext4_sb_bread_gfp(sb, block, 0, 0);
0260 }
0261
0262 void ext4_sb_breadahead_unmovable(struct super_block *sb, sector_t block)
0263 {
0264 struct buffer_head *bh = sb_getblk_gfp(sb, block, 0);
0265
0266 if (likely(bh)) {
0267 ext4_read_bh_lock(bh, REQ_RAHEAD, false);
0268 brelse(bh);
0269 }
0270 }
0271
0272 static int ext4_verify_csum_type(struct super_block *sb,
0273 struct ext4_super_block *es)
0274 {
0275 if (!ext4_has_feature_metadata_csum(sb))
0276 return 1;
0277
0278 return es->s_checksum_type == EXT4_CRC32C_CHKSUM;
0279 }
0280
0281 __le32 ext4_superblock_csum(struct super_block *sb,
0282 struct ext4_super_block *es)
0283 {
0284 struct ext4_sb_info *sbi = EXT4_SB(sb);
0285 int offset = offsetof(struct ext4_super_block, s_checksum);
0286 __u32 csum;
0287
0288 csum = ext4_chksum(sbi, ~0, (char *)es, offset);
0289
0290 return cpu_to_le32(csum);
0291 }
0292
0293 static int ext4_superblock_csum_verify(struct super_block *sb,
0294 struct ext4_super_block *es)
0295 {
0296 if (!ext4_has_metadata_csum(sb))
0297 return 1;
0298
0299 return es->s_checksum == ext4_superblock_csum(sb, es);
0300 }
0301
0302 void ext4_superblock_csum_set(struct super_block *sb)
0303 {
0304 struct ext4_super_block *es = EXT4_SB(sb)->s_es;
0305
0306 if (!ext4_has_metadata_csum(sb))
0307 return;
0308
0309 es->s_checksum = ext4_superblock_csum(sb, es);
0310 }
0311
0312 ext4_fsblk_t ext4_block_bitmap(struct super_block *sb,
0313 struct ext4_group_desc *bg)
0314 {
0315 return le32_to_cpu(bg->bg_block_bitmap_lo) |
0316 (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ?
0317 (ext4_fsblk_t)le32_to_cpu(bg->bg_block_bitmap_hi) << 32 : 0);
0318 }
0319
0320 ext4_fsblk_t ext4_inode_bitmap(struct super_block *sb,
0321 struct ext4_group_desc *bg)
0322 {
0323 return le32_to_cpu(bg->bg_inode_bitmap_lo) |
0324 (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ?
0325 (ext4_fsblk_t)le32_to_cpu(bg->bg_inode_bitmap_hi) << 32 : 0);
0326 }
0327
0328 ext4_fsblk_t ext4_inode_table(struct super_block *sb,
0329 struct ext4_group_desc *bg)
0330 {
0331 return le32_to_cpu(bg->bg_inode_table_lo) |
0332 (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ?
0333 (ext4_fsblk_t)le32_to_cpu(bg->bg_inode_table_hi) << 32 : 0);
0334 }
0335
0336 __u32 ext4_free_group_clusters(struct super_block *sb,
0337 struct ext4_group_desc *bg)
0338 {
0339 return le16_to_cpu(bg->bg_free_blocks_count_lo) |
0340 (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ?
0341 (__u32)le16_to_cpu(bg->bg_free_blocks_count_hi) << 16 : 0);
0342 }
0343
0344 __u32 ext4_free_inodes_count(struct super_block *sb,
0345 struct ext4_group_desc *bg)
0346 {
0347 return le16_to_cpu(bg->bg_free_inodes_count_lo) |
0348 (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ?
0349 (__u32)le16_to_cpu(bg->bg_free_inodes_count_hi) << 16 : 0);
0350 }
0351
0352 __u32 ext4_used_dirs_count(struct super_block *sb,
0353 struct ext4_group_desc *bg)
0354 {
0355 return le16_to_cpu(bg->bg_used_dirs_count_lo) |
0356 (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ?
0357 (__u32)le16_to_cpu(bg->bg_used_dirs_count_hi) << 16 : 0);
0358 }
0359
0360 __u32 ext4_itable_unused_count(struct super_block *sb,
0361 struct ext4_group_desc *bg)
0362 {
0363 return le16_to_cpu(bg->bg_itable_unused_lo) |
0364 (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ?
0365 (__u32)le16_to_cpu(bg->bg_itable_unused_hi) << 16 : 0);
0366 }
0367
0368 void ext4_block_bitmap_set(struct super_block *sb,
0369 struct ext4_group_desc *bg, ext4_fsblk_t blk)
0370 {
0371 bg->bg_block_bitmap_lo = cpu_to_le32((u32)blk);
0372 if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT)
0373 bg->bg_block_bitmap_hi = cpu_to_le32(blk >> 32);
0374 }
0375
0376 void ext4_inode_bitmap_set(struct super_block *sb,
0377 struct ext4_group_desc *bg, ext4_fsblk_t blk)
0378 {
0379 bg->bg_inode_bitmap_lo = cpu_to_le32((u32)blk);
0380 if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT)
0381 bg->bg_inode_bitmap_hi = cpu_to_le32(blk >> 32);
0382 }
0383
0384 void ext4_inode_table_set(struct super_block *sb,
0385 struct ext4_group_desc *bg, ext4_fsblk_t blk)
0386 {
0387 bg->bg_inode_table_lo = cpu_to_le32((u32)blk);
0388 if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT)
0389 bg->bg_inode_table_hi = cpu_to_le32(blk >> 32);
0390 }
0391
0392 void ext4_free_group_clusters_set(struct super_block *sb,
0393 struct ext4_group_desc *bg, __u32 count)
0394 {
0395 bg->bg_free_blocks_count_lo = cpu_to_le16((__u16)count);
0396 if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT)
0397 bg->bg_free_blocks_count_hi = cpu_to_le16(count >> 16);
0398 }
0399
0400 void ext4_free_inodes_set(struct super_block *sb,
0401 struct ext4_group_desc *bg, __u32 count)
0402 {
0403 bg->bg_free_inodes_count_lo = cpu_to_le16((__u16)count);
0404 if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT)
0405 bg->bg_free_inodes_count_hi = cpu_to_le16(count >> 16);
0406 }
0407
0408 void ext4_used_dirs_set(struct super_block *sb,
0409 struct ext4_group_desc *bg, __u32 count)
0410 {
0411 bg->bg_used_dirs_count_lo = cpu_to_le16((__u16)count);
0412 if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT)
0413 bg->bg_used_dirs_count_hi = cpu_to_le16(count >> 16);
0414 }
0415
0416 void ext4_itable_unused_set(struct super_block *sb,
0417 struct ext4_group_desc *bg, __u32 count)
0418 {
0419 bg->bg_itable_unused_lo = cpu_to_le16((__u16)count);
0420 if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT)
0421 bg->bg_itable_unused_hi = cpu_to_le16(count >> 16);
0422 }
0423
0424 static void __ext4_update_tstamp(__le32 *lo, __u8 *hi, time64_t now)
0425 {
0426 now = clamp_val(now, 0, (1ull << 40) - 1);
0427
0428 *lo = cpu_to_le32(lower_32_bits(now));
0429 *hi = upper_32_bits(now);
0430 }
0431
0432 static time64_t __ext4_get_tstamp(__le32 *lo, __u8 *hi)
0433 {
0434 return ((time64_t)(*hi) << 32) + le32_to_cpu(*lo);
0435 }
0436 #define ext4_update_tstamp(es, tstamp) \
0437 __ext4_update_tstamp(&(es)->tstamp, &(es)->tstamp ## _hi, \
0438 ktime_get_real_seconds())
0439 #define ext4_get_tstamp(es, tstamp) \
0440 __ext4_get_tstamp(&(es)->tstamp, &(es)->tstamp ## _hi)
0441
0442
0443
0444
0445
0446
0447
0448
0449
0450 static int block_device_ejected(struct super_block *sb)
0451 {
0452 struct inode *bd_inode = sb->s_bdev->bd_inode;
0453 struct backing_dev_info *bdi = inode_to_bdi(bd_inode);
0454
0455 return bdi->dev == NULL;
0456 }
0457
0458 static void ext4_journal_commit_callback(journal_t *journal, transaction_t *txn)
0459 {
0460 struct super_block *sb = journal->j_private;
0461 struct ext4_sb_info *sbi = EXT4_SB(sb);
0462 int error = is_journal_aborted(journal);
0463 struct ext4_journal_cb_entry *jce;
0464
0465 BUG_ON(txn->t_state == T_FINISHED);
0466
0467 ext4_process_freed_data(sb, txn->t_tid);
0468
0469 spin_lock(&sbi->s_md_lock);
0470 while (!list_empty(&txn->t_private_list)) {
0471 jce = list_entry(txn->t_private_list.next,
0472 struct ext4_journal_cb_entry, jce_list);
0473 list_del_init(&jce->jce_list);
0474 spin_unlock(&sbi->s_md_lock);
0475 jce->jce_func(sb, jce, error);
0476 spin_lock(&sbi->s_md_lock);
0477 }
0478 spin_unlock(&sbi->s_md_lock);
0479 }
0480
0481
0482
0483
0484
0485
0486
0487
0488
0489
0490
0491 static int ext4_journalled_writepage_callback(struct page *page,
0492 struct writeback_control *wbc,
0493 void *data)
0494 {
0495 transaction_t *transaction = (transaction_t *) data;
0496 struct buffer_head *bh, *head;
0497 struct journal_head *jh;
0498
0499 bh = head = page_buffers(page);
0500 do {
0501
0502
0503
0504
0505
0506
0507
0508
0509
0510
0511
0512
0513
0514 jh = bh2jh(bh);
0515 if (buffer_dirty(bh) ||
0516 (jh && (jh->b_transaction != transaction ||
0517 jh->b_next_transaction))) {
0518 redirty_page_for_writepage(wbc, page);
0519 goto out;
0520 }
0521 } while ((bh = bh->b_this_page) != head);
0522
0523 out:
0524 return AOP_WRITEPAGE_ACTIVATE;
0525 }
0526
0527 static int ext4_journalled_submit_inode_data_buffers(struct jbd2_inode *jinode)
0528 {
0529 struct address_space *mapping = jinode->i_vfs_inode->i_mapping;
0530 struct writeback_control wbc = {
0531 .sync_mode = WB_SYNC_ALL,
0532 .nr_to_write = LONG_MAX,
0533 .range_start = jinode->i_dirty_start,
0534 .range_end = jinode->i_dirty_end,
0535 };
0536
0537 return write_cache_pages(mapping, &wbc,
0538 ext4_journalled_writepage_callback,
0539 jinode->i_transaction);
0540 }
0541
0542 static int ext4_journal_submit_inode_data_buffers(struct jbd2_inode *jinode)
0543 {
0544 int ret;
0545
0546 if (ext4_should_journal_data(jinode->i_vfs_inode))
0547 ret = ext4_journalled_submit_inode_data_buffers(jinode);
0548 else
0549 ret = jbd2_journal_submit_inode_data_buffers(jinode);
0550
0551 return ret;
0552 }
0553
0554 static int ext4_journal_finish_inode_data_buffers(struct jbd2_inode *jinode)
0555 {
0556 int ret = 0;
0557
0558 if (!ext4_should_journal_data(jinode->i_vfs_inode))
0559 ret = jbd2_journal_finish_inode_data_buffers(jinode);
0560
0561 return ret;
0562 }
0563
0564 static bool system_going_down(void)
0565 {
0566 return system_state == SYSTEM_HALT || system_state == SYSTEM_POWER_OFF
0567 || system_state == SYSTEM_RESTART;
0568 }
0569
0570 struct ext4_err_translation {
0571 int code;
0572 int errno;
0573 };
0574
0575 #define EXT4_ERR_TRANSLATE(err) { .code = EXT4_ERR_##err, .errno = err }
0576
0577 static struct ext4_err_translation err_translation[] = {
0578 EXT4_ERR_TRANSLATE(EIO),
0579 EXT4_ERR_TRANSLATE(ENOMEM),
0580 EXT4_ERR_TRANSLATE(EFSBADCRC),
0581 EXT4_ERR_TRANSLATE(EFSCORRUPTED),
0582 EXT4_ERR_TRANSLATE(ENOSPC),
0583 EXT4_ERR_TRANSLATE(ENOKEY),
0584 EXT4_ERR_TRANSLATE(EROFS),
0585 EXT4_ERR_TRANSLATE(EFBIG),
0586 EXT4_ERR_TRANSLATE(EEXIST),
0587 EXT4_ERR_TRANSLATE(ERANGE),
0588 EXT4_ERR_TRANSLATE(EOVERFLOW),
0589 EXT4_ERR_TRANSLATE(EBUSY),
0590 EXT4_ERR_TRANSLATE(ENOTDIR),
0591 EXT4_ERR_TRANSLATE(ENOTEMPTY),
0592 EXT4_ERR_TRANSLATE(ESHUTDOWN),
0593 EXT4_ERR_TRANSLATE(EFAULT),
0594 };
0595
0596 static int ext4_errno_to_code(int errno)
0597 {
0598 int i;
0599
0600 for (i = 0; i < ARRAY_SIZE(err_translation); i++)
0601 if (err_translation[i].errno == errno)
0602 return err_translation[i].code;
0603 return EXT4_ERR_UNKNOWN;
0604 }
0605
0606 static void save_error_info(struct super_block *sb, int error,
0607 __u32 ino, __u64 block,
0608 const char *func, unsigned int line)
0609 {
0610 struct ext4_sb_info *sbi = EXT4_SB(sb);
0611
0612
0613 if (error == 0)
0614 error = EFSCORRUPTED;
0615
0616 spin_lock(&sbi->s_error_lock);
0617 sbi->s_add_error_count++;
0618 sbi->s_last_error_code = error;
0619 sbi->s_last_error_line = line;
0620 sbi->s_last_error_ino = ino;
0621 sbi->s_last_error_block = block;
0622 sbi->s_last_error_func = func;
0623 sbi->s_last_error_time = ktime_get_real_seconds();
0624 if (!sbi->s_first_error_time) {
0625 sbi->s_first_error_code = error;
0626 sbi->s_first_error_line = line;
0627 sbi->s_first_error_ino = ino;
0628 sbi->s_first_error_block = block;
0629 sbi->s_first_error_func = func;
0630 sbi->s_first_error_time = sbi->s_last_error_time;
0631 }
0632 spin_unlock(&sbi->s_error_lock);
0633 }
0634
0635
0636
0637
0638
0639
0640
0641
0642
0643
0644
0645
0646
0647
0648
0649
0650
0651
0652
0653
0654
0655 static void ext4_handle_error(struct super_block *sb, bool force_ro, int error,
0656 __u32 ino, __u64 block,
0657 const char *func, unsigned int line)
0658 {
0659 journal_t *journal = EXT4_SB(sb)->s_journal;
0660 bool continue_fs = !force_ro && test_opt(sb, ERRORS_CONT);
0661
0662 EXT4_SB(sb)->s_mount_state |= EXT4_ERROR_FS;
0663 if (test_opt(sb, WARN_ON_ERROR))
0664 WARN_ON_ONCE(1);
0665
0666 if (!continue_fs && !sb_rdonly(sb)) {
0667 ext4_set_mount_flag(sb, EXT4_MF_FS_ABORTED);
0668 if (journal)
0669 jbd2_journal_abort(journal, -EIO);
0670 }
0671
0672 if (!bdev_read_only(sb->s_bdev)) {
0673 save_error_info(sb, error, ino, block, func, line);
0674
0675
0676
0677
0678
0679
0680 if (continue_fs && journal)
0681 schedule_work(&EXT4_SB(sb)->s_error_work);
0682 else
0683 ext4_commit_super(sb);
0684 }
0685
0686
0687
0688
0689
0690
0691 if (test_opt(sb, ERRORS_PANIC) && !system_going_down()) {
0692 panic("EXT4-fs (device %s): panic forced after error\n",
0693 sb->s_id);
0694 }
0695
0696 if (sb_rdonly(sb) || continue_fs)
0697 return;
0698
0699 ext4_msg(sb, KERN_CRIT, "Remounting filesystem read-only");
0700
0701
0702
0703
0704 smp_wmb();
0705 sb->s_flags |= SB_RDONLY;
0706 }
0707
0708 static void flush_stashed_error_work(struct work_struct *work)
0709 {
0710 struct ext4_sb_info *sbi = container_of(work, struct ext4_sb_info,
0711 s_error_work);
0712 journal_t *journal = sbi->s_journal;
0713 handle_t *handle;
0714
0715
0716
0717
0718
0719
0720
0721
0722
0723 if (!sb_rdonly(sbi->s_sb) && journal) {
0724 struct buffer_head *sbh = sbi->s_sbh;
0725 handle = jbd2_journal_start(journal, 1);
0726 if (IS_ERR(handle))
0727 goto write_directly;
0728 if (jbd2_journal_get_write_access(handle, sbh)) {
0729 jbd2_journal_stop(handle);
0730 goto write_directly;
0731 }
0732 ext4_update_super(sbi->s_sb);
0733 if (buffer_write_io_error(sbh) || !buffer_uptodate(sbh)) {
0734 ext4_msg(sbi->s_sb, KERN_ERR, "previous I/O error to "
0735 "superblock detected");
0736 clear_buffer_write_io_error(sbh);
0737 set_buffer_uptodate(sbh);
0738 }
0739
0740 if (jbd2_journal_dirty_metadata(handle, sbh)) {
0741 jbd2_journal_stop(handle);
0742 goto write_directly;
0743 }
0744 jbd2_journal_stop(handle);
0745 ext4_notify_error_sysfs(sbi);
0746 return;
0747 }
0748 write_directly:
0749
0750
0751
0752
0753 ext4_commit_super(sbi->s_sb);
0754 ext4_notify_error_sysfs(sbi);
0755 }
0756
0757 #define ext4_error_ratelimit(sb) \
0758 ___ratelimit(&(EXT4_SB(sb)->s_err_ratelimit_state), \
0759 "EXT4-fs error")
0760
0761 void __ext4_error(struct super_block *sb, const char *function,
0762 unsigned int line, bool force_ro, int error, __u64 block,
0763 const char *fmt, ...)
0764 {
0765 struct va_format vaf;
0766 va_list args;
0767
0768 if (unlikely(ext4_forced_shutdown(EXT4_SB(sb))))
0769 return;
0770
0771 trace_ext4_error(sb, function, line);
0772 if (ext4_error_ratelimit(sb)) {
0773 va_start(args, fmt);
0774 vaf.fmt = fmt;
0775 vaf.va = &args;
0776 printk(KERN_CRIT
0777 "EXT4-fs error (device %s): %s:%d: comm %s: %pV\n",
0778 sb->s_id, function, line, current->comm, &vaf);
0779 va_end(args);
0780 }
0781 fsnotify_sb_error(sb, NULL, error ? error : EFSCORRUPTED);
0782
0783 ext4_handle_error(sb, force_ro, error, 0, block, function, line);
0784 }
0785
0786 void __ext4_error_inode(struct inode *inode, const char *function,
0787 unsigned int line, ext4_fsblk_t block, int error,
0788 const char *fmt, ...)
0789 {
0790 va_list args;
0791 struct va_format vaf;
0792
0793 if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb))))
0794 return;
0795
0796 trace_ext4_error(inode->i_sb, function, line);
0797 if (ext4_error_ratelimit(inode->i_sb)) {
0798 va_start(args, fmt);
0799 vaf.fmt = fmt;
0800 vaf.va = &args;
0801 if (block)
0802 printk(KERN_CRIT "EXT4-fs error (device %s): %s:%d: "
0803 "inode #%lu: block %llu: comm %s: %pV\n",
0804 inode->i_sb->s_id, function, line, inode->i_ino,
0805 block, current->comm, &vaf);
0806 else
0807 printk(KERN_CRIT "EXT4-fs error (device %s): %s:%d: "
0808 "inode #%lu: comm %s: %pV\n",
0809 inode->i_sb->s_id, function, line, inode->i_ino,
0810 current->comm, &vaf);
0811 va_end(args);
0812 }
0813 fsnotify_sb_error(inode->i_sb, inode, error ? error : EFSCORRUPTED);
0814
0815 ext4_handle_error(inode->i_sb, false, error, inode->i_ino, block,
0816 function, line);
0817 }
0818
0819 void __ext4_error_file(struct file *file, const char *function,
0820 unsigned int line, ext4_fsblk_t block,
0821 const char *fmt, ...)
0822 {
0823 va_list args;
0824 struct va_format vaf;
0825 struct inode *inode = file_inode(file);
0826 char pathname[80], *path;
0827
0828 if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb))))
0829 return;
0830
0831 trace_ext4_error(inode->i_sb, function, line);
0832 if (ext4_error_ratelimit(inode->i_sb)) {
0833 path = file_path(file, pathname, sizeof(pathname));
0834 if (IS_ERR(path))
0835 path = "(unknown)";
0836 va_start(args, fmt);
0837 vaf.fmt = fmt;
0838 vaf.va = &args;
0839 if (block)
0840 printk(KERN_CRIT
0841 "EXT4-fs error (device %s): %s:%d: inode #%lu: "
0842 "block %llu: comm %s: path %s: %pV\n",
0843 inode->i_sb->s_id, function, line, inode->i_ino,
0844 block, current->comm, path, &vaf);
0845 else
0846 printk(KERN_CRIT
0847 "EXT4-fs error (device %s): %s:%d: inode #%lu: "
0848 "comm %s: path %s: %pV\n",
0849 inode->i_sb->s_id, function, line, inode->i_ino,
0850 current->comm, path, &vaf);
0851 va_end(args);
0852 }
0853 fsnotify_sb_error(inode->i_sb, inode, EFSCORRUPTED);
0854
0855 ext4_handle_error(inode->i_sb, false, EFSCORRUPTED, inode->i_ino, block,
0856 function, line);
0857 }
0858
0859 const char *ext4_decode_error(struct super_block *sb, int errno,
0860 char nbuf[16])
0861 {
0862 char *errstr = NULL;
0863
0864 switch (errno) {
0865 case -EFSCORRUPTED:
0866 errstr = "Corrupt filesystem";
0867 break;
0868 case -EFSBADCRC:
0869 errstr = "Filesystem failed CRC";
0870 break;
0871 case -EIO:
0872 errstr = "IO failure";
0873 break;
0874 case -ENOMEM:
0875 errstr = "Out of memory";
0876 break;
0877 case -EROFS:
0878 if (!sb || (EXT4_SB(sb)->s_journal &&
0879 EXT4_SB(sb)->s_journal->j_flags & JBD2_ABORT))
0880 errstr = "Journal has aborted";
0881 else
0882 errstr = "Readonly filesystem";
0883 break;
0884 default:
0885
0886
0887
0888 if (nbuf) {
0889
0890 if (snprintf(nbuf, 16, "error %d", -errno) >= 0)
0891 errstr = nbuf;
0892 }
0893 break;
0894 }
0895
0896 return errstr;
0897 }
0898
0899
0900
0901
0902 void __ext4_std_error(struct super_block *sb, const char *function,
0903 unsigned int line, int errno)
0904 {
0905 char nbuf[16];
0906 const char *errstr;
0907
0908 if (unlikely(ext4_forced_shutdown(EXT4_SB(sb))))
0909 return;
0910
0911
0912
0913
0914 if (errno == -EROFS && journal_current_handle() == NULL && sb_rdonly(sb))
0915 return;
0916
0917 if (ext4_error_ratelimit(sb)) {
0918 errstr = ext4_decode_error(sb, errno, nbuf);
0919 printk(KERN_CRIT "EXT4-fs error (device %s) in %s:%d: %s\n",
0920 sb->s_id, function, line, errstr);
0921 }
0922 fsnotify_sb_error(sb, NULL, errno ? errno : EFSCORRUPTED);
0923
0924 ext4_handle_error(sb, false, -errno, 0, 0, function, line);
0925 }
0926
0927 void __ext4_msg(struct super_block *sb,
0928 const char *prefix, const char *fmt, ...)
0929 {
0930 struct va_format vaf;
0931 va_list args;
0932
0933 if (sb) {
0934 atomic_inc(&EXT4_SB(sb)->s_msg_count);
0935 if (!___ratelimit(&(EXT4_SB(sb)->s_msg_ratelimit_state),
0936 "EXT4-fs"))
0937 return;
0938 }
0939
0940 va_start(args, fmt);
0941 vaf.fmt = fmt;
0942 vaf.va = &args;
0943 if (sb)
0944 printk("%sEXT4-fs (%s): %pV\n", prefix, sb->s_id, &vaf);
0945 else
0946 printk("%sEXT4-fs: %pV\n", prefix, &vaf);
0947 va_end(args);
0948 }
0949
0950 static int ext4_warning_ratelimit(struct super_block *sb)
0951 {
0952 atomic_inc(&EXT4_SB(sb)->s_warning_count);
0953 return ___ratelimit(&(EXT4_SB(sb)->s_warning_ratelimit_state),
0954 "EXT4-fs warning");
0955 }
0956
0957 void __ext4_warning(struct super_block *sb, const char *function,
0958 unsigned int line, const char *fmt, ...)
0959 {
0960 struct va_format vaf;
0961 va_list args;
0962
0963 if (!ext4_warning_ratelimit(sb))
0964 return;
0965
0966 va_start(args, fmt);
0967 vaf.fmt = fmt;
0968 vaf.va = &args;
0969 printk(KERN_WARNING "EXT4-fs warning (device %s): %s:%d: %pV\n",
0970 sb->s_id, function, line, &vaf);
0971 va_end(args);
0972 }
0973
0974 void __ext4_warning_inode(const struct inode *inode, const char *function,
0975 unsigned int line, const char *fmt, ...)
0976 {
0977 struct va_format vaf;
0978 va_list args;
0979
0980 if (!ext4_warning_ratelimit(inode->i_sb))
0981 return;
0982
0983 va_start(args, fmt);
0984 vaf.fmt = fmt;
0985 vaf.va = &args;
0986 printk(KERN_WARNING "EXT4-fs warning (device %s): %s:%d: "
0987 "inode #%lu: comm %s: %pV\n", inode->i_sb->s_id,
0988 function, line, inode->i_ino, current->comm, &vaf);
0989 va_end(args);
0990 }
0991
0992 void __ext4_grp_locked_error(const char *function, unsigned int line,
0993 struct super_block *sb, ext4_group_t grp,
0994 unsigned long ino, ext4_fsblk_t block,
0995 const char *fmt, ...)
0996 __releases(bitlock)
0997 __acquires(bitlock)
0998 {
0999 struct va_format vaf;
1000 va_list args;
1001
1002 if (unlikely(ext4_forced_shutdown(EXT4_SB(sb))))
1003 return;
1004
1005 trace_ext4_error(sb, function, line);
1006 if (ext4_error_ratelimit(sb)) {
1007 va_start(args, fmt);
1008 vaf.fmt = fmt;
1009 vaf.va = &args;
1010 printk(KERN_CRIT "EXT4-fs error (device %s): %s:%d: group %u, ",
1011 sb->s_id, function, line, grp);
1012 if (ino)
1013 printk(KERN_CONT "inode %lu: ", ino);
1014 if (block)
1015 printk(KERN_CONT "block %llu:",
1016 (unsigned long long) block);
1017 printk(KERN_CONT "%pV\n", &vaf);
1018 va_end(args);
1019 }
1020
1021 if (test_opt(sb, ERRORS_CONT)) {
1022 if (test_opt(sb, WARN_ON_ERROR))
1023 WARN_ON_ONCE(1);
1024 EXT4_SB(sb)->s_mount_state |= EXT4_ERROR_FS;
1025 if (!bdev_read_only(sb->s_bdev)) {
1026 save_error_info(sb, EFSCORRUPTED, ino, block, function,
1027 line);
1028 schedule_work(&EXT4_SB(sb)->s_error_work);
1029 }
1030 return;
1031 }
1032 ext4_unlock_group(sb, grp);
1033 ext4_handle_error(sb, false, EFSCORRUPTED, ino, block, function, line);
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045 ext4_lock_group(sb, grp);
1046 return;
1047 }
1048
1049 void ext4_mark_group_bitmap_corrupted(struct super_block *sb,
1050 ext4_group_t group,
1051 unsigned int flags)
1052 {
1053 struct ext4_sb_info *sbi = EXT4_SB(sb);
1054 struct ext4_group_info *grp = ext4_get_group_info(sb, group);
1055 struct ext4_group_desc *gdp = ext4_get_group_desc(sb, group, NULL);
1056 int ret;
1057
1058 if (flags & EXT4_GROUP_INFO_BBITMAP_CORRUPT) {
1059 ret = ext4_test_and_set_bit(EXT4_GROUP_INFO_BBITMAP_CORRUPT_BIT,
1060 &grp->bb_state);
1061 if (!ret)
1062 percpu_counter_sub(&sbi->s_freeclusters_counter,
1063 grp->bb_free);
1064 }
1065
1066 if (flags & EXT4_GROUP_INFO_IBITMAP_CORRUPT) {
1067 ret = ext4_test_and_set_bit(EXT4_GROUP_INFO_IBITMAP_CORRUPT_BIT,
1068 &grp->bb_state);
1069 if (!ret && gdp) {
1070 int count;
1071
1072 count = ext4_free_inodes_count(sb, gdp);
1073 percpu_counter_sub(&sbi->s_freeinodes_counter,
1074 count);
1075 }
1076 }
1077 }
1078
1079 void ext4_update_dynamic_rev(struct super_block *sb)
1080 {
1081 struct ext4_super_block *es = EXT4_SB(sb)->s_es;
1082
1083 if (le32_to_cpu(es->s_rev_level) > EXT4_GOOD_OLD_REV)
1084 return;
1085
1086 ext4_warning(sb,
1087 "updating to rev %d because of new feature flag, "
1088 "running e2fsck is recommended",
1089 EXT4_DYNAMIC_REV);
1090
1091 es->s_first_ino = cpu_to_le32(EXT4_GOOD_OLD_FIRST_INO);
1092 es->s_inode_size = cpu_to_le16(EXT4_GOOD_OLD_INODE_SIZE);
1093 es->s_rev_level = cpu_to_le32(EXT4_DYNAMIC_REV);
1094
1095
1096
1097
1098
1099
1100
1101
1102 }
1103
1104
1105
1106
1107 static struct block_device *ext4_blkdev_get(dev_t dev, struct super_block *sb)
1108 {
1109 struct block_device *bdev;
1110
1111 bdev = blkdev_get_by_dev(dev, FMODE_READ|FMODE_WRITE|FMODE_EXCL, sb);
1112 if (IS_ERR(bdev))
1113 goto fail;
1114 return bdev;
1115
1116 fail:
1117 ext4_msg(sb, KERN_ERR,
1118 "failed to open journal device unknown-block(%u,%u) %ld",
1119 MAJOR(dev), MINOR(dev), PTR_ERR(bdev));
1120 return NULL;
1121 }
1122
1123
1124
1125
1126 static void ext4_blkdev_put(struct block_device *bdev)
1127 {
1128 blkdev_put(bdev, FMODE_READ|FMODE_WRITE|FMODE_EXCL);
1129 }
1130
1131 static void ext4_blkdev_remove(struct ext4_sb_info *sbi)
1132 {
1133 struct block_device *bdev;
1134 bdev = sbi->s_journal_bdev;
1135 if (bdev) {
1136 ext4_blkdev_put(bdev);
1137 sbi->s_journal_bdev = NULL;
1138 }
1139 }
1140
1141 static inline struct inode *orphan_list_entry(struct list_head *l)
1142 {
1143 return &list_entry(l, struct ext4_inode_info, i_orphan)->vfs_inode;
1144 }
1145
1146 static void dump_orphan_list(struct super_block *sb, struct ext4_sb_info *sbi)
1147 {
1148 struct list_head *l;
1149
1150 ext4_msg(sb, KERN_ERR, "sb orphan head is %d",
1151 le32_to_cpu(sbi->s_es->s_last_orphan));
1152
1153 printk(KERN_ERR "sb_info orphan list:\n");
1154 list_for_each(l, &sbi->s_orphan) {
1155 struct inode *inode = orphan_list_entry(l);
1156 printk(KERN_ERR " "
1157 "inode %s:%lu at %p: mode %o, nlink %d, next %d\n",
1158 inode->i_sb->s_id, inode->i_ino, inode,
1159 inode->i_mode, inode->i_nlink,
1160 NEXT_ORPHAN(inode));
1161 }
1162 }
1163
1164 #ifdef CONFIG_QUOTA
1165 static int ext4_quota_off(struct super_block *sb, int type);
1166
1167 static inline void ext4_quota_off_umount(struct super_block *sb)
1168 {
1169 int type;
1170
1171
1172 for (type = 0; type < EXT4_MAXQUOTAS; type++)
1173 ext4_quota_off(sb, type);
1174 }
1175
1176
1177
1178
1179
1180 static inline char *get_qf_name(struct super_block *sb,
1181 struct ext4_sb_info *sbi,
1182 int type)
1183 {
1184 return rcu_dereference_protected(sbi->s_qf_names[type],
1185 lockdep_is_held(&sb->s_umount));
1186 }
1187 #else
1188 static inline void ext4_quota_off_umount(struct super_block *sb)
1189 {
1190 }
1191 #endif
1192
1193 static void ext4_put_super(struct super_block *sb)
1194 {
1195 struct ext4_sb_info *sbi = EXT4_SB(sb);
1196 struct ext4_super_block *es = sbi->s_es;
1197 struct buffer_head **group_desc;
1198 struct flex_groups **flex_groups;
1199 int aborted = 0;
1200 int i, err;
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212 ext4_unregister_sysfs(sb);
1213
1214 if (___ratelimit(&ext4_mount_msg_ratelimit, "EXT4-fs unmount"))
1215 ext4_msg(sb, KERN_INFO, "unmounting filesystem.");
1216
1217 ext4_unregister_li_request(sb);
1218 ext4_quota_off_umount(sb);
1219
1220 flush_work(&sbi->s_error_work);
1221 destroy_workqueue(sbi->rsv_conversion_wq);
1222 ext4_release_orphan_info(sb);
1223
1224 if (sbi->s_journal) {
1225 aborted = is_journal_aborted(sbi->s_journal);
1226 err = jbd2_journal_destroy(sbi->s_journal);
1227 sbi->s_journal = NULL;
1228 if ((err < 0) && !aborted) {
1229 ext4_abort(sb, -err, "Couldn't clean up the journal");
1230 }
1231 }
1232
1233 ext4_es_unregister_shrinker(sbi);
1234 del_timer_sync(&sbi->s_err_report);
1235 ext4_release_system_zone(sb);
1236 ext4_mb_release(sb);
1237 ext4_ext_release(sb);
1238
1239 if (!sb_rdonly(sb) && !aborted) {
1240 ext4_clear_feature_journal_needs_recovery(sb);
1241 ext4_clear_feature_orphan_present(sb);
1242 es->s_state = cpu_to_le16(sbi->s_mount_state);
1243 }
1244 if (!sb_rdonly(sb))
1245 ext4_commit_super(sb);
1246
1247 rcu_read_lock();
1248 group_desc = rcu_dereference(sbi->s_group_desc);
1249 for (i = 0; i < sbi->s_gdb_count; i++)
1250 brelse(group_desc[i]);
1251 kvfree(group_desc);
1252 flex_groups = rcu_dereference(sbi->s_flex_groups);
1253 if (flex_groups) {
1254 for (i = 0; i < sbi->s_flex_groups_allocated; i++)
1255 kvfree(flex_groups[i]);
1256 kvfree(flex_groups);
1257 }
1258 rcu_read_unlock();
1259 percpu_counter_destroy(&sbi->s_freeclusters_counter);
1260 percpu_counter_destroy(&sbi->s_freeinodes_counter);
1261 percpu_counter_destroy(&sbi->s_dirs_counter);
1262 percpu_counter_destroy(&sbi->s_dirtyclusters_counter);
1263 percpu_counter_destroy(&sbi->s_sra_exceeded_retry_limit);
1264 percpu_free_rwsem(&sbi->s_writepages_rwsem);
1265 #ifdef CONFIG_QUOTA
1266 for (i = 0; i < EXT4_MAXQUOTAS; i++)
1267 kfree(get_qf_name(sb, sbi, i));
1268 #endif
1269
1270
1271
1272
1273
1274 if (!list_empty(&sbi->s_orphan))
1275 dump_orphan_list(sb, sbi);
1276 ASSERT(list_empty(&sbi->s_orphan));
1277
1278 sync_blockdev(sb->s_bdev);
1279 invalidate_bdev(sb->s_bdev);
1280 if (sbi->s_journal_bdev && sbi->s_journal_bdev != sb->s_bdev) {
1281
1282
1283
1284
1285
1286 sync_blockdev(sbi->s_journal_bdev);
1287 invalidate_bdev(sbi->s_journal_bdev);
1288 ext4_blkdev_remove(sbi);
1289 }
1290
1291 ext4_xattr_destroy_cache(sbi->s_ea_inode_cache);
1292 sbi->s_ea_inode_cache = NULL;
1293
1294 ext4_xattr_destroy_cache(sbi->s_ea_block_cache);
1295 sbi->s_ea_block_cache = NULL;
1296
1297 ext4_stop_mmpd(sbi);
1298
1299 brelse(sbi->s_sbh);
1300 sb->s_fs_info = NULL;
1301
1302
1303
1304
1305 kobject_put(&sbi->s_kobj);
1306 wait_for_completion(&sbi->s_kobj_unregister);
1307 if (sbi->s_chksum_driver)
1308 crypto_free_shash(sbi->s_chksum_driver);
1309 kfree(sbi->s_blockgroup_lock);
1310 fs_put_dax(sbi->s_daxdev, NULL);
1311 fscrypt_free_dummy_policy(&sbi->s_dummy_enc_policy);
1312 #if IS_ENABLED(CONFIG_UNICODE)
1313 utf8_unload(sb->s_encoding);
1314 #endif
1315 kfree(sbi);
1316 }
1317
1318 static struct kmem_cache *ext4_inode_cachep;
1319
1320
1321
1322
1323 static struct inode *ext4_alloc_inode(struct super_block *sb)
1324 {
1325 struct ext4_inode_info *ei;
1326
1327 ei = alloc_inode_sb(sb, ext4_inode_cachep, GFP_NOFS);
1328 if (!ei)
1329 return NULL;
1330
1331 inode_set_iversion(&ei->vfs_inode, 1);
1332 spin_lock_init(&ei->i_raw_lock);
1333 INIT_LIST_HEAD(&ei->i_prealloc_list);
1334 atomic_set(&ei->i_prealloc_active, 0);
1335 spin_lock_init(&ei->i_prealloc_lock);
1336 ext4_es_init_tree(&ei->i_es_tree);
1337 rwlock_init(&ei->i_es_lock);
1338 INIT_LIST_HEAD(&ei->i_es_list);
1339 ei->i_es_all_nr = 0;
1340 ei->i_es_shk_nr = 0;
1341 ei->i_es_shrink_lblk = 0;
1342 ei->i_reserved_data_blocks = 0;
1343 spin_lock_init(&(ei->i_block_reservation_lock));
1344 ext4_init_pending_tree(&ei->i_pending_tree);
1345 #ifdef CONFIG_QUOTA
1346 ei->i_reserved_quota = 0;
1347 memset(&ei->i_dquot, 0, sizeof(ei->i_dquot));
1348 #endif
1349 ei->jinode = NULL;
1350 INIT_LIST_HEAD(&ei->i_rsv_conversion_list);
1351 spin_lock_init(&ei->i_completed_io_lock);
1352 ei->i_sync_tid = 0;
1353 ei->i_datasync_tid = 0;
1354 atomic_set(&ei->i_unwritten, 0);
1355 INIT_WORK(&ei->i_rsv_conversion_work, ext4_end_io_rsv_work);
1356 ext4_fc_init_inode(&ei->vfs_inode);
1357 mutex_init(&ei->i_fc_lock);
1358 return &ei->vfs_inode;
1359 }
1360
1361 static int ext4_drop_inode(struct inode *inode)
1362 {
1363 int drop = generic_drop_inode(inode);
1364
1365 if (!drop)
1366 drop = fscrypt_drop_inode(inode);
1367
1368 trace_ext4_drop_inode(inode, drop);
1369 return drop;
1370 }
1371
1372 static void ext4_free_in_core_inode(struct inode *inode)
1373 {
1374 fscrypt_free_inode(inode);
1375 if (!list_empty(&(EXT4_I(inode)->i_fc_list))) {
1376 pr_warn("%s: inode %ld still in fc list",
1377 __func__, inode->i_ino);
1378 }
1379 kmem_cache_free(ext4_inode_cachep, EXT4_I(inode));
1380 }
1381
1382 static void ext4_destroy_inode(struct inode *inode)
1383 {
1384 if (!list_empty(&(EXT4_I(inode)->i_orphan))) {
1385 ext4_msg(inode->i_sb, KERN_ERR,
1386 "Inode %lu (%p): orphan list check failed!",
1387 inode->i_ino, EXT4_I(inode));
1388 print_hex_dump(KERN_INFO, "", DUMP_PREFIX_ADDRESS, 16, 4,
1389 EXT4_I(inode), sizeof(struct ext4_inode_info),
1390 true);
1391 dump_stack();
1392 }
1393
1394 if (EXT4_I(inode)->i_reserved_data_blocks)
1395 ext4_msg(inode->i_sb, KERN_ERR,
1396 "Inode %lu (%p): i_reserved_data_blocks (%u) not cleared!",
1397 inode->i_ino, EXT4_I(inode),
1398 EXT4_I(inode)->i_reserved_data_blocks);
1399 }
1400
1401 static void init_once(void *foo)
1402 {
1403 struct ext4_inode_info *ei = foo;
1404
1405 INIT_LIST_HEAD(&ei->i_orphan);
1406 init_rwsem(&ei->xattr_sem);
1407 init_rwsem(&ei->i_data_sem);
1408 inode_init_once(&ei->vfs_inode);
1409 ext4_fc_init_inode(&ei->vfs_inode);
1410 }
1411
1412 static int __init init_inodecache(void)
1413 {
1414 ext4_inode_cachep = kmem_cache_create_usercopy("ext4_inode_cache",
1415 sizeof(struct ext4_inode_info), 0,
1416 (SLAB_RECLAIM_ACCOUNT|SLAB_MEM_SPREAD|
1417 SLAB_ACCOUNT),
1418 offsetof(struct ext4_inode_info, i_data),
1419 sizeof_field(struct ext4_inode_info, i_data),
1420 init_once);
1421 if (ext4_inode_cachep == NULL)
1422 return -ENOMEM;
1423 return 0;
1424 }
1425
1426 static void destroy_inodecache(void)
1427 {
1428
1429
1430
1431
1432 rcu_barrier();
1433 kmem_cache_destroy(ext4_inode_cachep);
1434 }
1435
1436 void ext4_clear_inode(struct inode *inode)
1437 {
1438 ext4_fc_del(inode);
1439 invalidate_inode_buffers(inode);
1440 clear_inode(inode);
1441 ext4_discard_preallocations(inode, 0);
1442 ext4_es_remove_extent(inode, 0, EXT_MAX_BLOCKS);
1443 dquot_drop(inode);
1444 if (EXT4_I(inode)->jinode) {
1445 jbd2_journal_release_jbd_inode(EXT4_JOURNAL(inode),
1446 EXT4_I(inode)->jinode);
1447 jbd2_free_inode(EXT4_I(inode)->jinode);
1448 EXT4_I(inode)->jinode = NULL;
1449 }
1450 fscrypt_put_encryption_info(inode);
1451 fsverity_cleanup_inode(inode);
1452 }
1453
1454 static struct inode *ext4_nfs_get_inode(struct super_block *sb,
1455 u64 ino, u32 generation)
1456 {
1457 struct inode *inode;
1458
1459
1460
1461
1462
1463 inode = ext4_iget(sb, ino, EXT4_IGET_HANDLE);
1464 if (IS_ERR(inode))
1465 return ERR_CAST(inode);
1466 if (generation && inode->i_generation != generation) {
1467 iput(inode);
1468 return ERR_PTR(-ESTALE);
1469 }
1470
1471 return inode;
1472 }
1473
1474 static struct dentry *ext4_fh_to_dentry(struct super_block *sb, struct fid *fid,
1475 int fh_len, int fh_type)
1476 {
1477 return generic_fh_to_dentry(sb, fid, fh_len, fh_type,
1478 ext4_nfs_get_inode);
1479 }
1480
1481 static struct dentry *ext4_fh_to_parent(struct super_block *sb, struct fid *fid,
1482 int fh_len, int fh_type)
1483 {
1484 return generic_fh_to_parent(sb, fid, fh_len, fh_type,
1485 ext4_nfs_get_inode);
1486 }
1487
1488 static int ext4_nfs_commit_metadata(struct inode *inode)
1489 {
1490 struct writeback_control wbc = {
1491 .sync_mode = WB_SYNC_ALL
1492 };
1493
1494 trace_ext4_nfs_commit_metadata(inode);
1495 return ext4_write_inode(inode, &wbc);
1496 }
1497
1498 #ifdef CONFIG_QUOTA
1499 static const char * const quotatypes[] = INITQFNAMES;
1500 #define QTYPE2NAME(t) (quotatypes[t])
1501
1502 static int ext4_write_dquot(struct dquot *dquot);
1503 static int ext4_acquire_dquot(struct dquot *dquot);
1504 static int ext4_release_dquot(struct dquot *dquot);
1505 static int ext4_mark_dquot_dirty(struct dquot *dquot);
1506 static int ext4_write_info(struct super_block *sb, int type);
1507 static int ext4_quota_on(struct super_block *sb, int type, int format_id,
1508 const struct path *path);
1509 static ssize_t ext4_quota_read(struct super_block *sb, int type, char *data,
1510 size_t len, loff_t off);
1511 static ssize_t ext4_quota_write(struct super_block *sb, int type,
1512 const char *data, size_t len, loff_t off);
1513 static int ext4_quota_enable(struct super_block *sb, int type, int format_id,
1514 unsigned int flags);
1515
1516 static struct dquot **ext4_get_dquots(struct inode *inode)
1517 {
1518 return EXT4_I(inode)->i_dquot;
1519 }
1520
1521 static const struct dquot_operations ext4_quota_operations = {
1522 .get_reserved_space = ext4_get_reserved_space,
1523 .write_dquot = ext4_write_dquot,
1524 .acquire_dquot = ext4_acquire_dquot,
1525 .release_dquot = ext4_release_dquot,
1526 .mark_dirty = ext4_mark_dquot_dirty,
1527 .write_info = ext4_write_info,
1528 .alloc_dquot = dquot_alloc,
1529 .destroy_dquot = dquot_destroy,
1530 .get_projid = ext4_get_projid,
1531 .get_inode_usage = ext4_get_inode_usage,
1532 .get_next_id = dquot_get_next_id,
1533 };
1534
1535 static const struct quotactl_ops ext4_qctl_operations = {
1536 .quota_on = ext4_quota_on,
1537 .quota_off = ext4_quota_off,
1538 .quota_sync = dquot_quota_sync,
1539 .get_state = dquot_get_state,
1540 .set_info = dquot_set_dqinfo,
1541 .get_dqblk = dquot_get_dqblk,
1542 .set_dqblk = dquot_set_dqblk,
1543 .get_nextdqblk = dquot_get_next_dqblk,
1544 };
1545 #endif
1546
1547 static const struct super_operations ext4_sops = {
1548 .alloc_inode = ext4_alloc_inode,
1549 .free_inode = ext4_free_in_core_inode,
1550 .destroy_inode = ext4_destroy_inode,
1551 .write_inode = ext4_write_inode,
1552 .dirty_inode = ext4_dirty_inode,
1553 .drop_inode = ext4_drop_inode,
1554 .evict_inode = ext4_evict_inode,
1555 .put_super = ext4_put_super,
1556 .sync_fs = ext4_sync_fs,
1557 .freeze_fs = ext4_freeze,
1558 .unfreeze_fs = ext4_unfreeze,
1559 .statfs = ext4_statfs,
1560 .show_options = ext4_show_options,
1561 #ifdef CONFIG_QUOTA
1562 .quota_read = ext4_quota_read,
1563 .quota_write = ext4_quota_write,
1564 .get_dquots = ext4_get_dquots,
1565 #endif
1566 };
1567
1568 static const struct export_operations ext4_export_ops = {
1569 .fh_to_dentry = ext4_fh_to_dentry,
1570 .fh_to_parent = ext4_fh_to_parent,
1571 .get_parent = ext4_get_parent,
1572 .commit_metadata = ext4_nfs_commit_metadata,
1573 };
1574
1575 enum {
1576 Opt_bsd_df, Opt_minix_df, Opt_grpid, Opt_nogrpid,
1577 Opt_resgid, Opt_resuid, Opt_sb,
1578 Opt_nouid32, Opt_debug, Opt_removed,
1579 Opt_user_xattr, Opt_nouser_xattr, Opt_acl, Opt_noacl,
1580 Opt_auto_da_alloc, Opt_noauto_da_alloc, Opt_noload,
1581 Opt_commit, Opt_min_batch_time, Opt_max_batch_time, Opt_journal_dev,
1582 Opt_journal_path, Opt_journal_checksum, Opt_journal_async_commit,
1583 Opt_abort, Opt_data_journal, Opt_data_ordered, Opt_data_writeback,
1584 Opt_data_err_abort, Opt_data_err_ignore, Opt_test_dummy_encryption,
1585 Opt_inlinecrypt,
1586 Opt_usrjquota, Opt_grpjquota, Opt_quota,
1587 Opt_noquota, Opt_barrier, Opt_nobarrier, Opt_err,
1588 Opt_usrquota, Opt_grpquota, Opt_prjquota, Opt_i_version,
1589 Opt_dax, Opt_dax_always, Opt_dax_inode, Opt_dax_never,
1590 Opt_stripe, Opt_delalloc, Opt_nodelalloc, Opt_warn_on_error,
1591 Opt_nowarn_on_error, Opt_mblk_io_submit, Opt_debug_want_extra_isize,
1592 Opt_nomblk_io_submit, Opt_block_validity, Opt_noblock_validity,
1593 Opt_inode_readahead_blks, Opt_journal_ioprio,
1594 Opt_dioread_nolock, Opt_dioread_lock,
1595 Opt_discard, Opt_nodiscard, Opt_init_itable, Opt_noinit_itable,
1596 Opt_max_dir_size_kb, Opt_nojournal_checksum, Opt_nombcache,
1597 Opt_no_prefetch_block_bitmaps, Opt_mb_optimize_scan,
1598 Opt_errors, Opt_data, Opt_data_err, Opt_jqfmt, Opt_dax_type,
1599 #ifdef CONFIG_EXT4_DEBUG
1600 Opt_fc_debug_max_replay, Opt_fc_debug_force
1601 #endif
1602 };
1603
1604 static const struct constant_table ext4_param_errors[] = {
1605 {"continue", EXT4_MOUNT_ERRORS_CONT},
1606 {"panic", EXT4_MOUNT_ERRORS_PANIC},
1607 {"remount-ro", EXT4_MOUNT_ERRORS_RO},
1608 {}
1609 };
1610
1611 static const struct constant_table ext4_param_data[] = {
1612 {"journal", EXT4_MOUNT_JOURNAL_DATA},
1613 {"ordered", EXT4_MOUNT_ORDERED_DATA},
1614 {"writeback", EXT4_MOUNT_WRITEBACK_DATA},
1615 {}
1616 };
1617
1618 static const struct constant_table ext4_param_data_err[] = {
1619 {"abort", Opt_data_err_abort},
1620 {"ignore", Opt_data_err_ignore},
1621 {}
1622 };
1623
1624 static const struct constant_table ext4_param_jqfmt[] = {
1625 {"vfsold", QFMT_VFS_OLD},
1626 {"vfsv0", QFMT_VFS_V0},
1627 {"vfsv1", QFMT_VFS_V1},
1628 {}
1629 };
1630
1631 static const struct constant_table ext4_param_dax[] = {
1632 {"always", Opt_dax_always},
1633 {"inode", Opt_dax_inode},
1634 {"never", Opt_dax_never},
1635 {}
1636 };
1637
1638
1639 #define fsparam_string_empty(NAME, OPT) \
1640 __fsparam(fs_param_is_string, NAME, OPT, fs_param_can_be_empty, NULL)
1641
1642
1643
1644
1645
1646
1647
1648
1649 static const struct fs_parameter_spec ext4_param_specs[] = {
1650 fsparam_flag ("bsddf", Opt_bsd_df),
1651 fsparam_flag ("minixdf", Opt_minix_df),
1652 fsparam_flag ("grpid", Opt_grpid),
1653 fsparam_flag ("bsdgroups", Opt_grpid),
1654 fsparam_flag ("nogrpid", Opt_nogrpid),
1655 fsparam_flag ("sysvgroups", Opt_nogrpid),
1656 fsparam_u32 ("resgid", Opt_resgid),
1657 fsparam_u32 ("resuid", Opt_resuid),
1658 fsparam_u32 ("sb", Opt_sb),
1659 fsparam_enum ("errors", Opt_errors, ext4_param_errors),
1660 fsparam_flag ("nouid32", Opt_nouid32),
1661 fsparam_flag ("debug", Opt_debug),
1662 fsparam_flag ("oldalloc", Opt_removed),
1663 fsparam_flag ("orlov", Opt_removed),
1664 fsparam_flag ("user_xattr", Opt_user_xattr),
1665 fsparam_flag ("nouser_xattr", Opt_nouser_xattr),
1666 fsparam_flag ("acl", Opt_acl),
1667 fsparam_flag ("noacl", Opt_noacl),
1668 fsparam_flag ("norecovery", Opt_noload),
1669 fsparam_flag ("noload", Opt_noload),
1670 fsparam_flag ("bh", Opt_removed),
1671 fsparam_flag ("nobh", Opt_removed),
1672 fsparam_u32 ("commit", Opt_commit),
1673 fsparam_u32 ("min_batch_time", Opt_min_batch_time),
1674 fsparam_u32 ("max_batch_time", Opt_max_batch_time),
1675 fsparam_u32 ("journal_dev", Opt_journal_dev),
1676 fsparam_bdev ("journal_path", Opt_journal_path),
1677 fsparam_flag ("journal_checksum", Opt_journal_checksum),
1678 fsparam_flag ("nojournal_checksum", Opt_nojournal_checksum),
1679 fsparam_flag ("journal_async_commit",Opt_journal_async_commit),
1680 fsparam_flag ("abort", Opt_abort),
1681 fsparam_enum ("data", Opt_data, ext4_param_data),
1682 fsparam_enum ("data_err", Opt_data_err,
1683 ext4_param_data_err),
1684 fsparam_string_empty
1685 ("usrjquota", Opt_usrjquota),
1686 fsparam_string_empty
1687 ("grpjquota", Opt_grpjquota),
1688 fsparam_enum ("jqfmt", Opt_jqfmt, ext4_param_jqfmt),
1689 fsparam_flag ("grpquota", Opt_grpquota),
1690 fsparam_flag ("quota", Opt_quota),
1691 fsparam_flag ("noquota", Opt_noquota),
1692 fsparam_flag ("usrquota", Opt_usrquota),
1693 fsparam_flag ("prjquota", Opt_prjquota),
1694 fsparam_flag ("barrier", Opt_barrier),
1695 fsparam_u32 ("barrier", Opt_barrier),
1696 fsparam_flag ("nobarrier", Opt_nobarrier),
1697 fsparam_flag ("i_version", Opt_i_version),
1698 fsparam_flag ("dax", Opt_dax),
1699 fsparam_enum ("dax", Opt_dax_type, ext4_param_dax),
1700 fsparam_u32 ("stripe", Opt_stripe),
1701 fsparam_flag ("delalloc", Opt_delalloc),
1702 fsparam_flag ("nodelalloc", Opt_nodelalloc),
1703 fsparam_flag ("warn_on_error", Opt_warn_on_error),
1704 fsparam_flag ("nowarn_on_error", Opt_nowarn_on_error),
1705 fsparam_u32 ("debug_want_extra_isize",
1706 Opt_debug_want_extra_isize),
1707 fsparam_flag ("mblk_io_submit", Opt_removed),
1708 fsparam_flag ("nomblk_io_submit", Opt_removed),
1709 fsparam_flag ("block_validity", Opt_block_validity),
1710 fsparam_flag ("noblock_validity", Opt_noblock_validity),
1711 fsparam_u32 ("inode_readahead_blks",
1712 Opt_inode_readahead_blks),
1713 fsparam_u32 ("journal_ioprio", Opt_journal_ioprio),
1714 fsparam_u32 ("auto_da_alloc", Opt_auto_da_alloc),
1715 fsparam_flag ("auto_da_alloc", Opt_auto_da_alloc),
1716 fsparam_flag ("noauto_da_alloc", Opt_noauto_da_alloc),
1717 fsparam_flag ("dioread_nolock", Opt_dioread_nolock),
1718 fsparam_flag ("nodioread_nolock", Opt_dioread_lock),
1719 fsparam_flag ("dioread_lock", Opt_dioread_lock),
1720 fsparam_flag ("discard", Opt_discard),
1721 fsparam_flag ("nodiscard", Opt_nodiscard),
1722 fsparam_u32 ("init_itable", Opt_init_itable),
1723 fsparam_flag ("init_itable", Opt_init_itable),
1724 fsparam_flag ("noinit_itable", Opt_noinit_itable),
1725 #ifdef CONFIG_EXT4_DEBUG
1726 fsparam_flag ("fc_debug_force", Opt_fc_debug_force),
1727 fsparam_u32 ("fc_debug_max_replay", Opt_fc_debug_max_replay),
1728 #endif
1729 fsparam_u32 ("max_dir_size_kb", Opt_max_dir_size_kb),
1730 fsparam_flag ("test_dummy_encryption",
1731 Opt_test_dummy_encryption),
1732 fsparam_string ("test_dummy_encryption",
1733 Opt_test_dummy_encryption),
1734 fsparam_flag ("inlinecrypt", Opt_inlinecrypt),
1735 fsparam_flag ("nombcache", Opt_nombcache),
1736 fsparam_flag ("no_mbcache", Opt_nombcache),
1737 fsparam_flag ("prefetch_block_bitmaps",
1738 Opt_removed),
1739 fsparam_flag ("no_prefetch_block_bitmaps",
1740 Opt_no_prefetch_block_bitmaps),
1741 fsparam_s32 ("mb_optimize_scan", Opt_mb_optimize_scan),
1742 fsparam_string ("check", Opt_removed),
1743 fsparam_flag ("nocheck", Opt_removed),
1744 fsparam_flag ("reservation", Opt_removed),
1745 fsparam_flag ("noreservation", Opt_removed),
1746 fsparam_u32 ("journal", Opt_removed),
1747 {}
1748 };
1749
1750 #define DEFAULT_JOURNAL_IOPRIO (IOPRIO_PRIO_VALUE(IOPRIO_CLASS_BE, 3))
1751
1752 static const char deprecated_msg[] =
1753 "Mount option \"%s\" will be removed by %s\n"
1754 "Contact linux-ext4@vger.kernel.org if you think we should keep it.\n";
1755
1756 #define MOPT_SET 0x0001
1757 #define MOPT_CLEAR 0x0002
1758 #define MOPT_NOSUPPORT 0x0004
1759 #define MOPT_EXPLICIT 0x0008
1760 #ifdef CONFIG_QUOTA
1761 #define MOPT_Q 0
1762 #define MOPT_QFMT 0x0010
1763 #else
1764 #define MOPT_Q MOPT_NOSUPPORT
1765 #define MOPT_QFMT MOPT_NOSUPPORT
1766 #endif
1767 #define MOPT_NO_EXT2 0x0020
1768 #define MOPT_NO_EXT3 0x0040
1769 #define MOPT_EXT4_ONLY (MOPT_NO_EXT2 | MOPT_NO_EXT3)
1770 #define MOPT_SKIP 0x0080
1771 #define MOPT_2 0x0100
1772
1773 static const struct mount_opts {
1774 int token;
1775 int mount_opt;
1776 int flags;
1777 } ext4_mount_opts[] = {
1778 {Opt_minix_df, EXT4_MOUNT_MINIX_DF, MOPT_SET},
1779 {Opt_bsd_df, EXT4_MOUNT_MINIX_DF, MOPT_CLEAR},
1780 {Opt_grpid, EXT4_MOUNT_GRPID, MOPT_SET},
1781 {Opt_nogrpid, EXT4_MOUNT_GRPID, MOPT_CLEAR},
1782 {Opt_block_validity, EXT4_MOUNT_BLOCK_VALIDITY, MOPT_SET},
1783 {Opt_noblock_validity, EXT4_MOUNT_BLOCK_VALIDITY, MOPT_CLEAR},
1784 {Opt_dioread_nolock, EXT4_MOUNT_DIOREAD_NOLOCK,
1785 MOPT_EXT4_ONLY | MOPT_SET},
1786 {Opt_dioread_lock, EXT4_MOUNT_DIOREAD_NOLOCK,
1787 MOPT_EXT4_ONLY | MOPT_CLEAR},
1788 {Opt_discard, EXT4_MOUNT_DISCARD, MOPT_SET},
1789 {Opt_nodiscard, EXT4_MOUNT_DISCARD, MOPT_CLEAR},
1790 {Opt_delalloc, EXT4_MOUNT_DELALLOC,
1791 MOPT_EXT4_ONLY | MOPT_SET | MOPT_EXPLICIT},
1792 {Opt_nodelalloc, EXT4_MOUNT_DELALLOC,
1793 MOPT_EXT4_ONLY | MOPT_CLEAR},
1794 {Opt_warn_on_error, EXT4_MOUNT_WARN_ON_ERROR, MOPT_SET},
1795 {Opt_nowarn_on_error, EXT4_MOUNT_WARN_ON_ERROR, MOPT_CLEAR},
1796 {Opt_commit, 0, MOPT_NO_EXT2},
1797 {Opt_nojournal_checksum, EXT4_MOUNT_JOURNAL_CHECKSUM,
1798 MOPT_EXT4_ONLY | MOPT_CLEAR},
1799 {Opt_journal_checksum, EXT4_MOUNT_JOURNAL_CHECKSUM,
1800 MOPT_EXT4_ONLY | MOPT_SET | MOPT_EXPLICIT},
1801 {Opt_journal_async_commit, (EXT4_MOUNT_JOURNAL_ASYNC_COMMIT |
1802 EXT4_MOUNT_JOURNAL_CHECKSUM),
1803 MOPT_EXT4_ONLY | MOPT_SET | MOPT_EXPLICIT},
1804 {Opt_noload, EXT4_MOUNT_NOLOAD, MOPT_NO_EXT2 | MOPT_SET},
1805 {Opt_data_err, EXT4_MOUNT_DATA_ERR_ABORT, MOPT_NO_EXT2},
1806 {Opt_barrier, EXT4_MOUNT_BARRIER, MOPT_SET},
1807 {Opt_nobarrier, EXT4_MOUNT_BARRIER, MOPT_CLEAR},
1808 {Opt_noauto_da_alloc, EXT4_MOUNT_NO_AUTO_DA_ALLOC, MOPT_SET},
1809 {Opt_auto_da_alloc, EXT4_MOUNT_NO_AUTO_DA_ALLOC, MOPT_CLEAR},
1810 {Opt_noinit_itable, EXT4_MOUNT_INIT_INODE_TABLE, MOPT_CLEAR},
1811 {Opt_dax_type, 0, MOPT_EXT4_ONLY},
1812 {Opt_journal_dev, 0, MOPT_NO_EXT2},
1813 {Opt_journal_path, 0, MOPT_NO_EXT2},
1814 {Opt_journal_ioprio, 0, MOPT_NO_EXT2},
1815 {Opt_data, 0, MOPT_NO_EXT2},
1816 {Opt_user_xattr, EXT4_MOUNT_XATTR_USER, MOPT_SET},
1817 {Opt_nouser_xattr, EXT4_MOUNT_XATTR_USER, MOPT_CLEAR},
1818 #ifdef CONFIG_EXT4_FS_POSIX_ACL
1819 {Opt_acl, EXT4_MOUNT_POSIX_ACL, MOPT_SET},
1820 {Opt_noacl, EXT4_MOUNT_POSIX_ACL, MOPT_CLEAR},
1821 #else
1822 {Opt_acl, 0, MOPT_NOSUPPORT},
1823 {Opt_noacl, 0, MOPT_NOSUPPORT},
1824 #endif
1825 {Opt_nouid32, EXT4_MOUNT_NO_UID32, MOPT_SET},
1826 {Opt_debug, EXT4_MOUNT_DEBUG, MOPT_SET},
1827 {Opt_quota, EXT4_MOUNT_QUOTA | EXT4_MOUNT_USRQUOTA, MOPT_SET | MOPT_Q},
1828 {Opt_usrquota, EXT4_MOUNT_QUOTA | EXT4_MOUNT_USRQUOTA,
1829 MOPT_SET | MOPT_Q},
1830 {Opt_grpquota, EXT4_MOUNT_QUOTA | EXT4_MOUNT_GRPQUOTA,
1831 MOPT_SET | MOPT_Q},
1832 {Opt_prjquota, EXT4_MOUNT_QUOTA | EXT4_MOUNT_PRJQUOTA,
1833 MOPT_SET | MOPT_Q},
1834 {Opt_noquota, (EXT4_MOUNT_QUOTA | EXT4_MOUNT_USRQUOTA |
1835 EXT4_MOUNT_GRPQUOTA | EXT4_MOUNT_PRJQUOTA),
1836 MOPT_CLEAR | MOPT_Q},
1837 {Opt_usrjquota, 0, MOPT_Q},
1838 {Opt_grpjquota, 0, MOPT_Q},
1839 {Opt_jqfmt, 0, MOPT_QFMT},
1840 {Opt_nombcache, EXT4_MOUNT_NO_MBCACHE, MOPT_SET},
1841 {Opt_no_prefetch_block_bitmaps, EXT4_MOUNT_NO_PREFETCH_BLOCK_BITMAPS,
1842 MOPT_SET},
1843 #ifdef CONFIG_EXT4_DEBUG
1844 {Opt_fc_debug_force, EXT4_MOUNT2_JOURNAL_FAST_COMMIT,
1845 MOPT_SET | MOPT_2 | MOPT_EXT4_ONLY},
1846 #endif
1847 {Opt_err, 0, 0}
1848 };
1849
1850 #if IS_ENABLED(CONFIG_UNICODE)
1851 static const struct ext4_sb_encodings {
1852 __u16 magic;
1853 char *name;
1854 unsigned int version;
1855 } ext4_sb_encoding_map[] = {
1856 {EXT4_ENC_UTF8_12_1, "utf8", UNICODE_AGE(12, 1, 0)},
1857 };
1858
1859 static const struct ext4_sb_encodings *
1860 ext4_sb_read_encoding(const struct ext4_super_block *es)
1861 {
1862 __u16 magic = le16_to_cpu(es->s_encoding);
1863 int i;
1864
1865 for (i = 0; i < ARRAY_SIZE(ext4_sb_encoding_map); i++)
1866 if (magic == ext4_sb_encoding_map[i].magic)
1867 return &ext4_sb_encoding_map[i];
1868
1869 return NULL;
1870 }
1871 #endif
1872
1873 #define EXT4_SPEC_JQUOTA (1 << 0)
1874 #define EXT4_SPEC_JQFMT (1 << 1)
1875 #define EXT4_SPEC_DATAJ (1 << 2)
1876 #define EXT4_SPEC_SB_BLOCK (1 << 3)
1877 #define EXT4_SPEC_JOURNAL_DEV (1 << 4)
1878 #define EXT4_SPEC_JOURNAL_IOPRIO (1 << 5)
1879 #define EXT4_SPEC_s_want_extra_isize (1 << 7)
1880 #define EXT4_SPEC_s_max_batch_time (1 << 8)
1881 #define EXT4_SPEC_s_min_batch_time (1 << 9)
1882 #define EXT4_SPEC_s_inode_readahead_blks (1 << 10)
1883 #define EXT4_SPEC_s_li_wait_mult (1 << 11)
1884 #define EXT4_SPEC_s_max_dir_size_kb (1 << 12)
1885 #define EXT4_SPEC_s_stripe (1 << 13)
1886 #define EXT4_SPEC_s_resuid (1 << 14)
1887 #define EXT4_SPEC_s_resgid (1 << 15)
1888 #define EXT4_SPEC_s_commit_interval (1 << 16)
1889 #define EXT4_SPEC_s_fc_debug_max_replay (1 << 17)
1890 #define EXT4_SPEC_s_sb_block (1 << 18)
1891 #define EXT4_SPEC_mb_optimize_scan (1 << 19)
1892
1893 struct ext4_fs_context {
1894 char *s_qf_names[EXT4_MAXQUOTAS];
1895 struct fscrypt_dummy_policy dummy_enc_policy;
1896 int s_jquota_fmt;
1897 #ifdef CONFIG_EXT4_DEBUG
1898 int s_fc_debug_max_replay;
1899 #endif
1900 unsigned short qname_spec;
1901 unsigned long vals_s_flags;
1902 unsigned long mask_s_flags;
1903 unsigned long journal_devnum;
1904 unsigned long s_commit_interval;
1905 unsigned long s_stripe;
1906 unsigned int s_inode_readahead_blks;
1907 unsigned int s_want_extra_isize;
1908 unsigned int s_li_wait_mult;
1909 unsigned int s_max_dir_size_kb;
1910 unsigned int journal_ioprio;
1911 unsigned int vals_s_mount_opt;
1912 unsigned int mask_s_mount_opt;
1913 unsigned int vals_s_mount_opt2;
1914 unsigned int mask_s_mount_opt2;
1915 unsigned long vals_s_mount_flags;
1916 unsigned long mask_s_mount_flags;
1917 unsigned int opt_flags;
1918 unsigned int spec;
1919 u32 s_max_batch_time;
1920 u32 s_min_batch_time;
1921 kuid_t s_resuid;
1922 kgid_t s_resgid;
1923 ext4_fsblk_t s_sb_block;
1924 };
1925
1926 static void ext4_fc_free(struct fs_context *fc)
1927 {
1928 struct ext4_fs_context *ctx = fc->fs_private;
1929 int i;
1930
1931 if (!ctx)
1932 return;
1933
1934 for (i = 0; i < EXT4_MAXQUOTAS; i++)
1935 kfree(ctx->s_qf_names[i]);
1936
1937 fscrypt_free_dummy_policy(&ctx->dummy_enc_policy);
1938 kfree(ctx);
1939 }
1940
1941 int ext4_init_fs_context(struct fs_context *fc)
1942 {
1943 struct ext4_fs_context *ctx;
1944
1945 ctx = kzalloc(sizeof(struct ext4_fs_context), GFP_KERNEL);
1946 if (!ctx)
1947 return -ENOMEM;
1948
1949 fc->fs_private = ctx;
1950 fc->ops = &ext4_context_ops;
1951
1952 return 0;
1953 }
1954
1955 #ifdef CONFIG_QUOTA
1956
1957
1958
1959 static int note_qf_name(struct fs_context *fc, int qtype,
1960 struct fs_parameter *param)
1961 {
1962 struct ext4_fs_context *ctx = fc->fs_private;
1963 char *qname;
1964
1965 if (param->size < 1) {
1966 ext4_msg(NULL, KERN_ERR, "Missing quota name");
1967 return -EINVAL;
1968 }
1969 if (strchr(param->string, '/')) {
1970 ext4_msg(NULL, KERN_ERR,
1971 "quotafile must be on filesystem root");
1972 return -EINVAL;
1973 }
1974 if (ctx->s_qf_names[qtype]) {
1975 if (strcmp(ctx->s_qf_names[qtype], param->string) != 0) {
1976 ext4_msg(NULL, KERN_ERR,
1977 "%s quota file already specified",
1978 QTYPE2NAME(qtype));
1979 return -EINVAL;
1980 }
1981 return 0;
1982 }
1983
1984 qname = kmemdup_nul(param->string, param->size, GFP_KERNEL);
1985 if (!qname) {
1986 ext4_msg(NULL, KERN_ERR,
1987 "Not enough memory for storing quotafile name");
1988 return -ENOMEM;
1989 }
1990 ctx->s_qf_names[qtype] = qname;
1991 ctx->qname_spec |= 1 << qtype;
1992 ctx->spec |= EXT4_SPEC_JQUOTA;
1993 return 0;
1994 }
1995
1996
1997
1998
1999 static int unnote_qf_name(struct fs_context *fc, int qtype)
2000 {
2001 struct ext4_fs_context *ctx = fc->fs_private;
2002
2003 if (ctx->s_qf_names[qtype])
2004 kfree(ctx->s_qf_names[qtype]);
2005
2006 ctx->s_qf_names[qtype] = NULL;
2007 ctx->qname_spec |= 1 << qtype;
2008 ctx->spec |= EXT4_SPEC_JQUOTA;
2009 return 0;
2010 }
2011 #endif
2012
2013 static int ext4_parse_test_dummy_encryption(const struct fs_parameter *param,
2014 struct ext4_fs_context *ctx)
2015 {
2016 int err;
2017
2018 if (!IS_ENABLED(CONFIG_FS_ENCRYPTION)) {
2019 ext4_msg(NULL, KERN_WARNING,
2020 "test_dummy_encryption option not supported");
2021 return -EINVAL;
2022 }
2023 err = fscrypt_parse_test_dummy_encryption(param,
2024 &ctx->dummy_enc_policy);
2025 if (err == -EINVAL) {
2026 ext4_msg(NULL, KERN_WARNING,
2027 "Value of option \"%s\" is unrecognized", param->key);
2028 } else if (err == -EEXIST) {
2029 ext4_msg(NULL, KERN_WARNING,
2030 "Conflicting test_dummy_encryption options");
2031 return -EINVAL;
2032 }
2033 return err;
2034 }
2035
2036 #define EXT4_SET_CTX(name) \
2037 static inline void ctx_set_##name(struct ext4_fs_context *ctx, \
2038 unsigned long flag) \
2039 { \
2040 ctx->mask_s_##name |= flag; \
2041 ctx->vals_s_##name |= flag; \
2042 }
2043
2044 #define EXT4_CLEAR_CTX(name) \
2045 static inline void ctx_clear_##name(struct ext4_fs_context *ctx, \
2046 unsigned long flag) \
2047 { \
2048 ctx->mask_s_##name |= flag; \
2049 ctx->vals_s_##name &= ~flag; \
2050 }
2051
2052 #define EXT4_TEST_CTX(name) \
2053 static inline unsigned long \
2054 ctx_test_##name(struct ext4_fs_context *ctx, unsigned long flag) \
2055 { \
2056 return (ctx->vals_s_##name & flag); \
2057 }
2058
2059 EXT4_SET_CTX(flags);
2060 EXT4_SET_CTX(mount_opt);
2061 EXT4_CLEAR_CTX(mount_opt);
2062 EXT4_TEST_CTX(mount_opt);
2063 EXT4_SET_CTX(mount_opt2);
2064 EXT4_CLEAR_CTX(mount_opt2);
2065 EXT4_TEST_CTX(mount_opt2);
2066
2067 static inline void ctx_set_mount_flag(struct ext4_fs_context *ctx, int bit)
2068 {
2069 set_bit(bit, &ctx->mask_s_mount_flags);
2070 set_bit(bit, &ctx->vals_s_mount_flags);
2071 }
2072
2073 static int ext4_parse_param(struct fs_context *fc, struct fs_parameter *param)
2074 {
2075 struct ext4_fs_context *ctx = fc->fs_private;
2076 struct fs_parse_result result;
2077 const struct mount_opts *m;
2078 int is_remount;
2079 kuid_t uid;
2080 kgid_t gid;
2081 int token;
2082
2083 token = fs_parse(fc, ext4_param_specs, param, &result);
2084 if (token < 0)
2085 return token;
2086 is_remount = fc->purpose == FS_CONTEXT_FOR_RECONFIGURE;
2087
2088 for (m = ext4_mount_opts; m->token != Opt_err; m++)
2089 if (token == m->token)
2090 break;
2091
2092 ctx->opt_flags |= m->flags;
2093
2094 if (m->flags & MOPT_EXPLICIT) {
2095 if (m->mount_opt & EXT4_MOUNT_DELALLOC) {
2096 ctx_set_mount_opt2(ctx, EXT4_MOUNT2_EXPLICIT_DELALLOC);
2097 } else if (m->mount_opt & EXT4_MOUNT_JOURNAL_CHECKSUM) {
2098 ctx_set_mount_opt2(ctx,
2099 EXT4_MOUNT2_EXPLICIT_JOURNAL_CHECKSUM);
2100 } else
2101 return -EINVAL;
2102 }
2103
2104 if (m->flags & MOPT_NOSUPPORT) {
2105 ext4_msg(NULL, KERN_ERR, "%s option not supported",
2106 param->key);
2107 return 0;
2108 }
2109
2110 switch (token) {
2111 #ifdef CONFIG_QUOTA
2112 case Opt_usrjquota:
2113 if (!*param->string)
2114 return unnote_qf_name(fc, USRQUOTA);
2115 else
2116 return note_qf_name(fc, USRQUOTA, param);
2117 case Opt_grpjquota:
2118 if (!*param->string)
2119 return unnote_qf_name(fc, GRPQUOTA);
2120 else
2121 return note_qf_name(fc, GRPQUOTA, param);
2122 #endif
2123 case Opt_noacl:
2124 case Opt_nouser_xattr:
2125 ext4_msg(NULL, KERN_WARNING, deprecated_msg, param->key, "3.5");
2126 break;
2127 case Opt_sb:
2128 if (fc->purpose == FS_CONTEXT_FOR_RECONFIGURE) {
2129 ext4_msg(NULL, KERN_WARNING,
2130 "Ignoring %s option on remount", param->key);
2131 } else {
2132 ctx->s_sb_block = result.uint_32;
2133 ctx->spec |= EXT4_SPEC_s_sb_block;
2134 }
2135 return 0;
2136 case Opt_removed:
2137 ext4_msg(NULL, KERN_WARNING, "Ignoring removed %s option",
2138 param->key);
2139 return 0;
2140 case Opt_abort:
2141 ctx_set_mount_flag(ctx, EXT4_MF_FS_ABORTED);
2142 return 0;
2143 case Opt_i_version:
2144 ext4_msg(NULL, KERN_WARNING, deprecated_msg, param->key, "5.20");
2145 ext4_msg(NULL, KERN_WARNING, "Use iversion instead\n");
2146 ctx_set_flags(ctx, SB_I_VERSION);
2147 return 0;
2148 case Opt_inlinecrypt:
2149 #ifdef CONFIG_FS_ENCRYPTION_INLINE_CRYPT
2150 ctx_set_flags(ctx, SB_INLINECRYPT);
2151 #else
2152 ext4_msg(NULL, KERN_ERR, "inline encryption not supported");
2153 #endif
2154 return 0;
2155 case Opt_errors:
2156 ctx_clear_mount_opt(ctx, EXT4_MOUNT_ERRORS_MASK);
2157 ctx_set_mount_opt(ctx, result.uint_32);
2158 return 0;
2159 #ifdef CONFIG_QUOTA
2160 case Opt_jqfmt:
2161 ctx->s_jquota_fmt = result.uint_32;
2162 ctx->spec |= EXT4_SPEC_JQFMT;
2163 return 0;
2164 #endif
2165 case Opt_data:
2166 ctx_clear_mount_opt(ctx, EXT4_MOUNT_DATA_FLAGS);
2167 ctx_set_mount_opt(ctx, result.uint_32);
2168 ctx->spec |= EXT4_SPEC_DATAJ;
2169 return 0;
2170 case Opt_commit:
2171 if (result.uint_32 == 0)
2172 ctx->s_commit_interval = JBD2_DEFAULT_MAX_COMMIT_AGE;
2173 else if (result.uint_32 > INT_MAX / HZ) {
2174 ext4_msg(NULL, KERN_ERR,
2175 "Invalid commit interval %d, "
2176 "must be smaller than %d",
2177 result.uint_32, INT_MAX / HZ);
2178 return -EINVAL;
2179 }
2180 ctx->s_commit_interval = HZ * result.uint_32;
2181 ctx->spec |= EXT4_SPEC_s_commit_interval;
2182 return 0;
2183 case Opt_debug_want_extra_isize:
2184 if ((result.uint_32 & 1) || (result.uint_32 < 4)) {
2185 ext4_msg(NULL, KERN_ERR,
2186 "Invalid want_extra_isize %d", result.uint_32);
2187 return -EINVAL;
2188 }
2189 ctx->s_want_extra_isize = result.uint_32;
2190 ctx->spec |= EXT4_SPEC_s_want_extra_isize;
2191 return 0;
2192 case Opt_max_batch_time:
2193 ctx->s_max_batch_time = result.uint_32;
2194 ctx->spec |= EXT4_SPEC_s_max_batch_time;
2195 return 0;
2196 case Opt_min_batch_time:
2197 ctx->s_min_batch_time = result.uint_32;
2198 ctx->spec |= EXT4_SPEC_s_min_batch_time;
2199 return 0;
2200 case Opt_inode_readahead_blks:
2201 if (result.uint_32 &&
2202 (result.uint_32 > (1 << 30) ||
2203 !is_power_of_2(result.uint_32))) {
2204 ext4_msg(NULL, KERN_ERR,
2205 "EXT4-fs: inode_readahead_blks must be "
2206 "0 or a power of 2 smaller than 2^31");
2207 return -EINVAL;
2208 }
2209 ctx->s_inode_readahead_blks = result.uint_32;
2210 ctx->spec |= EXT4_SPEC_s_inode_readahead_blks;
2211 return 0;
2212 case Opt_init_itable:
2213 ctx_set_mount_opt(ctx, EXT4_MOUNT_INIT_INODE_TABLE);
2214 ctx->s_li_wait_mult = EXT4_DEF_LI_WAIT_MULT;
2215 if (param->type == fs_value_is_string)
2216 ctx->s_li_wait_mult = result.uint_32;
2217 ctx->spec |= EXT4_SPEC_s_li_wait_mult;
2218 return 0;
2219 case Opt_max_dir_size_kb:
2220 ctx->s_max_dir_size_kb = result.uint_32;
2221 ctx->spec |= EXT4_SPEC_s_max_dir_size_kb;
2222 return 0;
2223 #ifdef CONFIG_EXT4_DEBUG
2224 case Opt_fc_debug_max_replay:
2225 ctx->s_fc_debug_max_replay = result.uint_32;
2226 ctx->spec |= EXT4_SPEC_s_fc_debug_max_replay;
2227 return 0;
2228 #endif
2229 case Opt_stripe:
2230 ctx->s_stripe = result.uint_32;
2231 ctx->spec |= EXT4_SPEC_s_stripe;
2232 return 0;
2233 case Opt_resuid:
2234 uid = make_kuid(current_user_ns(), result.uint_32);
2235 if (!uid_valid(uid)) {
2236 ext4_msg(NULL, KERN_ERR, "Invalid uid value %d",
2237 result.uint_32);
2238 return -EINVAL;
2239 }
2240 ctx->s_resuid = uid;
2241 ctx->spec |= EXT4_SPEC_s_resuid;
2242 return 0;
2243 case Opt_resgid:
2244 gid = make_kgid(current_user_ns(), result.uint_32);
2245 if (!gid_valid(gid)) {
2246 ext4_msg(NULL, KERN_ERR, "Invalid gid value %d",
2247 result.uint_32);
2248 return -EINVAL;
2249 }
2250 ctx->s_resgid = gid;
2251 ctx->spec |= EXT4_SPEC_s_resgid;
2252 return 0;
2253 case Opt_journal_dev:
2254 if (is_remount) {
2255 ext4_msg(NULL, KERN_ERR,
2256 "Cannot specify journal on remount");
2257 return -EINVAL;
2258 }
2259 ctx->journal_devnum = result.uint_32;
2260 ctx->spec |= EXT4_SPEC_JOURNAL_DEV;
2261 return 0;
2262 case Opt_journal_path:
2263 {
2264 struct inode *journal_inode;
2265 struct path path;
2266 int error;
2267
2268 if (is_remount) {
2269 ext4_msg(NULL, KERN_ERR,
2270 "Cannot specify journal on remount");
2271 return -EINVAL;
2272 }
2273
2274 error = fs_lookup_param(fc, param, 1, &path);
2275 if (error) {
2276 ext4_msg(NULL, KERN_ERR, "error: could not find "
2277 "journal device path");
2278 return -EINVAL;
2279 }
2280
2281 journal_inode = d_inode(path.dentry);
2282 ctx->journal_devnum = new_encode_dev(journal_inode->i_rdev);
2283 ctx->spec |= EXT4_SPEC_JOURNAL_DEV;
2284 path_put(&path);
2285 return 0;
2286 }
2287 case Opt_journal_ioprio:
2288 if (result.uint_32 > 7) {
2289 ext4_msg(NULL, KERN_ERR, "Invalid journal IO priority"
2290 " (must be 0-7)");
2291 return -EINVAL;
2292 }
2293 ctx->journal_ioprio =
2294 IOPRIO_PRIO_VALUE(IOPRIO_CLASS_BE, result.uint_32);
2295 ctx->spec |= EXT4_SPEC_JOURNAL_IOPRIO;
2296 return 0;
2297 case Opt_test_dummy_encryption:
2298 return ext4_parse_test_dummy_encryption(param, ctx);
2299 case Opt_dax:
2300 case Opt_dax_type:
2301 #ifdef CONFIG_FS_DAX
2302 {
2303 int type = (token == Opt_dax) ?
2304 Opt_dax : result.uint_32;
2305
2306 switch (type) {
2307 case Opt_dax:
2308 case Opt_dax_always:
2309 ctx_set_mount_opt(ctx, EXT4_MOUNT_DAX_ALWAYS);
2310 ctx_clear_mount_opt2(ctx, EXT4_MOUNT2_DAX_NEVER);
2311 break;
2312 case Opt_dax_never:
2313 ctx_set_mount_opt2(ctx, EXT4_MOUNT2_DAX_NEVER);
2314 ctx_clear_mount_opt(ctx, EXT4_MOUNT_DAX_ALWAYS);
2315 break;
2316 case Opt_dax_inode:
2317 ctx_clear_mount_opt(ctx, EXT4_MOUNT_DAX_ALWAYS);
2318 ctx_clear_mount_opt2(ctx, EXT4_MOUNT2_DAX_NEVER);
2319
2320 ctx_set_mount_opt2(ctx, EXT4_MOUNT2_DAX_INODE);
2321 break;
2322 }
2323 return 0;
2324 }
2325 #else
2326 ext4_msg(NULL, KERN_INFO, "dax option not supported");
2327 return -EINVAL;
2328 #endif
2329 case Opt_data_err:
2330 if (result.uint_32 == Opt_data_err_abort)
2331 ctx_set_mount_opt(ctx, m->mount_opt);
2332 else if (result.uint_32 == Opt_data_err_ignore)
2333 ctx_clear_mount_opt(ctx, m->mount_opt);
2334 return 0;
2335 case Opt_mb_optimize_scan:
2336 if (result.int_32 == 1) {
2337 ctx_set_mount_opt2(ctx, EXT4_MOUNT2_MB_OPTIMIZE_SCAN);
2338 ctx->spec |= EXT4_SPEC_mb_optimize_scan;
2339 } else if (result.int_32 == 0) {
2340 ctx_clear_mount_opt2(ctx, EXT4_MOUNT2_MB_OPTIMIZE_SCAN);
2341 ctx->spec |= EXT4_SPEC_mb_optimize_scan;
2342 } else {
2343 ext4_msg(NULL, KERN_WARNING,
2344 "mb_optimize_scan should be set to 0 or 1.");
2345 return -EINVAL;
2346 }
2347 return 0;
2348 }
2349
2350
2351
2352
2353
2354 if (m->token == Opt_err) {
2355 ext4_msg(NULL, KERN_WARNING, "buggy handling of option %s",
2356 param->key);
2357 WARN_ON(1);
2358 return -EINVAL;
2359 }
2360
2361 else {
2362 unsigned int set = 0;
2363
2364 if ((param->type == fs_value_is_flag) ||
2365 result.uint_32 > 0)
2366 set = 1;
2367
2368 if (m->flags & MOPT_CLEAR)
2369 set = !set;
2370 else if (unlikely(!(m->flags & MOPT_SET))) {
2371 ext4_msg(NULL, KERN_WARNING,
2372 "buggy handling of option %s",
2373 param->key);
2374 WARN_ON(1);
2375 return -EINVAL;
2376 }
2377 if (m->flags & MOPT_2) {
2378 if (set != 0)
2379 ctx_set_mount_opt2(ctx, m->mount_opt);
2380 else
2381 ctx_clear_mount_opt2(ctx, m->mount_opt);
2382 } else {
2383 if (set != 0)
2384 ctx_set_mount_opt(ctx, m->mount_opt);
2385 else
2386 ctx_clear_mount_opt(ctx, m->mount_opt);
2387 }
2388 }
2389
2390 return 0;
2391 }
2392
2393 static int parse_options(struct fs_context *fc, char *options)
2394 {
2395 struct fs_parameter param;
2396 int ret;
2397 char *key;
2398
2399 if (!options)
2400 return 0;
2401
2402 while ((key = strsep(&options, ",")) != NULL) {
2403 if (*key) {
2404 size_t v_len = 0;
2405 char *value = strchr(key, '=');
2406
2407 param.type = fs_value_is_flag;
2408 param.string = NULL;
2409
2410 if (value) {
2411 if (value == key)
2412 continue;
2413
2414 *value++ = 0;
2415 v_len = strlen(value);
2416 param.string = kmemdup_nul(value, v_len,
2417 GFP_KERNEL);
2418 if (!param.string)
2419 return -ENOMEM;
2420 param.type = fs_value_is_string;
2421 }
2422
2423 param.key = key;
2424 param.size = v_len;
2425
2426 ret = ext4_parse_param(fc, ¶m);
2427 if (param.string)
2428 kfree(param.string);
2429 if (ret < 0)
2430 return ret;
2431 }
2432 }
2433
2434 ret = ext4_validate_options(fc);
2435 if (ret < 0)
2436 return ret;
2437
2438 return 0;
2439 }
2440
2441 static int parse_apply_sb_mount_options(struct super_block *sb,
2442 struct ext4_fs_context *m_ctx)
2443 {
2444 struct ext4_sb_info *sbi = EXT4_SB(sb);
2445 char *s_mount_opts = NULL;
2446 struct ext4_fs_context *s_ctx = NULL;
2447 struct fs_context *fc = NULL;
2448 int ret = -ENOMEM;
2449
2450 if (!sbi->s_es->s_mount_opts[0])
2451 return 0;
2452
2453 s_mount_opts = kstrndup(sbi->s_es->s_mount_opts,
2454 sizeof(sbi->s_es->s_mount_opts),
2455 GFP_KERNEL);
2456 if (!s_mount_opts)
2457 return ret;
2458
2459 fc = kzalloc(sizeof(struct fs_context), GFP_KERNEL);
2460 if (!fc)
2461 goto out_free;
2462
2463 s_ctx = kzalloc(sizeof(struct ext4_fs_context), GFP_KERNEL);
2464 if (!s_ctx)
2465 goto out_free;
2466
2467 fc->fs_private = s_ctx;
2468 fc->s_fs_info = sbi;
2469
2470 ret = parse_options(fc, s_mount_opts);
2471 if (ret < 0)
2472 goto parse_failed;
2473
2474 ret = ext4_check_opt_consistency(fc, sb);
2475 if (ret < 0) {
2476 parse_failed:
2477 ext4_msg(sb, KERN_WARNING,
2478 "failed to parse options in superblock: %s",
2479 s_mount_opts);
2480 ret = 0;
2481 goto out_free;
2482 }
2483
2484 if (s_ctx->spec & EXT4_SPEC_JOURNAL_DEV)
2485 m_ctx->journal_devnum = s_ctx->journal_devnum;
2486 if (s_ctx->spec & EXT4_SPEC_JOURNAL_IOPRIO)
2487 m_ctx->journal_ioprio = s_ctx->journal_ioprio;
2488
2489 ext4_apply_options(fc, sb);
2490 ret = 0;
2491
2492 out_free:
2493 if (fc) {
2494 ext4_fc_free(fc);
2495 kfree(fc);
2496 }
2497 kfree(s_mount_opts);
2498 return ret;
2499 }
2500
2501 static void ext4_apply_quota_options(struct fs_context *fc,
2502 struct super_block *sb)
2503 {
2504 #ifdef CONFIG_QUOTA
2505 bool quota_feature = ext4_has_feature_quota(sb);
2506 struct ext4_fs_context *ctx = fc->fs_private;
2507 struct ext4_sb_info *sbi = EXT4_SB(sb);
2508 char *qname;
2509 int i;
2510
2511 if (quota_feature)
2512 return;
2513
2514 if (ctx->spec & EXT4_SPEC_JQUOTA) {
2515 for (i = 0; i < EXT4_MAXQUOTAS; i++) {
2516 if (!(ctx->qname_spec & (1 << i)))
2517 continue;
2518
2519 qname = ctx->s_qf_names[i];
2520 if (qname)
2521 set_opt(sb, QUOTA);
2522 ctx->s_qf_names[i] = NULL;
2523 qname = rcu_replace_pointer(sbi->s_qf_names[i], qname,
2524 lockdep_is_held(&sb->s_umount));
2525 if (qname)
2526 kfree_rcu(qname);
2527 }
2528 }
2529
2530 if (ctx->spec & EXT4_SPEC_JQFMT)
2531 sbi->s_jquota_fmt = ctx->s_jquota_fmt;
2532 #endif
2533 }
2534
2535
2536
2537
2538 static int ext4_check_quota_consistency(struct fs_context *fc,
2539 struct super_block *sb)
2540 {
2541 #ifdef CONFIG_QUOTA
2542 struct ext4_fs_context *ctx = fc->fs_private;
2543 struct ext4_sb_info *sbi = EXT4_SB(sb);
2544 bool quota_feature = ext4_has_feature_quota(sb);
2545 bool quota_loaded = sb_any_quota_loaded(sb);
2546 bool usr_qf_name, grp_qf_name, usrquota, grpquota;
2547 int quota_flags, i;
2548
2549
2550
2551
2552
2553
2554 if (ctx_test_mount_opt(ctx, EXT4_MOUNT_PRJQUOTA) &&
2555 !ext4_has_feature_project(sb)) {
2556 ext4_msg(NULL, KERN_ERR, "Project quota feature not enabled. "
2557 "Cannot enable project quota enforcement.");
2558 return -EINVAL;
2559 }
2560
2561 quota_flags = EXT4_MOUNT_QUOTA | EXT4_MOUNT_USRQUOTA |
2562 EXT4_MOUNT_GRPQUOTA | EXT4_MOUNT_PRJQUOTA;
2563 if (quota_loaded &&
2564 ctx->mask_s_mount_opt & quota_flags &&
2565 !ctx_test_mount_opt(ctx, quota_flags))
2566 goto err_quota_change;
2567
2568 if (ctx->spec & EXT4_SPEC_JQUOTA) {
2569
2570 for (i = 0; i < EXT4_MAXQUOTAS; i++) {
2571 if (!(ctx->qname_spec & (1 << i)))
2572 continue;
2573
2574 if (quota_loaded &&
2575 !!sbi->s_qf_names[i] != !!ctx->s_qf_names[i])
2576 goto err_jquota_change;
2577
2578 if (sbi->s_qf_names[i] && ctx->s_qf_names[i] &&
2579 strcmp(get_qf_name(sb, sbi, i),
2580 ctx->s_qf_names[i]) != 0)
2581 goto err_jquota_specified;
2582 }
2583
2584 if (quota_feature) {
2585 ext4_msg(NULL, KERN_INFO,
2586 "Journaled quota options ignored when "
2587 "QUOTA feature is enabled");
2588 return 0;
2589 }
2590 }
2591
2592 if (ctx->spec & EXT4_SPEC_JQFMT) {
2593 if (sbi->s_jquota_fmt != ctx->s_jquota_fmt && quota_loaded)
2594 goto err_jquota_change;
2595 if (quota_feature) {
2596 ext4_msg(NULL, KERN_INFO, "Quota format mount options "
2597 "ignored when QUOTA feature is enabled");
2598 return 0;
2599 }
2600 }
2601
2602
2603 usr_qf_name = (get_qf_name(sb, sbi, USRQUOTA) ||
2604 ctx->s_qf_names[USRQUOTA]);
2605 grp_qf_name = (get_qf_name(sb, sbi, GRPQUOTA) ||
2606 ctx->s_qf_names[GRPQUOTA]);
2607
2608 usrquota = (ctx_test_mount_opt(ctx, EXT4_MOUNT_USRQUOTA) ||
2609 test_opt(sb, USRQUOTA));
2610
2611 grpquota = (ctx_test_mount_opt(ctx, EXT4_MOUNT_GRPQUOTA) ||
2612 test_opt(sb, GRPQUOTA));
2613
2614 if (usr_qf_name) {
2615 ctx_clear_mount_opt(ctx, EXT4_MOUNT_USRQUOTA);
2616 usrquota = false;
2617 }
2618 if (grp_qf_name) {
2619 ctx_clear_mount_opt(ctx, EXT4_MOUNT_GRPQUOTA);
2620 grpquota = false;
2621 }
2622
2623 if (usr_qf_name || grp_qf_name) {
2624 if (usrquota || grpquota) {
2625 ext4_msg(NULL, KERN_ERR, "old and new quota "
2626 "format mixing");
2627 return -EINVAL;
2628 }
2629
2630 if (!(ctx->spec & EXT4_SPEC_JQFMT || sbi->s_jquota_fmt)) {
2631 ext4_msg(NULL, KERN_ERR, "journaled quota format "
2632 "not specified");
2633 return -EINVAL;
2634 }
2635 }
2636
2637 return 0;
2638
2639 err_quota_change:
2640 ext4_msg(NULL, KERN_ERR,
2641 "Cannot change quota options when quota turned on");
2642 return -EINVAL;
2643 err_jquota_change:
2644 ext4_msg(NULL, KERN_ERR, "Cannot change journaled quota "
2645 "options when quota turned on");
2646 return -EINVAL;
2647 err_jquota_specified:
2648 ext4_msg(NULL, KERN_ERR, "%s quota file already specified",
2649 QTYPE2NAME(i));
2650 return -EINVAL;
2651 #else
2652 return 0;
2653 #endif
2654 }
2655
2656 static int ext4_check_test_dummy_encryption(const struct fs_context *fc,
2657 struct super_block *sb)
2658 {
2659 const struct ext4_fs_context *ctx = fc->fs_private;
2660 const struct ext4_sb_info *sbi = EXT4_SB(sb);
2661 int err;
2662
2663 if (!fscrypt_is_dummy_policy_set(&ctx->dummy_enc_policy))
2664 return 0;
2665
2666 if (!ext4_has_feature_encrypt(sb)) {
2667 ext4_msg(NULL, KERN_WARNING,
2668 "test_dummy_encryption requires encrypt feature");
2669 return -EINVAL;
2670 }
2671
2672
2673
2674
2675
2676
2677 if (fc->purpose == FS_CONTEXT_FOR_RECONFIGURE) {
2678 if (fscrypt_dummy_policies_equal(&sbi->s_dummy_enc_policy,
2679 &ctx->dummy_enc_policy))
2680 return 0;
2681 ext4_msg(NULL, KERN_WARNING,
2682 "Can't set or change test_dummy_encryption on remount");
2683 return -EINVAL;
2684 }
2685
2686 if (fscrypt_is_dummy_policy_set(&sbi->s_dummy_enc_policy)) {
2687 if (fscrypt_dummy_policies_equal(&sbi->s_dummy_enc_policy,
2688 &ctx->dummy_enc_policy))
2689 return 0;
2690 ext4_msg(NULL, KERN_WARNING,
2691 "Conflicting test_dummy_encryption options");
2692 return -EINVAL;
2693 }
2694
2695
2696
2697
2698
2699
2700 err = fscrypt_add_test_dummy_key(sb, &ctx->dummy_enc_policy);
2701 if (err)
2702 ext4_msg(NULL, KERN_WARNING,
2703 "Error adding test dummy encryption key [%d]", err);
2704 return err;
2705 }
2706
2707 static void ext4_apply_test_dummy_encryption(struct ext4_fs_context *ctx,
2708 struct super_block *sb)
2709 {
2710 if (!fscrypt_is_dummy_policy_set(&ctx->dummy_enc_policy) ||
2711
2712 fscrypt_is_dummy_policy_set(&EXT4_SB(sb)->s_dummy_enc_policy))
2713 return;
2714 EXT4_SB(sb)->s_dummy_enc_policy = ctx->dummy_enc_policy;
2715 memset(&ctx->dummy_enc_policy, 0, sizeof(ctx->dummy_enc_policy));
2716 ext4_msg(sb, KERN_WARNING, "Test dummy encryption mode enabled");
2717 }
2718
2719 static int ext4_check_opt_consistency(struct fs_context *fc,
2720 struct super_block *sb)
2721 {
2722 struct ext4_fs_context *ctx = fc->fs_private;
2723 struct ext4_sb_info *sbi = fc->s_fs_info;
2724 int is_remount = fc->purpose == FS_CONTEXT_FOR_RECONFIGURE;
2725 int err;
2726
2727 if ((ctx->opt_flags & MOPT_NO_EXT2) && IS_EXT2_SB(sb)) {
2728 ext4_msg(NULL, KERN_ERR,
2729 "Mount option(s) incompatible with ext2");
2730 return -EINVAL;
2731 }
2732 if ((ctx->opt_flags & MOPT_NO_EXT3) && IS_EXT3_SB(sb)) {
2733 ext4_msg(NULL, KERN_ERR,
2734 "Mount option(s) incompatible with ext3");
2735 return -EINVAL;
2736 }
2737
2738 if (ctx->s_want_extra_isize >
2739 (sbi->s_inode_size - EXT4_GOOD_OLD_INODE_SIZE)) {
2740 ext4_msg(NULL, KERN_ERR,
2741 "Invalid want_extra_isize %d",
2742 ctx->s_want_extra_isize);
2743 return -EINVAL;
2744 }
2745
2746 if (ctx_test_mount_opt(ctx, EXT4_MOUNT_DIOREAD_NOLOCK)) {
2747 int blocksize =
2748 BLOCK_SIZE << le32_to_cpu(sbi->s_es->s_log_block_size);
2749 if (blocksize < PAGE_SIZE)
2750 ext4_msg(NULL, KERN_WARNING, "Warning: mounting with an "
2751 "experimental mount option 'dioread_nolock' "
2752 "for blocksize < PAGE_SIZE");
2753 }
2754
2755 err = ext4_check_test_dummy_encryption(fc, sb);
2756 if (err)
2757 return err;
2758
2759 if ((ctx->spec & EXT4_SPEC_DATAJ) && is_remount) {
2760 if (!sbi->s_journal) {
2761 ext4_msg(NULL, KERN_WARNING,
2762 "Remounting file system with no journal "
2763 "so ignoring journalled data option");
2764 ctx_clear_mount_opt(ctx, EXT4_MOUNT_DATA_FLAGS);
2765 } else if (ctx_test_mount_opt(ctx, EXT4_MOUNT_DATA_FLAGS) !=
2766 test_opt(sb, DATA_FLAGS)) {
2767 ext4_msg(NULL, KERN_ERR, "Cannot change data mode "
2768 "on remount");
2769 return -EINVAL;
2770 }
2771 }
2772
2773 if (is_remount) {
2774 if (ctx_test_mount_opt(ctx, EXT4_MOUNT_DAX_ALWAYS) &&
2775 (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA)) {
2776 ext4_msg(NULL, KERN_ERR, "can't mount with "
2777 "both data=journal and dax");
2778 return -EINVAL;
2779 }
2780
2781 if (ctx_test_mount_opt(ctx, EXT4_MOUNT_DAX_ALWAYS) &&
2782 (!(sbi->s_mount_opt & EXT4_MOUNT_DAX_ALWAYS) ||
2783 (sbi->s_mount_opt2 & EXT4_MOUNT2_DAX_NEVER))) {
2784 fail_dax_change_remount:
2785 ext4_msg(NULL, KERN_ERR, "can't change "
2786 "dax mount option while remounting");
2787 return -EINVAL;
2788 } else if (ctx_test_mount_opt2(ctx, EXT4_MOUNT2_DAX_NEVER) &&
2789 (!(sbi->s_mount_opt2 & EXT4_MOUNT2_DAX_NEVER) ||
2790 (sbi->s_mount_opt & EXT4_MOUNT_DAX_ALWAYS))) {
2791 goto fail_dax_change_remount;
2792 } else if (ctx_test_mount_opt2(ctx, EXT4_MOUNT2_DAX_INODE) &&
2793 ((sbi->s_mount_opt & EXT4_MOUNT_DAX_ALWAYS) ||
2794 (sbi->s_mount_opt2 & EXT4_MOUNT2_DAX_NEVER) ||
2795 !(sbi->s_mount_opt2 & EXT4_MOUNT2_DAX_INODE))) {
2796 goto fail_dax_change_remount;
2797 }
2798 }
2799
2800 return ext4_check_quota_consistency(fc, sb);
2801 }
2802
2803 static void ext4_apply_options(struct fs_context *fc, struct super_block *sb)
2804 {
2805 struct ext4_fs_context *ctx = fc->fs_private;
2806 struct ext4_sb_info *sbi = fc->s_fs_info;
2807
2808 sbi->s_mount_opt &= ~ctx->mask_s_mount_opt;
2809 sbi->s_mount_opt |= ctx->vals_s_mount_opt;
2810 sbi->s_mount_opt2 &= ~ctx->mask_s_mount_opt2;
2811 sbi->s_mount_opt2 |= ctx->vals_s_mount_opt2;
2812 sbi->s_mount_flags &= ~ctx->mask_s_mount_flags;
2813 sbi->s_mount_flags |= ctx->vals_s_mount_flags;
2814 sb->s_flags &= ~ctx->mask_s_flags;
2815 sb->s_flags |= ctx->vals_s_flags;
2816
2817
2818
2819
2820
2821
2822 if (ctx->mask_s_flags & SB_I_VERSION)
2823 fc->sb_flags |= SB_I_VERSION;
2824
2825 #define APPLY(X) ({ if (ctx->spec & EXT4_SPEC_##X) sbi->X = ctx->X; })
2826 APPLY(s_commit_interval);
2827 APPLY(s_stripe);
2828 APPLY(s_max_batch_time);
2829 APPLY(s_min_batch_time);
2830 APPLY(s_want_extra_isize);
2831 APPLY(s_inode_readahead_blks);
2832 APPLY(s_max_dir_size_kb);
2833 APPLY(s_li_wait_mult);
2834 APPLY(s_resgid);
2835 APPLY(s_resuid);
2836
2837 #ifdef CONFIG_EXT4_DEBUG
2838 APPLY(s_fc_debug_max_replay);
2839 #endif
2840
2841 ext4_apply_quota_options(fc, sb);
2842 ext4_apply_test_dummy_encryption(ctx, sb);
2843 }
2844
2845
2846 static int ext4_validate_options(struct fs_context *fc)
2847 {
2848 #ifdef CONFIG_QUOTA
2849 struct ext4_fs_context *ctx = fc->fs_private;
2850 char *usr_qf_name, *grp_qf_name;
2851
2852 usr_qf_name = ctx->s_qf_names[USRQUOTA];
2853 grp_qf_name = ctx->s_qf_names[GRPQUOTA];
2854
2855 if (usr_qf_name || grp_qf_name) {
2856 if (ctx_test_mount_opt(ctx, EXT4_MOUNT_USRQUOTA) && usr_qf_name)
2857 ctx_clear_mount_opt(ctx, EXT4_MOUNT_USRQUOTA);
2858
2859 if (ctx_test_mount_opt(ctx, EXT4_MOUNT_GRPQUOTA) && grp_qf_name)
2860 ctx_clear_mount_opt(ctx, EXT4_MOUNT_GRPQUOTA);
2861
2862 if (ctx_test_mount_opt(ctx, EXT4_MOUNT_USRQUOTA) ||
2863 ctx_test_mount_opt(ctx, EXT4_MOUNT_GRPQUOTA)) {
2864 ext4_msg(NULL, KERN_ERR, "old and new quota "
2865 "format mixing");
2866 return -EINVAL;
2867 }
2868 }
2869 #endif
2870 return 1;
2871 }
2872
2873 static inline void ext4_show_quota_options(struct seq_file *seq,
2874 struct super_block *sb)
2875 {
2876 #if defined(CONFIG_QUOTA)
2877 struct ext4_sb_info *sbi = EXT4_SB(sb);
2878 char *usr_qf_name, *grp_qf_name;
2879
2880 if (sbi->s_jquota_fmt) {
2881 char *fmtname = "";
2882
2883 switch (sbi->s_jquota_fmt) {
2884 case QFMT_VFS_OLD:
2885 fmtname = "vfsold";
2886 break;
2887 case QFMT_VFS_V0:
2888 fmtname = "vfsv0";
2889 break;
2890 case QFMT_VFS_V1:
2891 fmtname = "vfsv1";
2892 break;
2893 }
2894 seq_printf(seq, ",jqfmt=%s", fmtname);
2895 }
2896
2897 rcu_read_lock();
2898 usr_qf_name = rcu_dereference(sbi->s_qf_names[USRQUOTA]);
2899 grp_qf_name = rcu_dereference(sbi->s_qf_names[GRPQUOTA]);
2900 if (usr_qf_name)
2901 seq_show_option(seq, "usrjquota", usr_qf_name);
2902 if (grp_qf_name)
2903 seq_show_option(seq, "grpjquota", grp_qf_name);
2904 rcu_read_unlock();
2905 #endif
2906 }
2907
2908 static const char *token2str(int token)
2909 {
2910 const struct fs_parameter_spec *spec;
2911
2912 for (spec = ext4_param_specs; spec->name != NULL; spec++)
2913 if (spec->opt == token && !spec->type)
2914 break;
2915 return spec->name;
2916 }
2917
2918
2919
2920
2921
2922
2923 static int _ext4_show_options(struct seq_file *seq, struct super_block *sb,
2924 int nodefs)
2925 {
2926 struct ext4_sb_info *sbi = EXT4_SB(sb);
2927 struct ext4_super_block *es = sbi->s_es;
2928 int def_errors, def_mount_opt = sbi->s_def_mount_opt;
2929 const struct mount_opts *m;
2930 char sep = nodefs ? '\n' : ',';
2931
2932 #define SEQ_OPTS_PUTS(str) seq_printf(seq, "%c" str, sep)
2933 #define SEQ_OPTS_PRINT(str, arg) seq_printf(seq, "%c" str, sep, arg)
2934
2935 if (sbi->s_sb_block != 1)
2936 SEQ_OPTS_PRINT("sb=%llu", sbi->s_sb_block);
2937
2938 for (m = ext4_mount_opts; m->token != Opt_err; m++) {
2939 int want_set = m->flags & MOPT_SET;
2940 if (((m->flags & (MOPT_SET|MOPT_CLEAR)) == 0) ||
2941 m->flags & MOPT_SKIP)
2942 continue;
2943 if (!nodefs && !(m->mount_opt & (sbi->s_mount_opt ^ def_mount_opt)))
2944 continue;
2945 if ((want_set &&
2946 (sbi->s_mount_opt & m->mount_opt) != m->mount_opt) ||
2947 (!want_set && (sbi->s_mount_opt & m->mount_opt)))
2948 continue;
2949 SEQ_OPTS_PRINT("%s", token2str(m->token));
2950 }
2951
2952 if (nodefs || !uid_eq(sbi->s_resuid, make_kuid(&init_user_ns, EXT4_DEF_RESUID)) ||
2953 le16_to_cpu(es->s_def_resuid) != EXT4_DEF_RESUID)
2954 SEQ_OPTS_PRINT("resuid=%u",
2955 from_kuid_munged(&init_user_ns, sbi->s_resuid));
2956 if (nodefs || !gid_eq(sbi->s_resgid, make_kgid(&init_user_ns, EXT4_DEF_RESGID)) ||
2957 le16_to_cpu(es->s_def_resgid) != EXT4_DEF_RESGID)
2958 SEQ_OPTS_PRINT("resgid=%u",
2959 from_kgid_munged(&init_user_ns, sbi->s_resgid));
2960 def_errors = nodefs ? -1 : le16_to_cpu(es->s_errors);
2961 if (test_opt(sb, ERRORS_RO) && def_errors != EXT4_ERRORS_RO)
2962 SEQ_OPTS_PUTS("errors=remount-ro");
2963 if (test_opt(sb, ERRORS_CONT) && def_errors != EXT4_ERRORS_CONTINUE)
2964 SEQ_OPTS_PUTS("errors=continue");
2965 if (test_opt(sb, ERRORS_PANIC) && def_errors != EXT4_ERRORS_PANIC)
2966 SEQ_OPTS_PUTS("errors=panic");
2967 if (nodefs || sbi->s_commit_interval != JBD2_DEFAULT_MAX_COMMIT_AGE*HZ)
2968 SEQ_OPTS_PRINT("commit=%lu", sbi->s_commit_interval / HZ);
2969 if (nodefs || sbi->s_min_batch_time != EXT4_DEF_MIN_BATCH_TIME)
2970 SEQ_OPTS_PRINT("min_batch_time=%u", sbi->s_min_batch_time);
2971 if (nodefs || sbi->s_max_batch_time != EXT4_DEF_MAX_BATCH_TIME)
2972 SEQ_OPTS_PRINT("max_batch_time=%u", sbi->s_max_batch_time);
2973 if (sb->s_flags & SB_I_VERSION)
2974 SEQ_OPTS_PUTS("i_version");
2975 if (nodefs || sbi->s_stripe)
2976 SEQ_OPTS_PRINT("stripe=%lu", sbi->s_stripe);
2977 if (nodefs || EXT4_MOUNT_DATA_FLAGS &
2978 (sbi->s_mount_opt ^ def_mount_opt)) {
2979 if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA)
2980 SEQ_OPTS_PUTS("data=journal");
2981 else if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_ORDERED_DATA)
2982 SEQ_OPTS_PUTS("data=ordered");
2983 else if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_WRITEBACK_DATA)
2984 SEQ_OPTS_PUTS("data=writeback");
2985 }
2986 if (nodefs ||
2987 sbi->s_inode_readahead_blks != EXT4_DEF_INODE_READAHEAD_BLKS)
2988 SEQ_OPTS_PRINT("inode_readahead_blks=%u",
2989 sbi->s_inode_readahead_blks);
2990
2991 if (test_opt(sb, INIT_INODE_TABLE) && (nodefs ||
2992 (sbi->s_li_wait_mult != EXT4_DEF_LI_WAIT_MULT)))
2993 SEQ_OPTS_PRINT("init_itable=%u", sbi->s_li_wait_mult);
2994 if (nodefs || sbi->s_max_dir_size_kb)
2995 SEQ_OPTS_PRINT("max_dir_size_kb=%u", sbi->s_max_dir_size_kb);
2996 if (test_opt(sb, DATA_ERR_ABORT))
2997 SEQ_OPTS_PUTS("data_err=abort");
2998
2999 fscrypt_show_test_dummy_encryption(seq, sep, sb);
3000
3001 if (sb->s_flags & SB_INLINECRYPT)
3002 SEQ_OPTS_PUTS("inlinecrypt");
3003
3004 if (test_opt(sb, DAX_ALWAYS)) {
3005 if (IS_EXT2_SB(sb))
3006 SEQ_OPTS_PUTS("dax");
3007 else
3008 SEQ_OPTS_PUTS("dax=always");
3009 } else if (test_opt2(sb, DAX_NEVER)) {
3010 SEQ_OPTS_PUTS("dax=never");
3011 } else if (test_opt2(sb, DAX_INODE)) {
3012 SEQ_OPTS_PUTS("dax=inode");
3013 }
3014
3015 if (sbi->s_groups_count >= MB_DEFAULT_LINEAR_SCAN_THRESHOLD &&
3016 !test_opt2(sb, MB_OPTIMIZE_SCAN)) {
3017 SEQ_OPTS_PUTS("mb_optimize_scan=0");
3018 } else if (sbi->s_groups_count < MB_DEFAULT_LINEAR_SCAN_THRESHOLD &&
3019 test_opt2(sb, MB_OPTIMIZE_SCAN)) {
3020 SEQ_OPTS_PUTS("mb_optimize_scan=1");
3021 }
3022
3023 ext4_show_quota_options(seq, sb);
3024 return 0;
3025 }
3026
3027 static int ext4_show_options(struct seq_file *seq, struct dentry *root)
3028 {
3029 return _ext4_show_options(seq, root->d_sb, 0);
3030 }
3031
3032 int ext4_seq_options_show(struct seq_file *seq, void *offset)
3033 {
3034 struct super_block *sb = seq->private;
3035 int rc;
3036
3037 seq_puts(seq, sb_rdonly(sb) ? "ro" : "rw");
3038 rc = _ext4_show_options(seq, sb, 1);
3039 seq_puts(seq, "\n");
3040 return rc;
3041 }
3042
3043 static int ext4_setup_super(struct super_block *sb, struct ext4_super_block *es,
3044 int read_only)
3045 {
3046 struct ext4_sb_info *sbi = EXT4_SB(sb);
3047 int err = 0;
3048
3049 if (le32_to_cpu(es->s_rev_level) > EXT4_MAX_SUPP_REV) {
3050 ext4_msg(sb, KERN_ERR, "revision level too high, "
3051 "forcing read-only mode");
3052 err = -EROFS;
3053 goto done;
3054 }
3055 if (read_only)
3056 goto done;
3057 if (!(sbi->s_mount_state & EXT4_VALID_FS))
3058 ext4_msg(sb, KERN_WARNING, "warning: mounting unchecked fs, "
3059 "running e2fsck is recommended");
3060 else if (sbi->s_mount_state & EXT4_ERROR_FS)
3061 ext4_msg(sb, KERN_WARNING,
3062 "warning: mounting fs with errors, "
3063 "running e2fsck is recommended");
3064 else if ((__s16) le16_to_cpu(es->s_max_mnt_count) > 0 &&
3065 le16_to_cpu(es->s_mnt_count) >=
3066 (unsigned short) (__s16) le16_to_cpu(es->s_max_mnt_count))
3067 ext4_msg(sb, KERN_WARNING,
3068 "warning: maximal mount count reached, "
3069 "running e2fsck is recommended");
3070 else if (le32_to_cpu(es->s_checkinterval) &&
3071 (ext4_get_tstamp(es, s_lastcheck) +
3072 le32_to_cpu(es->s_checkinterval) <= ktime_get_real_seconds()))
3073 ext4_msg(sb, KERN_WARNING,
3074 "warning: checktime reached, "
3075 "running e2fsck is recommended");
3076 if (!sbi->s_journal)
3077 es->s_state &= cpu_to_le16(~EXT4_VALID_FS);
3078 if (!(__s16) le16_to_cpu(es->s_max_mnt_count))
3079 es->s_max_mnt_count = cpu_to_le16(EXT4_DFL_MAX_MNT_COUNT);
3080 le16_add_cpu(&es->s_mnt_count, 1);
3081 ext4_update_tstamp(es, s_mtime);
3082 if (sbi->s_journal) {
3083 ext4_set_feature_journal_needs_recovery(sb);
3084 if (ext4_has_feature_orphan_file(sb))
3085 ext4_set_feature_orphan_present(sb);
3086 }
3087
3088 err = ext4_commit_super(sb);
3089 done:
3090 if (test_opt(sb, DEBUG))
3091 printk(KERN_INFO "[EXT4 FS bs=%lu, gc=%u, "
3092 "bpg=%lu, ipg=%lu, mo=%04x, mo2=%04x]\n",
3093 sb->s_blocksize,
3094 sbi->s_groups_count,
3095 EXT4_BLOCKS_PER_GROUP(sb),
3096 EXT4_INODES_PER_GROUP(sb),
3097 sbi->s_mount_opt, sbi->s_mount_opt2);
3098 return err;
3099 }
3100
3101 int ext4_alloc_flex_bg_array(struct super_block *sb, ext4_group_t ngroup)
3102 {
3103 struct ext4_sb_info *sbi = EXT4_SB(sb);
3104 struct flex_groups **old_groups, **new_groups;
3105 int size, i, j;
3106
3107 if (!sbi->s_log_groups_per_flex)
3108 return 0;
3109
3110 size = ext4_flex_group(sbi, ngroup - 1) + 1;
3111 if (size <= sbi->s_flex_groups_allocated)
3112 return 0;
3113
3114 new_groups = kvzalloc(roundup_pow_of_two(size *
3115 sizeof(*sbi->s_flex_groups)), GFP_KERNEL);
3116 if (!new_groups) {
3117 ext4_msg(sb, KERN_ERR,
3118 "not enough memory for %d flex group pointers", size);
3119 return -ENOMEM;
3120 }
3121 for (i = sbi->s_flex_groups_allocated; i < size; i++) {
3122 new_groups[i] = kvzalloc(roundup_pow_of_two(
3123 sizeof(struct flex_groups)),
3124 GFP_KERNEL);
3125 if (!new_groups[i]) {
3126 for (j = sbi->s_flex_groups_allocated; j < i; j++)
3127 kvfree(new_groups[j]);
3128 kvfree(new_groups);
3129 ext4_msg(sb, KERN_ERR,
3130 "not enough memory for %d flex groups", size);
3131 return -ENOMEM;
3132 }
3133 }
3134 rcu_read_lock();
3135 old_groups = rcu_dereference(sbi->s_flex_groups);
3136 if (old_groups)
3137 memcpy(new_groups, old_groups,
3138 (sbi->s_flex_groups_allocated *
3139 sizeof(struct flex_groups *)));
3140 rcu_read_unlock();
3141 rcu_assign_pointer(sbi->s_flex_groups, new_groups);
3142 sbi->s_flex_groups_allocated = size;
3143 if (old_groups)
3144 ext4_kvfree_array_rcu(old_groups);
3145 return 0;
3146 }
3147
3148 static int ext4_fill_flex_info(struct super_block *sb)
3149 {
3150 struct ext4_sb_info *sbi = EXT4_SB(sb);
3151 struct ext4_group_desc *gdp = NULL;
3152 struct flex_groups *fg;
3153 ext4_group_t flex_group;
3154 int i, err;
3155
3156 sbi->s_log_groups_per_flex = sbi->s_es->s_log_groups_per_flex;
3157 if (sbi->s_log_groups_per_flex < 1 || sbi->s_log_groups_per_flex > 31) {
3158 sbi->s_log_groups_per_flex = 0;
3159 return 1;
3160 }
3161
3162 err = ext4_alloc_flex_bg_array(sb, sbi->s_groups_count);
3163 if (err)
3164 goto failed;
3165
3166 for (i = 0; i < sbi->s_groups_count; i++) {
3167 gdp = ext4_get_group_desc(sb, i, NULL);
3168
3169 flex_group = ext4_flex_group(sbi, i);
3170 fg = sbi_array_rcu_deref(sbi, s_flex_groups, flex_group);
3171 atomic_add(ext4_free_inodes_count(sb, gdp), &fg->free_inodes);
3172 atomic64_add(ext4_free_group_clusters(sb, gdp),
3173 &fg->free_clusters);
3174 atomic_add(ext4_used_dirs_count(sb, gdp), &fg->used_dirs);
3175 }
3176
3177 return 1;
3178 failed:
3179 return 0;
3180 }
3181
3182 static __le16 ext4_group_desc_csum(struct super_block *sb, __u32 block_group,
3183 struct ext4_group_desc *gdp)
3184 {
3185 int offset = offsetof(struct ext4_group_desc, bg_checksum);
3186 __u16 crc = 0;
3187 __le32 le_group = cpu_to_le32(block_group);
3188 struct ext4_sb_info *sbi = EXT4_SB(sb);
3189
3190 if (ext4_has_metadata_csum(sbi->s_sb)) {
3191
3192 __u32 csum32;
3193 __u16 dummy_csum = 0;
3194
3195 csum32 = ext4_chksum(sbi, sbi->s_csum_seed, (__u8 *)&le_group,
3196 sizeof(le_group));
3197 csum32 = ext4_chksum(sbi, csum32, (__u8 *)gdp, offset);
3198 csum32 = ext4_chksum(sbi, csum32, (__u8 *)&dummy_csum,
3199 sizeof(dummy_csum));
3200 offset += sizeof(dummy_csum);
3201 if (offset < sbi->s_desc_size)
3202 csum32 = ext4_chksum(sbi, csum32, (__u8 *)gdp + offset,
3203 sbi->s_desc_size - offset);
3204
3205 crc = csum32 & 0xFFFF;
3206 goto out;
3207 }
3208
3209
3210 if (!ext4_has_feature_gdt_csum(sb))
3211 return 0;
3212
3213 crc = crc16(~0, sbi->s_es->s_uuid, sizeof(sbi->s_es->s_uuid));
3214 crc = crc16(crc, (__u8 *)&le_group, sizeof(le_group));
3215 crc = crc16(crc, (__u8 *)gdp, offset);
3216 offset += sizeof(gdp->bg_checksum);
3217
3218 if (ext4_has_feature_64bit(sb) &&
3219 offset < le16_to_cpu(sbi->s_es->s_desc_size))
3220 crc = crc16(crc, (__u8 *)gdp + offset,
3221 le16_to_cpu(sbi->s_es->s_desc_size) -
3222 offset);
3223
3224 out:
3225 return cpu_to_le16(crc);
3226 }
3227
3228 int ext4_group_desc_csum_verify(struct super_block *sb, __u32 block_group,
3229 struct ext4_group_desc *gdp)
3230 {
3231 if (ext4_has_group_desc_csum(sb) &&
3232 (gdp->bg_checksum != ext4_group_desc_csum(sb, block_group, gdp)))
3233 return 0;
3234
3235 return 1;
3236 }
3237
3238 void ext4_group_desc_csum_set(struct super_block *sb, __u32 block_group,
3239 struct ext4_group_desc *gdp)
3240 {
3241 if (!ext4_has_group_desc_csum(sb))
3242 return;
3243 gdp->bg_checksum = ext4_group_desc_csum(sb, block_group, gdp);
3244 }
3245
3246
3247 static int ext4_check_descriptors(struct super_block *sb,
3248 ext4_fsblk_t sb_block,
3249 ext4_group_t *first_not_zeroed)
3250 {
3251 struct ext4_sb_info *sbi = EXT4_SB(sb);
3252 ext4_fsblk_t first_block = le32_to_cpu(sbi->s_es->s_first_data_block);
3253 ext4_fsblk_t last_block;
3254 ext4_fsblk_t last_bg_block = sb_block + ext4_bg_num_gdb(sb, 0);
3255 ext4_fsblk_t block_bitmap;
3256 ext4_fsblk_t inode_bitmap;
3257 ext4_fsblk_t inode_table;
3258 int flexbg_flag = 0;
3259 ext4_group_t i, grp = sbi->s_groups_count;
3260
3261 if (ext4_has_feature_flex_bg(sb))
3262 flexbg_flag = 1;
3263
3264 ext4_debug("Checking group descriptors");
3265
3266 for (i = 0; i < sbi->s_groups_count; i++) {
3267 struct ext4_group_desc *gdp = ext4_get_group_desc(sb, i, NULL);
3268
3269 if (i == sbi->s_groups_count - 1 || flexbg_flag)
3270 last_block = ext4_blocks_count(sbi->s_es) - 1;
3271 else
3272 last_block = first_block +
3273 (EXT4_BLOCKS_PER_GROUP(sb) - 1);
3274
3275 if ((grp == sbi->s_groups_count) &&
3276 !(gdp->bg_flags & cpu_to_le16(EXT4_BG_INODE_ZEROED)))
3277 grp = i;
3278
3279 block_bitmap = ext4_block_bitmap(sb, gdp);
3280 if (block_bitmap == sb_block) {
3281 ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: "
3282 "Block bitmap for group %u overlaps "
3283 "superblock", i);
3284 if (!sb_rdonly(sb))
3285 return 0;
3286 }
3287 if (block_bitmap >= sb_block + 1 &&
3288 block_bitmap <= last_bg_block) {
3289 ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: "
3290 "Block bitmap for group %u overlaps "
3291 "block group descriptors", i);
3292 if (!sb_rdonly(sb))
3293 return 0;
3294 }
3295 if (block_bitmap < first_block || block_bitmap > last_block) {
3296 ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: "
3297 "Block bitmap for group %u not in group "
3298 "(block %llu)!", i, block_bitmap);
3299 return 0;
3300 }
3301 inode_bitmap = ext4_inode_bitmap(sb, gdp);
3302 if (inode_bitmap == sb_block) {
3303 ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: "
3304 "Inode bitmap for group %u overlaps "
3305 "superblock", i);
3306 if (!sb_rdonly(sb))
3307 return 0;
3308 }
3309 if (inode_bitmap >= sb_block + 1 &&
3310 inode_bitmap <= last_bg_block) {
3311 ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: "
3312 "Inode bitmap for group %u overlaps "
3313 "block group descriptors", i);
3314 if (!sb_rdonly(sb))
3315 return 0;
3316 }
3317 if (inode_bitmap < first_block || inode_bitmap > last_block) {
3318 ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: "
3319 "Inode bitmap for group %u not in group "
3320 "(block %llu)!", i, inode_bitmap);
3321 return 0;
3322 }
3323 inode_table = ext4_inode_table(sb, gdp);
3324 if (inode_table == sb_block) {
3325 ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: "
3326 "Inode table for group %u overlaps "
3327 "superblock", i);
3328 if (!sb_rdonly(sb))
3329 return 0;
3330 }
3331 if (inode_table >= sb_block + 1 &&
3332 inode_table <= last_bg_block) {
3333 ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: "
3334 "Inode table for group %u overlaps "
3335 "block group descriptors", i);
3336 if (!sb_rdonly(sb))
3337 return 0;
3338 }
3339 if (inode_table < first_block ||
3340 inode_table + sbi->s_itb_per_group - 1 > last_block) {
3341 ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: "
3342 "Inode table for group %u not in group "
3343 "(block %llu)!", i, inode_table);
3344 return 0;
3345 }
3346 ext4_lock_group(sb, i);
3347 if (!ext4_group_desc_csum_verify(sb, i, gdp)) {
3348 ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: "
3349 "Checksum for group %u failed (%u!=%u)",
3350 i, le16_to_cpu(ext4_group_desc_csum(sb, i,
3351 gdp)), le16_to_cpu(gdp->bg_checksum));
3352 if (!sb_rdonly(sb)) {
3353 ext4_unlock_group(sb, i);
3354 return 0;
3355 }
3356 }
3357 ext4_unlock_group(sb, i);
3358 if (!flexbg_flag)
3359 first_block += EXT4_BLOCKS_PER_GROUP(sb);
3360 }
3361 if (NULL != first_not_zeroed)
3362 *first_not_zeroed = grp;
3363 return 1;
3364 }
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381 static loff_t ext4_max_size(int blkbits, int has_huge_files)
3382 {
3383 loff_t res;
3384 loff_t upper_limit = MAX_LFS_FILESIZE;
3385
3386 BUILD_BUG_ON(sizeof(blkcnt_t) < sizeof(u64));
3387
3388 if (!has_huge_files) {
3389 upper_limit = (1LL << 32) - 1;
3390
3391
3392 upper_limit >>= (blkbits - 9);
3393 upper_limit <<= blkbits;
3394 }
3395
3396
3397
3398
3399
3400
3401 res = (1LL << 32) - 1;
3402 res <<= blkbits;
3403
3404
3405 if (res > upper_limit)
3406 res = upper_limit;
3407
3408 return res;
3409 }
3410
3411
3412
3413
3414
3415
3416 static loff_t ext4_max_bitmap_size(int bits, int has_huge_files)
3417 {
3418 loff_t upper_limit, res = EXT4_NDIR_BLOCKS;
3419 int meta_blocks;
3420 unsigned int ppb = 1 << (bits - 2);
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430 if (!has_huge_files) {
3431
3432
3433
3434
3435
3436 upper_limit = (1LL << 32) - 1;
3437
3438
3439 upper_limit >>= (bits - 9);
3440
3441 } else {
3442
3443
3444
3445
3446
3447
3448 upper_limit = (1LL << 48) - 1;
3449
3450 }
3451
3452
3453 res += ppb;
3454 res += ppb * ppb;
3455 res += ((loff_t)ppb) * ppb * ppb;
3456
3457 meta_blocks = 1;
3458 meta_blocks += 1 + ppb;
3459 meta_blocks += 1 + ppb + ppb * ppb;
3460
3461 if (res + meta_blocks <= upper_limit)
3462 goto check_lfs;
3463
3464 res = upper_limit;
3465
3466 upper_limit -= EXT4_NDIR_BLOCKS;
3467
3468 meta_blocks = 1;
3469 upper_limit -= ppb;
3470
3471 if (upper_limit < ppb * ppb) {
3472 meta_blocks += 1 + DIV_ROUND_UP_ULL(upper_limit, ppb);
3473 res -= meta_blocks;
3474 goto check_lfs;
3475 }
3476 meta_blocks += 1 + ppb;
3477 upper_limit -= ppb * ppb;
3478
3479 meta_blocks += 1 + DIV_ROUND_UP_ULL(upper_limit, ppb) +
3480 DIV_ROUND_UP_ULL(upper_limit, ppb*ppb);
3481 res -= meta_blocks;
3482 check_lfs:
3483 res <<= bits;
3484 if (res > MAX_LFS_FILESIZE)
3485 res = MAX_LFS_FILESIZE;
3486
3487 return res;
3488 }
3489
3490 static ext4_fsblk_t descriptor_loc(struct super_block *sb,
3491 ext4_fsblk_t logical_sb_block, int nr)
3492 {
3493 struct ext4_sb_info *sbi = EXT4_SB(sb);
3494 ext4_group_t bg, first_meta_bg;
3495 int has_super = 0;
3496
3497 first_meta_bg = le32_to_cpu(sbi->s_es->s_first_meta_bg);
3498
3499 if (!ext4_has_feature_meta_bg(sb) || nr < first_meta_bg)
3500 return logical_sb_block + nr + 1;
3501 bg = sbi->s_desc_per_block * nr;
3502 if (ext4_bg_has_super(sb, bg))
3503 has_super = 1;
3504
3505
3506
3507
3508
3509
3510
3511 if (sb->s_blocksize == 1024 && nr == 0 &&
3512 le32_to_cpu(sbi->s_es->s_first_data_block) == 0)
3513 has_super++;
3514
3515 return (has_super + ext4_group_first_block_no(sb, bg));
3516 }
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529 static unsigned long ext4_get_stripe_size(struct ext4_sb_info *sbi)
3530 {
3531 unsigned long stride = le16_to_cpu(sbi->s_es->s_raid_stride);
3532 unsigned long stripe_width =
3533 le32_to_cpu(sbi->s_es->s_raid_stripe_width);
3534 int ret;
3535
3536 if (sbi->s_stripe && sbi->s_stripe <= sbi->s_blocks_per_group)
3537 ret = sbi->s_stripe;
3538 else if (stripe_width && stripe_width <= sbi->s_blocks_per_group)
3539 ret = stripe_width;
3540 else if (stride && stride <= sbi->s_blocks_per_group)
3541 ret = stride;
3542 else
3543 ret = 0;
3544
3545
3546
3547
3548
3549 if (ret <= 1)
3550 ret = 0;
3551
3552 return ret;
3553 }
3554
3555
3556
3557
3558
3559
3560
3561 int ext4_feature_set_ok(struct super_block *sb, int readonly)
3562 {
3563 if (ext4_has_unknown_ext4_incompat_features(sb)) {
3564 ext4_msg(sb, KERN_ERR,
3565 "Couldn't mount because of "
3566 "unsupported optional features (%x)",
3567 (le32_to_cpu(EXT4_SB(sb)->s_es->s_feature_incompat) &
3568 ~EXT4_FEATURE_INCOMPAT_SUPP));
3569 return 0;
3570 }
3571
3572 #if !IS_ENABLED(CONFIG_UNICODE)
3573 if (ext4_has_feature_casefold(sb)) {
3574 ext4_msg(sb, KERN_ERR,
3575 "Filesystem with casefold feature cannot be "
3576 "mounted without CONFIG_UNICODE");
3577 return 0;
3578 }
3579 #endif
3580
3581 if (readonly)
3582 return 1;
3583
3584 if (ext4_has_feature_readonly(sb)) {
3585 ext4_msg(sb, KERN_INFO, "filesystem is read-only");
3586 sb->s_flags |= SB_RDONLY;
3587 return 1;
3588 }
3589
3590
3591 if (ext4_has_unknown_ext4_ro_compat_features(sb)) {
3592 ext4_msg(sb, KERN_ERR, "couldn't mount RDWR because of "
3593 "unsupported optional features (%x)",
3594 (le32_to_cpu(EXT4_SB(sb)->s_es->s_feature_ro_compat) &
3595 ~EXT4_FEATURE_RO_COMPAT_SUPP));
3596 return 0;
3597 }
3598 if (ext4_has_feature_bigalloc(sb) && !ext4_has_feature_extents(sb)) {
3599 ext4_msg(sb, KERN_ERR,
3600 "Can't support bigalloc feature without "
3601 "extents feature\n");
3602 return 0;
3603 }
3604
3605 #if !IS_ENABLED(CONFIG_QUOTA) || !IS_ENABLED(CONFIG_QFMT_V2)
3606 if (!readonly && (ext4_has_feature_quota(sb) ||
3607 ext4_has_feature_project(sb))) {
3608 ext4_msg(sb, KERN_ERR,
3609 "The kernel was not built with CONFIG_QUOTA and CONFIG_QFMT_V2");
3610 return 0;
3611 }
3612 #endif
3613 return 1;
3614 }
3615
3616
3617
3618
3619
3620 static void print_daily_error_info(struct timer_list *t)
3621 {
3622 struct ext4_sb_info *sbi = from_timer(sbi, t, s_err_report);
3623 struct super_block *sb = sbi->s_sb;
3624 struct ext4_super_block *es = sbi->s_es;
3625
3626 if (es->s_error_count)
3627
3628 ext4_msg(sb, KERN_NOTICE, "error count since last fsck: %u",
3629 le32_to_cpu(es->s_error_count));
3630 if (es->s_first_error_time) {
3631 printk(KERN_NOTICE "EXT4-fs (%s): initial error at time %llu: %.*s:%d",
3632 sb->s_id,
3633 ext4_get_tstamp(es, s_first_error_time),
3634 (int) sizeof(es->s_first_error_func),
3635 es->s_first_error_func,
3636 le32_to_cpu(es->s_first_error_line));
3637 if (es->s_first_error_ino)
3638 printk(KERN_CONT ": inode %u",
3639 le32_to_cpu(es->s_first_error_ino));
3640 if (es->s_first_error_block)
3641 printk(KERN_CONT ": block %llu", (unsigned long long)
3642 le64_to_cpu(es->s_first_error_block));
3643 printk(KERN_CONT "\n");
3644 }
3645 if (es->s_last_error_time) {
3646 printk(KERN_NOTICE "EXT4-fs (%s): last error at time %llu: %.*s:%d",
3647 sb->s_id,
3648 ext4_get_tstamp(es, s_last_error_time),
3649 (int) sizeof(es->s_last_error_func),
3650 es->s_last_error_func,
3651 le32_to_cpu(es->s_last_error_line));
3652 if (es->s_last_error_ino)
3653 printk(KERN_CONT ": inode %u",
3654 le32_to_cpu(es->s_last_error_ino));
3655 if (es->s_last_error_block)
3656 printk(KERN_CONT ": block %llu", (unsigned long long)
3657 le64_to_cpu(es->s_last_error_block));
3658 printk(KERN_CONT "\n");
3659 }
3660 mod_timer(&sbi->s_err_report, jiffies + 24*60*60*HZ);
3661 }
3662
3663
3664 static int ext4_run_li_request(struct ext4_li_request *elr)
3665 {
3666 struct ext4_group_desc *gdp = NULL;
3667 struct super_block *sb = elr->lr_super;
3668 ext4_group_t ngroups = EXT4_SB(sb)->s_groups_count;
3669 ext4_group_t group = elr->lr_next_group;
3670 unsigned int prefetch_ios = 0;
3671 int ret = 0;
3672 u64 start_time;
3673
3674 if (elr->lr_mode == EXT4_LI_MODE_PREFETCH_BBITMAP) {
3675 elr->lr_next_group = ext4_mb_prefetch(sb, group,
3676 EXT4_SB(sb)->s_mb_prefetch, &prefetch_ios);
3677 if (prefetch_ios)
3678 ext4_mb_prefetch_fini(sb, elr->lr_next_group,
3679 prefetch_ios);
3680 trace_ext4_prefetch_bitmaps(sb, group, elr->lr_next_group,
3681 prefetch_ios);
3682 if (group >= elr->lr_next_group) {
3683 ret = 1;
3684 if (elr->lr_first_not_zeroed != ngroups &&
3685 !sb_rdonly(sb) && test_opt(sb, INIT_INODE_TABLE)) {
3686 elr->lr_next_group = elr->lr_first_not_zeroed;
3687 elr->lr_mode = EXT4_LI_MODE_ITABLE;
3688 ret = 0;
3689 }
3690 }
3691 return ret;
3692 }
3693
3694 for (; group < ngroups; group++) {
3695 gdp = ext4_get_group_desc(sb, group, NULL);
3696 if (!gdp) {
3697 ret = 1;
3698 break;
3699 }
3700
3701 if (!(gdp->bg_flags & cpu_to_le16(EXT4_BG_INODE_ZEROED)))
3702 break;
3703 }
3704
3705 if (group >= ngroups)
3706 ret = 1;
3707
3708 if (!ret) {
3709 start_time = ktime_get_real_ns();
3710 ret = ext4_init_inode_table(sb, group,
3711 elr->lr_timeout ? 0 : 1);
3712 trace_ext4_lazy_itable_init(sb, group);
3713 if (elr->lr_timeout == 0) {
3714 elr->lr_timeout = nsecs_to_jiffies((ktime_get_real_ns() - start_time) *
3715 EXT4_SB(elr->lr_super)->s_li_wait_mult);
3716 }
3717 elr->lr_next_sched = jiffies + elr->lr_timeout;
3718 elr->lr_next_group = group + 1;
3719 }
3720 return ret;
3721 }
3722
3723
3724
3725
3726
3727 static void ext4_remove_li_request(struct ext4_li_request *elr)
3728 {
3729 if (!elr)
3730 return;
3731
3732 list_del(&elr->lr_request);
3733 EXT4_SB(elr->lr_super)->s_li_request = NULL;
3734 kfree(elr);
3735 }
3736
3737 static void ext4_unregister_li_request(struct super_block *sb)
3738 {
3739 mutex_lock(&ext4_li_mtx);
3740 if (!ext4_li_info) {
3741 mutex_unlock(&ext4_li_mtx);
3742 return;
3743 }
3744
3745 mutex_lock(&ext4_li_info->li_list_mtx);
3746 ext4_remove_li_request(EXT4_SB(sb)->s_li_request);
3747 mutex_unlock(&ext4_li_info->li_list_mtx);
3748 mutex_unlock(&ext4_li_mtx);
3749 }
3750
3751 static struct task_struct *ext4_lazyinit_task;
3752
3753
3754
3755
3756
3757
3758
3759
3760
3761
3762 static int ext4_lazyinit_thread(void *arg)
3763 {
3764 struct ext4_lazy_init *eli = arg;
3765 struct list_head *pos, *n;
3766 struct ext4_li_request *elr;
3767 unsigned long next_wakeup, cur;
3768
3769 BUG_ON(NULL == eli);
3770
3771 cont_thread:
3772 while (true) {
3773 next_wakeup = MAX_JIFFY_OFFSET;
3774
3775 mutex_lock(&eli->li_list_mtx);
3776 if (list_empty(&eli->li_request_list)) {
3777 mutex_unlock(&eli->li_list_mtx);
3778 goto exit_thread;
3779 }
3780 list_for_each_safe(pos, n, &eli->li_request_list) {
3781 int err = 0;
3782 int progress = 0;
3783 elr = list_entry(pos, struct ext4_li_request,
3784 lr_request);
3785
3786 if (time_before(jiffies, elr->lr_next_sched)) {
3787 if (time_before(elr->lr_next_sched, next_wakeup))
3788 next_wakeup = elr->lr_next_sched;
3789 continue;
3790 }
3791 if (down_read_trylock(&elr->lr_super->s_umount)) {
3792 if (sb_start_write_trylock(elr->lr_super)) {
3793 progress = 1;
3794
3795
3796
3797
3798
3799 mutex_unlock(&eli->li_list_mtx);
3800 err = ext4_run_li_request(elr);
3801 sb_end_write(elr->lr_super);
3802 mutex_lock(&eli->li_list_mtx);
3803 n = pos->next;
3804 }
3805 up_read((&elr->lr_super->s_umount));
3806 }
3807
3808 if (err) {
3809 ext4_remove_li_request(elr);
3810 continue;
3811 }
3812 if (!progress) {
3813 elr->lr_next_sched = jiffies +
3814 (prandom_u32()
3815 % (EXT4_DEF_LI_MAX_START_DELAY * HZ));
3816 }
3817 if (time_before(elr->lr_next_sched, next_wakeup))
3818 next_wakeup = elr->lr_next_sched;
3819 }
3820 mutex_unlock(&eli->li_list_mtx);
3821
3822 try_to_freeze();
3823
3824 cur = jiffies;
3825 if ((time_after_eq(cur, next_wakeup)) ||
3826 (MAX_JIFFY_OFFSET == next_wakeup)) {
3827 cond_resched();
3828 continue;
3829 }
3830
3831 schedule_timeout_interruptible(next_wakeup - cur);
3832
3833 if (kthread_should_stop()) {
3834 ext4_clear_request_list();
3835 goto exit_thread;
3836 }
3837 }
3838
3839 exit_thread:
3840
3841
3842
3843
3844
3845
3846
3847
3848 mutex_lock(&ext4_li_mtx);
3849 mutex_lock(&eli->li_list_mtx);
3850 if (!list_empty(&eli->li_request_list)) {
3851 mutex_unlock(&eli->li_list_mtx);
3852 mutex_unlock(&ext4_li_mtx);
3853 goto cont_thread;
3854 }
3855 mutex_unlock(&eli->li_list_mtx);
3856 kfree(ext4_li_info);
3857 ext4_li_info = NULL;
3858 mutex_unlock(&ext4_li_mtx);
3859
3860 return 0;
3861 }
3862
3863 static void ext4_clear_request_list(void)
3864 {
3865 struct list_head *pos, *n;
3866 struct ext4_li_request *elr;
3867
3868 mutex_lock(&ext4_li_info->li_list_mtx);
3869 list_for_each_safe(pos, n, &ext4_li_info->li_request_list) {
3870 elr = list_entry(pos, struct ext4_li_request,
3871 lr_request);
3872 ext4_remove_li_request(elr);
3873 }
3874 mutex_unlock(&ext4_li_info->li_list_mtx);
3875 }
3876
3877 static int ext4_run_lazyinit_thread(void)
3878 {
3879 ext4_lazyinit_task = kthread_run(ext4_lazyinit_thread,
3880 ext4_li_info, "ext4lazyinit");
3881 if (IS_ERR(ext4_lazyinit_task)) {
3882 int err = PTR_ERR(ext4_lazyinit_task);
3883 ext4_clear_request_list();
3884 kfree(ext4_li_info);
3885 ext4_li_info = NULL;
3886 printk(KERN_CRIT "EXT4-fs: error %d creating inode table "
3887 "initialization thread\n",
3888 err);
3889 return err;
3890 }
3891 ext4_li_info->li_state |= EXT4_LAZYINIT_RUNNING;
3892 return 0;
3893 }
3894
3895
3896
3897
3898
3899
3900
3901 static ext4_group_t ext4_has_uninit_itable(struct super_block *sb)
3902 {
3903 ext4_group_t group, ngroups = EXT4_SB(sb)->s_groups_count;
3904 struct ext4_group_desc *gdp = NULL;
3905
3906 if (!ext4_has_group_desc_csum(sb))
3907 return ngroups;
3908
3909 for (group = 0; group < ngroups; group++) {
3910 gdp = ext4_get_group_desc(sb, group, NULL);
3911 if (!gdp)
3912 continue;
3913
3914 if (!(gdp->bg_flags & cpu_to_le16(EXT4_BG_INODE_ZEROED)))
3915 break;
3916 }
3917
3918 return group;
3919 }
3920
3921 static int ext4_li_info_new(void)
3922 {
3923 struct ext4_lazy_init *eli = NULL;
3924
3925 eli = kzalloc(sizeof(*eli), GFP_KERNEL);
3926 if (!eli)
3927 return -ENOMEM;
3928
3929 INIT_LIST_HEAD(&eli->li_request_list);
3930 mutex_init(&eli->li_list_mtx);
3931
3932 eli->li_state |= EXT4_LAZYINIT_QUIT;
3933
3934 ext4_li_info = eli;
3935
3936 return 0;
3937 }
3938
3939 static struct ext4_li_request *ext4_li_request_new(struct super_block *sb,
3940 ext4_group_t start)
3941 {
3942 struct ext4_li_request *elr;
3943
3944 elr = kzalloc(sizeof(*elr), GFP_KERNEL);
3945 if (!elr)
3946 return NULL;
3947
3948 elr->lr_super = sb;
3949 elr->lr_first_not_zeroed = start;
3950 if (test_opt(sb, NO_PREFETCH_BLOCK_BITMAPS)) {
3951 elr->lr_mode = EXT4_LI_MODE_ITABLE;
3952 elr->lr_next_group = start;
3953 } else {
3954 elr->lr_mode = EXT4_LI_MODE_PREFETCH_BBITMAP;
3955 }
3956
3957
3958
3959
3960
3961
3962 elr->lr_next_sched = jiffies + (prandom_u32() %
3963 (EXT4_DEF_LI_MAX_START_DELAY * HZ));
3964 return elr;
3965 }
3966
3967 int ext4_register_li_request(struct super_block *sb,
3968 ext4_group_t first_not_zeroed)
3969 {
3970 struct ext4_sb_info *sbi = EXT4_SB(sb);
3971 struct ext4_li_request *elr = NULL;
3972 ext4_group_t ngroups = sbi->s_groups_count;
3973 int ret = 0;
3974
3975 mutex_lock(&ext4_li_mtx);
3976 if (sbi->s_li_request != NULL) {
3977
3978
3979
3980
3981 sbi->s_li_request->lr_timeout = 0;
3982 goto out;
3983 }
3984
3985 if (test_opt(sb, NO_PREFETCH_BLOCK_BITMAPS) &&
3986 (first_not_zeroed == ngroups || sb_rdonly(sb) ||
3987 !test_opt(sb, INIT_INODE_TABLE)))
3988 goto out;
3989
3990 elr = ext4_li_request_new(sb, first_not_zeroed);
3991 if (!elr) {
3992 ret = -ENOMEM;
3993 goto out;
3994 }
3995
3996 if (NULL == ext4_li_info) {
3997 ret = ext4_li_info_new();
3998 if (ret)
3999 goto out;
4000 }
4001
4002 mutex_lock(&ext4_li_info->li_list_mtx);
4003 list_add(&elr->lr_request, &ext4_li_info->li_request_list);
4004 mutex_unlock(&ext4_li_info->li_list_mtx);
4005
4006 sbi->s_li_request = elr;
4007
4008
4009
4010
4011
4012 elr = NULL;
4013
4014 if (!(ext4_li_info->li_state & EXT4_LAZYINIT_RUNNING)) {
4015 ret = ext4_run_lazyinit_thread();
4016 if (ret)
4017 goto out;
4018 }
4019 out:
4020 mutex_unlock(&ext4_li_mtx);
4021 if (ret)
4022 kfree(elr);
4023 return ret;
4024 }
4025
4026
4027
4028
4029
4030 static void ext4_destroy_lazyinit_thread(void)
4031 {
4032
4033
4034
4035
4036 if (!ext4_li_info || !ext4_lazyinit_task)
4037 return;
4038
4039 kthread_stop(ext4_lazyinit_task);
4040 }
4041
4042 static int set_journal_csum_feature_set(struct super_block *sb)
4043 {
4044 int ret = 1;
4045 int compat, incompat;
4046 struct ext4_sb_info *sbi = EXT4_SB(sb);
4047
4048 if (ext4_has_metadata_csum(sb)) {
4049
4050 compat = 0;
4051 incompat = JBD2_FEATURE_INCOMPAT_CSUM_V3;
4052 } else {
4053
4054 compat = JBD2_FEATURE_COMPAT_CHECKSUM;
4055 incompat = 0;
4056 }
4057
4058 jbd2_journal_clear_features(sbi->s_journal,
4059 JBD2_FEATURE_COMPAT_CHECKSUM, 0,
4060 JBD2_FEATURE_INCOMPAT_CSUM_V3 |
4061 JBD2_FEATURE_INCOMPAT_CSUM_V2);
4062 if (test_opt(sb, JOURNAL_ASYNC_COMMIT)) {
4063 ret = jbd2_journal_set_features(sbi->s_journal,
4064 compat, 0,
4065 JBD2_FEATURE_INCOMPAT_ASYNC_COMMIT |
4066 incompat);
4067 } else if (test_opt(sb, JOURNAL_CHECKSUM)) {
4068 ret = jbd2_journal_set_features(sbi->s_journal,
4069 compat, 0,
4070 incompat);
4071 jbd2_journal_clear_features(sbi->s_journal, 0, 0,
4072 JBD2_FEATURE_INCOMPAT_ASYNC_COMMIT);
4073 } else {
4074 jbd2_journal_clear_features(sbi->s_journal, 0, 0,
4075 JBD2_FEATURE_INCOMPAT_ASYNC_COMMIT);
4076 }
4077
4078 return ret;
4079 }
4080
4081
4082
4083
4084
4085
4086
4087
4088
4089
4090
4091
4092
4093
4094
4095
4096 static int count_overhead(struct super_block *sb, ext4_group_t grp,
4097 char *buf)
4098 {
4099 struct ext4_sb_info *sbi = EXT4_SB(sb);
4100 struct ext4_group_desc *gdp;
4101 ext4_fsblk_t first_block, last_block, b;
4102 ext4_group_t i, ngroups = ext4_get_groups_count(sb);
4103 int s, j, count = 0;
4104 int has_super = ext4_bg_has_super(sb, grp);
4105
4106 if (!ext4_has_feature_bigalloc(sb))
4107 return (has_super + ext4_bg_num_gdb(sb, grp) +
4108 (has_super ? le16_to_cpu(sbi->s_es->s_reserved_gdt_blocks) : 0) +
4109 sbi->s_itb_per_group + 2);
4110
4111 first_block = le32_to_cpu(sbi->s_es->s_first_data_block) +
4112 (grp * EXT4_BLOCKS_PER_GROUP(sb));
4113 last_block = first_block + EXT4_BLOCKS_PER_GROUP(sb) - 1;
4114 for (i = 0; i < ngroups; i++) {
4115 gdp = ext4_get_group_desc(sb, i, NULL);
4116 b = ext4_block_bitmap(sb, gdp);
4117 if (b >= first_block && b <= last_block) {
4118 ext4_set_bit(EXT4_B2C(sbi, b - first_block), buf);
4119 count++;
4120 }
4121 b = ext4_inode_bitmap(sb, gdp);
4122 if (b >= first_block && b <= last_block) {
4123 ext4_set_bit(EXT4_B2C(sbi, b - first_block), buf);
4124 count++;
4125 }
4126 b = ext4_inode_table(sb, gdp);
4127 if (b >= first_block && b + sbi->s_itb_per_group <= last_block)
4128 for (j = 0; j < sbi->s_itb_per_group; j++, b++) {
4129 int c = EXT4_B2C(sbi, b - first_block);
4130 ext4_set_bit(c, buf);
4131 count++;
4132 }
4133 if (i != grp)
4134 continue;
4135 s = 0;
4136 if (ext4_bg_has_super(sb, grp)) {
4137 ext4_set_bit(s++, buf);
4138 count++;
4139 }
4140 j = ext4_bg_num_gdb(sb, grp);
4141 if (s + j > EXT4_BLOCKS_PER_GROUP(sb)) {
4142 ext4_error(sb, "Invalid number of block group "
4143 "descriptor blocks: %d", j);
4144 j = EXT4_BLOCKS_PER_GROUP(sb) - s;
4145 }
4146 count += j;
4147 for (; j > 0; j--)
4148 ext4_set_bit(EXT4_B2C(sbi, s++), buf);
4149 }
4150 if (!count)
4151 return 0;
4152 return EXT4_CLUSTERS_PER_GROUP(sb) -
4153 ext4_count_free(buf, EXT4_CLUSTERS_PER_GROUP(sb) / 8);
4154 }
4155
4156
4157
4158
4159 int ext4_calculate_overhead(struct super_block *sb)
4160 {
4161 struct ext4_sb_info *sbi = EXT4_SB(sb);
4162 struct ext4_super_block *es = sbi->s_es;
4163 struct inode *j_inode;
4164 unsigned int j_blocks, j_inum = le32_to_cpu(es->s_journal_inum);
4165 ext4_group_t i, ngroups = ext4_get_groups_count(sb);
4166 ext4_fsblk_t overhead = 0;
4167 char *buf = (char *) get_zeroed_page(GFP_NOFS);
4168
4169 if (!buf)
4170 return -ENOMEM;
4171
4172
4173
4174
4175
4176
4177
4178
4179
4180
4181 overhead = EXT4_B2C(sbi, le32_to_cpu(es->s_first_data_block));
4182
4183
4184
4185
4186 for (i = 0; i < ngroups; i++) {
4187 int blks;
4188
4189 blks = count_overhead(sb, i, buf);
4190 overhead += blks;
4191 if (blks)
4192 memset(buf, 0, PAGE_SIZE);
4193 cond_resched();
4194 }
4195
4196
4197
4198
4199
4200 if (sbi->s_journal && !sbi->s_journal_bdev)
4201 overhead += EXT4_NUM_B2C(sbi, sbi->s_journal->j_total_len);
4202 else if (ext4_has_feature_journal(sb) && !sbi->s_journal && j_inum) {
4203
4204 j_inode = ext4_get_journal_inode(sb, j_inum);
4205 if (j_inode) {
4206 j_blocks = j_inode->i_size >> sb->s_blocksize_bits;
4207 overhead += EXT4_NUM_B2C(sbi, j_blocks);
4208 iput(j_inode);
4209 } else {
4210 ext4_msg(sb, KERN_ERR, "can't get journal size");
4211 }
4212 }
4213 sbi->s_overhead = overhead;
4214 smp_wmb();
4215 free_page((unsigned long) buf);
4216 return 0;
4217 }
4218
4219 static void ext4_set_resv_clusters(struct super_block *sb)
4220 {
4221 ext4_fsblk_t resv_clusters;
4222 struct ext4_sb_info *sbi = EXT4_SB(sb);
4223
4224
4225
4226
4227
4228
4229
4230 if (!ext4_has_feature_extents(sb))
4231 return;
4232
4233
4234
4235
4236
4237
4238
4239
4240 resv_clusters = (ext4_blocks_count(sbi->s_es) >>
4241 sbi->s_cluster_bits);
4242
4243 do_div(resv_clusters, 50);
4244 resv_clusters = min_t(ext4_fsblk_t, resv_clusters, 4096);
4245
4246 atomic64_set(&sbi->s_resv_clusters, resv_clusters);
4247 }
4248
4249 static const char *ext4_quota_mode(struct super_block *sb)
4250 {
4251 #ifdef CONFIG_QUOTA
4252 if (!ext4_quota_capable(sb))
4253 return "none";
4254
4255 if (EXT4_SB(sb)->s_journal && ext4_is_quota_journalled(sb))
4256 return "journalled";
4257 else
4258 return "writeback";
4259 #else
4260 return "disabled";
4261 #endif
4262 }
4263
4264 static void ext4_setup_csum_trigger(struct super_block *sb,
4265 enum ext4_journal_trigger_type type,
4266 void (*trigger)(
4267 struct jbd2_buffer_trigger_type *type,
4268 struct buffer_head *bh,
4269 void *mapped_data,
4270 size_t size))
4271 {
4272 struct ext4_sb_info *sbi = EXT4_SB(sb);
4273
4274 sbi->s_journal_triggers[type].sb = sb;
4275 sbi->s_journal_triggers[type].tr_triggers.t_frozen = trigger;
4276 }
4277
4278 static void ext4_free_sbi(struct ext4_sb_info *sbi)
4279 {
4280 if (!sbi)
4281 return;
4282
4283 kfree(sbi->s_blockgroup_lock);
4284 fs_put_dax(sbi->s_daxdev, NULL);
4285 kfree(sbi);
4286 }
4287
4288 static struct ext4_sb_info *ext4_alloc_sbi(struct super_block *sb)
4289 {
4290 struct ext4_sb_info *sbi;
4291
4292 sbi = kzalloc(sizeof(*sbi), GFP_KERNEL);
4293 if (!sbi)
4294 return NULL;
4295
4296 sbi->s_daxdev = fs_dax_get_by_bdev(sb->s_bdev, &sbi->s_dax_part_off,
4297 NULL, NULL);
4298
4299 sbi->s_blockgroup_lock =
4300 kzalloc(sizeof(struct blockgroup_lock), GFP_KERNEL);
4301
4302 if (!sbi->s_blockgroup_lock)
4303 goto err_out;
4304
4305 sb->s_fs_info = sbi;
4306 sbi->s_sb = sb;
4307 return sbi;
4308 err_out:
4309 fs_put_dax(sbi->s_daxdev, NULL);
4310 kfree(sbi);
4311 return NULL;
4312 }
4313
4314 static int __ext4_fill_super(struct fs_context *fc, struct super_block *sb)
4315 {
4316 struct buffer_head *bh, **group_desc;
4317 struct ext4_super_block *es = NULL;
4318 struct ext4_sb_info *sbi = EXT4_SB(sb);
4319 struct flex_groups **flex_groups;
4320 ext4_fsblk_t block;
4321 ext4_fsblk_t logical_sb_block;
4322 unsigned long offset = 0;
4323 unsigned long def_mount_opts;
4324 struct inode *root;
4325 int ret = -ENOMEM;
4326 int blocksize, clustersize;
4327 unsigned int db_count;
4328 unsigned int i;
4329 int needs_recovery, has_huge_files;
4330 __u64 blocks_count;
4331 int err = 0;
4332 ext4_group_t first_not_zeroed;
4333 struct ext4_fs_context *ctx = fc->fs_private;
4334 int silent = fc->sb_flags & SB_SILENT;
4335
4336
4337 if (!(ctx->spec & EXT4_SPEC_JOURNAL_IOPRIO))
4338 ctx->journal_ioprio = DEFAULT_JOURNAL_IOPRIO;
4339
4340 sbi->s_inode_readahead_blks = EXT4_DEF_INODE_READAHEAD_BLKS;
4341 sbi->s_sectors_written_start =
4342 part_stat_read(sb->s_bdev, sectors[STAT_WRITE]);
4343
4344
4345 ret = -EINVAL;
4346 blocksize = sb_min_blocksize(sb, EXT4_MIN_BLOCK_SIZE);
4347 if (!blocksize) {
4348 ext4_msg(sb, KERN_ERR, "unable to set blocksize");
4349 goto out_fail;
4350 }
4351
4352
4353
4354
4355
4356 if (blocksize != EXT4_MIN_BLOCK_SIZE) {
4357 logical_sb_block = sbi->s_sb_block * EXT4_MIN_BLOCK_SIZE;
4358 offset = do_div(logical_sb_block, blocksize);
4359 } else {
4360 logical_sb_block = sbi->s_sb_block;
4361 }
4362
4363 bh = ext4_sb_bread_unmovable(sb, logical_sb_block);
4364 if (IS_ERR(bh)) {
4365 ext4_msg(sb, KERN_ERR, "unable to read superblock");
4366 ret = PTR_ERR(bh);
4367 goto out_fail;
4368 }
4369
4370
4371
4372
4373 es = (struct ext4_super_block *) (bh->b_data + offset);
4374 sbi->s_es = es;
4375 sb->s_magic = le16_to_cpu(es->s_magic);
4376 if (sb->s_magic != EXT4_SUPER_MAGIC)
4377 goto cantfind_ext4;
4378 sbi->s_kbytes_written = le64_to_cpu(es->s_kbytes_written);
4379
4380
4381 if (ext4_has_feature_metadata_csum(sb) &&
4382 ext4_has_feature_gdt_csum(sb))
4383 ext4_warning(sb, "metadata_csum and uninit_bg are "
4384 "redundant flags; please run fsck.");
4385
4386
4387 if (!ext4_verify_csum_type(sb, es)) {
4388 ext4_msg(sb, KERN_ERR, "VFS: Found ext4 filesystem with "
4389 "unknown checksum algorithm.");
4390 silent = 1;
4391 goto cantfind_ext4;
4392 }
4393 ext4_setup_csum_trigger(sb, EXT4_JTR_ORPHAN_FILE,
4394 ext4_orphan_file_block_trigger);
4395
4396
4397 sbi->s_chksum_driver = crypto_alloc_shash("crc32c", 0, 0);
4398 if (IS_ERR(sbi->s_chksum_driver)) {
4399 ext4_msg(sb, KERN_ERR, "Cannot load crc32c driver.");
4400 ret = PTR_ERR(sbi->s_chksum_driver);
4401 sbi->s_chksum_driver = NULL;
4402 goto failed_mount;
4403 }
4404
4405
4406 if (!ext4_superblock_csum_verify(sb, es)) {
4407 ext4_msg(sb, KERN_ERR, "VFS: Found ext4 filesystem with "
4408 "invalid superblock checksum. Run e2fsck?");
4409 silent = 1;
4410 ret = -EFSBADCRC;
4411 goto cantfind_ext4;
4412 }
4413
4414
4415 if (ext4_has_feature_csum_seed(sb))
4416 sbi->s_csum_seed = le32_to_cpu(es->s_checksum_seed);
4417 else if (ext4_has_metadata_csum(sb) || ext4_has_feature_ea_inode(sb))
4418 sbi->s_csum_seed = ext4_chksum(sbi, ~0, es->s_uuid,
4419 sizeof(es->s_uuid));
4420
4421
4422 def_mount_opts = le32_to_cpu(es->s_default_mount_opts);
4423 set_opt(sb, INIT_INODE_TABLE);
4424 if (def_mount_opts & EXT4_DEFM_DEBUG)
4425 set_opt(sb, DEBUG);
4426 if (def_mount_opts & EXT4_DEFM_BSDGROUPS)
4427 set_opt(sb, GRPID);
4428 if (def_mount_opts & EXT4_DEFM_UID16)
4429 set_opt(sb, NO_UID32);
4430
4431 set_opt(sb, XATTR_USER);
4432 #ifdef CONFIG_EXT4_FS_POSIX_ACL
4433 set_opt(sb, POSIX_ACL);
4434 #endif
4435 if (ext4_has_feature_fast_commit(sb))
4436 set_opt2(sb, JOURNAL_FAST_COMMIT);
4437
4438 if (ext4_has_metadata_csum(sb))
4439 set_opt(sb, JOURNAL_CHECKSUM);
4440
4441 if ((def_mount_opts & EXT4_DEFM_JMODE) == EXT4_DEFM_JMODE_DATA)
4442 set_opt(sb, JOURNAL_DATA);
4443 else if ((def_mount_opts & EXT4_DEFM_JMODE) == EXT4_DEFM_JMODE_ORDERED)
4444 set_opt(sb, ORDERED_DATA);
4445 else if ((def_mount_opts & EXT4_DEFM_JMODE) == EXT4_DEFM_JMODE_WBACK)
4446 set_opt(sb, WRITEBACK_DATA);
4447
4448 if (le16_to_cpu(sbi->s_es->s_errors) == EXT4_ERRORS_PANIC)
4449 set_opt(sb, ERRORS_PANIC);
4450 else if (le16_to_cpu(sbi->s_es->s_errors) == EXT4_ERRORS_CONTINUE)
4451 set_opt(sb, ERRORS_CONT);
4452 else
4453 set_opt(sb, ERRORS_RO);
4454
4455 set_opt(sb, BLOCK_VALIDITY);
4456 if (def_mount_opts & EXT4_DEFM_DISCARD)
4457 set_opt(sb, DISCARD);
4458
4459 sbi->s_resuid = make_kuid(&init_user_ns, le16_to_cpu(es->s_def_resuid));
4460 sbi->s_resgid = make_kgid(&init_user_ns, le16_to_cpu(es->s_def_resgid));
4461 sbi->s_commit_interval = JBD2_DEFAULT_MAX_COMMIT_AGE * HZ;
4462 sbi->s_min_batch_time = EXT4_DEF_MIN_BATCH_TIME;
4463 sbi->s_max_batch_time = EXT4_DEF_MAX_BATCH_TIME;
4464
4465 if ((def_mount_opts & EXT4_DEFM_NOBARRIER) == 0)
4466 set_opt(sb, BARRIER);
4467
4468
4469
4470
4471
4472 if (!IS_EXT3_SB(sb) && !IS_EXT2_SB(sb) &&
4473 ((def_mount_opts & EXT4_DEFM_NODELALLOC) == 0))
4474 set_opt(sb, DELALLOC);
4475
4476
4477
4478
4479
4480 sbi->s_li_wait_mult = EXT4_DEF_LI_WAIT_MULT;
4481
4482 if (le32_to_cpu(es->s_log_block_size) >
4483 (EXT4_MAX_BLOCK_LOG_SIZE - EXT4_MIN_BLOCK_LOG_SIZE)) {
4484 ext4_msg(sb, KERN_ERR,
4485 "Invalid log block size: %u",
4486 le32_to_cpu(es->s_log_block_size));
4487 goto failed_mount;
4488 }
4489 if (le32_to_cpu(es->s_log_cluster_size) >
4490 (EXT4_MAX_CLUSTER_LOG_SIZE - EXT4_MIN_BLOCK_LOG_SIZE)) {
4491 ext4_msg(sb, KERN_ERR,
4492 "Invalid log cluster size: %u",
4493 le32_to_cpu(es->s_log_cluster_size));
4494 goto failed_mount;
4495 }
4496
4497 blocksize = EXT4_MIN_BLOCK_SIZE << le32_to_cpu(es->s_log_block_size);
4498
4499 if (blocksize == PAGE_SIZE)
4500 set_opt(sb, DIOREAD_NOLOCK);
4501
4502 if (le32_to_cpu(es->s_rev_level) == EXT4_GOOD_OLD_REV) {
4503 sbi->s_inode_size = EXT4_GOOD_OLD_INODE_SIZE;
4504 sbi->s_first_ino = EXT4_GOOD_OLD_FIRST_INO;
4505 } else {
4506 sbi->s_inode_size = le16_to_cpu(es->s_inode_size);
4507 sbi->s_first_ino = le32_to_cpu(es->s_first_ino);
4508 if (sbi->s_first_ino < EXT4_GOOD_OLD_FIRST_INO) {
4509 ext4_msg(sb, KERN_ERR, "invalid first ino: %u",
4510 sbi->s_first_ino);
4511 goto failed_mount;
4512 }
4513 if ((sbi->s_inode_size < EXT4_GOOD_OLD_INODE_SIZE) ||
4514 (!is_power_of_2(sbi->s_inode_size)) ||
4515 (sbi->s_inode_size > blocksize)) {
4516 ext4_msg(sb, KERN_ERR,
4517 "unsupported inode size: %d",
4518 sbi->s_inode_size);
4519 ext4_msg(sb, KERN_ERR, "blocksize: %d", blocksize);
4520 goto failed_mount;
4521 }
4522
4523
4524
4525
4526
4527
4528 if (sbi->s_inode_size >= offsetof(struct ext4_inode, i_atime_extra) +
4529 sizeof(((struct ext4_inode *)0)->i_atime_extra)) {
4530 sb->s_time_gran = 1;
4531 sb->s_time_max = EXT4_EXTRA_TIMESTAMP_MAX;
4532 } else {
4533 sb->s_time_gran = NSEC_PER_SEC;
4534 sb->s_time_max = EXT4_NON_EXTRA_TIMESTAMP_MAX;
4535 }
4536 sb->s_time_min = EXT4_TIMESTAMP_MIN;
4537 }
4538 if (sbi->s_inode_size > EXT4_GOOD_OLD_INODE_SIZE) {
4539 sbi->s_want_extra_isize = sizeof(struct ext4_inode) -
4540 EXT4_GOOD_OLD_INODE_SIZE;
4541 if (ext4_has_feature_extra_isize(sb)) {
4542 unsigned v, max = (sbi->s_inode_size -
4543 EXT4_GOOD_OLD_INODE_SIZE);
4544
4545 v = le16_to_cpu(es->s_want_extra_isize);
4546 if (v > max) {
4547 ext4_msg(sb, KERN_ERR,
4548 "bad s_want_extra_isize: %d", v);
4549 goto failed_mount;
4550 }
4551 if (sbi->s_want_extra_isize < v)
4552 sbi->s_want_extra_isize = v;
4553
4554 v = le16_to_cpu(es->s_min_extra_isize);
4555 if (v > max) {
4556 ext4_msg(sb, KERN_ERR,
4557 "bad s_min_extra_isize: %d", v);
4558 goto failed_mount;
4559 }
4560 if (sbi->s_want_extra_isize < v)
4561 sbi->s_want_extra_isize = v;
4562 }
4563 }
4564
4565 err = parse_apply_sb_mount_options(sb, ctx);
4566 if (err < 0)
4567 goto failed_mount;
4568
4569 sbi->s_def_mount_opt = sbi->s_mount_opt;
4570
4571 err = ext4_check_opt_consistency(fc, sb);
4572 if (err < 0)
4573 goto failed_mount;
4574
4575 ext4_apply_options(fc, sb);
4576
4577 #if IS_ENABLED(CONFIG_UNICODE)
4578 if (ext4_has_feature_casefold(sb) && !sb->s_encoding) {
4579 const struct ext4_sb_encodings *encoding_info;
4580 struct unicode_map *encoding;
4581 __u16 encoding_flags = le16_to_cpu(es->s_encoding_flags);
4582
4583 encoding_info = ext4_sb_read_encoding(es);
4584 if (!encoding_info) {
4585 ext4_msg(sb, KERN_ERR,
4586 "Encoding requested by superblock is unknown");
4587 goto failed_mount;
4588 }
4589
4590 encoding = utf8_load(encoding_info->version);
4591 if (IS_ERR(encoding)) {
4592 ext4_msg(sb, KERN_ERR,
4593 "can't mount with superblock charset: %s-%u.%u.%u "
4594 "not supported by the kernel. flags: 0x%x.",
4595 encoding_info->name,
4596 unicode_major(encoding_info->version),
4597 unicode_minor(encoding_info->version),
4598 unicode_rev(encoding_info->version),
4599 encoding_flags);
4600 goto failed_mount;
4601 }
4602 ext4_msg(sb, KERN_INFO,"Using encoding defined by superblock: "
4603 "%s-%u.%u.%u with flags 0x%hx", encoding_info->name,
4604 unicode_major(encoding_info->version),
4605 unicode_minor(encoding_info->version),
4606 unicode_rev(encoding_info->version),
4607 encoding_flags);
4608
4609 sb->s_encoding = encoding;
4610 sb->s_encoding_flags = encoding_flags;
4611 }
4612 #endif
4613
4614 if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA) {
4615 printk_once(KERN_WARNING "EXT4-fs: Warning: mounting with data=journal disables delayed allocation, dioread_nolock, O_DIRECT and fast_commit support!\n");
4616
4617 clear_opt(sb, DIOREAD_NOLOCK);
4618 clear_opt2(sb, JOURNAL_FAST_COMMIT);
4619 if (test_opt2(sb, EXPLICIT_DELALLOC)) {
4620 ext4_msg(sb, KERN_ERR, "can't mount with "
4621 "both data=journal and delalloc");
4622 goto failed_mount;
4623 }
4624 if (test_opt(sb, DAX_ALWAYS)) {
4625 ext4_msg(sb, KERN_ERR, "can't mount with "
4626 "both data=journal and dax");
4627 goto failed_mount;
4628 }
4629 if (ext4_has_feature_encrypt(sb)) {
4630 ext4_msg(sb, KERN_WARNING,
4631 "encrypted files will use data=ordered "
4632 "instead of data journaling mode");
4633 }
4634 if (test_opt(sb, DELALLOC))
4635 clear_opt(sb, DELALLOC);
4636 } else {
4637 sb->s_iflags |= SB_I_CGROUPWB;
4638 }
4639
4640 sb->s_flags = (sb->s_flags & ~SB_POSIXACL) |
4641 (test_opt(sb, POSIX_ACL) ? SB_POSIXACL : 0);
4642
4643 if (le32_to_cpu(es->s_rev_level) == EXT4_GOOD_OLD_REV &&
4644 (ext4_has_compat_features(sb) ||
4645 ext4_has_ro_compat_features(sb) ||
4646 ext4_has_incompat_features(sb)))
4647 ext4_msg(sb, KERN_WARNING,
4648 "feature flags set on rev 0 fs, "
4649 "running e2fsck is recommended");
4650
4651 if (es->s_creator_os == cpu_to_le32(EXT4_OS_HURD)) {
4652 set_opt2(sb, HURD_COMPAT);
4653 if (ext4_has_feature_64bit(sb)) {
4654 ext4_msg(sb, KERN_ERR,
4655 "The Hurd can't support 64-bit file systems");
4656 goto failed_mount;
4657 }
4658
4659
4660
4661
4662
4663 if (ext4_has_feature_ea_inode(sb)) {
4664 ext4_msg(sb, KERN_ERR,
4665 "ea_inode feature is not supported for Hurd");
4666 goto failed_mount;
4667 }
4668 }
4669
4670 if (IS_EXT2_SB(sb)) {
4671 if (ext2_feature_set_ok(sb))
4672 ext4_msg(sb, KERN_INFO, "mounting ext2 file system "
4673 "using the ext4 subsystem");
4674 else {
4675
4676
4677
4678
4679 if (silent && ext4_feature_set_ok(sb, sb_rdonly(sb)))
4680 goto failed_mount;
4681 ext4_msg(sb, KERN_ERR, "couldn't mount as ext2 due "
4682 "to feature incompatibilities");
4683 goto failed_mount;
4684 }
4685 }
4686
4687 if (IS_EXT3_SB(sb)) {
4688 if (ext3_feature_set_ok(sb))
4689 ext4_msg(sb, KERN_INFO, "mounting ext3 file system "
4690 "using the ext4 subsystem");
4691 else {
4692
4693
4694
4695
4696 if (silent && ext4_feature_set_ok(sb, sb_rdonly(sb)))
4697 goto failed_mount;
4698 ext4_msg(sb, KERN_ERR, "couldn't mount as ext3 due "
4699 "to feature incompatibilities");
4700 goto failed_mount;
4701 }
4702 }
4703
4704
4705
4706
4707
4708
4709 if (!ext4_feature_set_ok(sb, (sb_rdonly(sb))))
4710 goto failed_mount;
4711
4712 if (le16_to_cpu(sbi->s_es->s_reserved_gdt_blocks) > (blocksize / 4)) {
4713 ext4_msg(sb, KERN_ERR,
4714 "Number of reserved GDT blocks insanely large: %d",
4715 le16_to_cpu(sbi->s_es->s_reserved_gdt_blocks));
4716 goto failed_mount;
4717 }
4718
4719 if (sbi->s_daxdev) {
4720 if (blocksize == PAGE_SIZE)
4721 set_bit(EXT4_FLAGS_BDEV_IS_DAX, &sbi->s_ext4_flags);
4722 else
4723 ext4_msg(sb, KERN_ERR, "unsupported blocksize for DAX\n");
4724 }
4725
4726 if (sbi->s_mount_opt & EXT4_MOUNT_DAX_ALWAYS) {
4727 if (ext4_has_feature_inline_data(sb)) {
4728 ext4_msg(sb, KERN_ERR, "Cannot use DAX on a filesystem"
4729 " that may contain inline data");
4730 goto failed_mount;
4731 }
4732 if (!test_bit(EXT4_FLAGS_BDEV_IS_DAX, &sbi->s_ext4_flags)) {
4733 ext4_msg(sb, KERN_ERR,
4734 "DAX unsupported by block device.");
4735 goto failed_mount;
4736 }
4737 }
4738
4739 if (ext4_has_feature_encrypt(sb) && es->s_encryption_level) {
4740 ext4_msg(sb, KERN_ERR, "Unsupported encryption level %d",
4741 es->s_encryption_level);
4742 goto failed_mount;
4743 }
4744
4745 if (sb->s_blocksize != blocksize) {
4746
4747
4748
4749
4750
4751 brelse(bh);
4752
4753 if (!sb_set_blocksize(sb, blocksize)) {
4754 ext4_msg(sb, KERN_ERR, "bad block size %d",
4755 blocksize);
4756 bh = NULL;
4757 goto failed_mount;
4758 }
4759
4760 logical_sb_block = sbi->s_sb_block * EXT4_MIN_BLOCK_SIZE;
4761 offset = do_div(logical_sb_block, blocksize);
4762 bh = ext4_sb_bread_unmovable(sb, logical_sb_block);
4763 if (IS_ERR(bh)) {
4764 ext4_msg(sb, KERN_ERR,
4765 "Can't read superblock on 2nd try");
4766 ret = PTR_ERR(bh);
4767 bh = NULL;
4768 goto failed_mount;
4769 }
4770 es = (struct ext4_super_block *)(bh->b_data + offset);
4771 sbi->s_es = es;
4772 if (es->s_magic != cpu_to_le16(EXT4_SUPER_MAGIC)) {
4773 ext4_msg(sb, KERN_ERR,
4774 "Magic mismatch, very weird!");
4775 goto failed_mount;
4776 }
4777 }
4778
4779 has_huge_files = ext4_has_feature_huge_file(sb);
4780 sbi->s_bitmap_maxbytes = ext4_max_bitmap_size(sb->s_blocksize_bits,
4781 has_huge_files);
4782 sb->s_maxbytes = ext4_max_size(sb->s_blocksize_bits, has_huge_files);
4783
4784 sbi->s_desc_size = le16_to_cpu(es->s_desc_size);
4785 if (ext4_has_feature_64bit(sb)) {
4786 if (sbi->s_desc_size < EXT4_MIN_DESC_SIZE_64BIT ||
4787 sbi->s_desc_size > EXT4_MAX_DESC_SIZE ||
4788 !is_power_of_2(sbi->s_desc_size)) {
4789 ext4_msg(sb, KERN_ERR,
4790 "unsupported descriptor size %lu",
4791 sbi->s_desc_size);
4792 goto failed_mount;
4793 }
4794 } else
4795 sbi->s_desc_size = EXT4_MIN_DESC_SIZE;
4796
4797 sbi->s_blocks_per_group = le32_to_cpu(es->s_blocks_per_group);
4798 sbi->s_inodes_per_group = le32_to_cpu(es->s_inodes_per_group);
4799
4800 sbi->s_inodes_per_block = blocksize / EXT4_INODE_SIZE(sb);
4801 if (sbi->s_inodes_per_block == 0)
4802 goto cantfind_ext4;
4803 if (sbi->s_inodes_per_group < sbi->s_inodes_per_block ||
4804 sbi->s_inodes_per_group > blocksize * 8) {
4805 ext4_msg(sb, KERN_ERR, "invalid inodes per group: %lu\n",
4806 sbi->s_inodes_per_group);
4807 goto failed_mount;
4808 }
4809 sbi->s_itb_per_group = sbi->s_inodes_per_group /
4810 sbi->s_inodes_per_block;
4811 sbi->s_desc_per_block = blocksize / EXT4_DESC_SIZE(sb);
4812 sbi->s_sbh = bh;
4813 sbi->s_mount_state = le16_to_cpu(es->s_state) & ~EXT4_FC_REPLAY;
4814 sbi->s_addr_per_block_bits = ilog2(EXT4_ADDR_PER_BLOCK(sb));
4815 sbi->s_desc_per_block_bits = ilog2(EXT4_DESC_PER_BLOCK(sb));
4816
4817 for (i = 0; i < 4; i++)
4818 sbi->s_hash_seed[i] = le32_to_cpu(es->s_hash_seed[i]);
4819 sbi->s_def_hash_version = es->s_def_hash_version;
4820 if (ext4_has_feature_dir_index(sb)) {
4821 i = le32_to_cpu(es->s_flags);
4822 if (i & EXT2_FLAGS_UNSIGNED_HASH)
4823 sbi->s_hash_unsigned = 3;
4824 else if ((i & EXT2_FLAGS_SIGNED_HASH) == 0) {
4825 #ifdef __CHAR_UNSIGNED__
4826 if (!sb_rdonly(sb))
4827 es->s_flags |=
4828 cpu_to_le32(EXT2_FLAGS_UNSIGNED_HASH);
4829 sbi->s_hash_unsigned = 3;
4830 #else
4831 if (!sb_rdonly(sb))
4832 es->s_flags |=
4833 cpu_to_le32(EXT2_FLAGS_SIGNED_HASH);
4834 #endif
4835 }
4836 }
4837
4838
4839 clustersize = BLOCK_SIZE << le32_to_cpu(es->s_log_cluster_size);
4840 if (ext4_has_feature_bigalloc(sb)) {
4841 if (clustersize < blocksize) {
4842 ext4_msg(sb, KERN_ERR,
4843 "cluster size (%d) smaller than "
4844 "block size (%d)", clustersize, blocksize);
4845 goto failed_mount;
4846 }
4847 sbi->s_cluster_bits = le32_to_cpu(es->s_log_cluster_size) -
4848 le32_to_cpu(es->s_log_block_size);
4849 sbi->s_clusters_per_group =
4850 le32_to_cpu(es->s_clusters_per_group);
4851 if (sbi->s_clusters_per_group > blocksize * 8) {
4852 ext4_msg(sb, KERN_ERR,
4853 "#clusters per group too big: %lu",
4854 sbi->s_clusters_per_group);
4855 goto failed_mount;
4856 }
4857 if (sbi->s_blocks_per_group !=
4858 (sbi->s_clusters_per_group * (clustersize / blocksize))) {
4859 ext4_msg(sb, KERN_ERR, "blocks per group (%lu) and "
4860 "clusters per group (%lu) inconsistent",
4861 sbi->s_blocks_per_group,
4862 sbi->s_clusters_per_group);
4863 goto failed_mount;
4864 }
4865 } else {
4866 if (clustersize != blocksize) {
4867 ext4_msg(sb, KERN_ERR,
4868 "fragment/cluster size (%d) != "
4869 "block size (%d)", clustersize, blocksize);
4870 goto failed_mount;
4871 }
4872 if (sbi->s_blocks_per_group > blocksize * 8) {
4873 ext4_msg(sb, KERN_ERR,
4874 "#blocks per group too big: %lu",
4875 sbi->s_blocks_per_group);
4876 goto failed_mount;
4877 }
4878 sbi->s_clusters_per_group = sbi->s_blocks_per_group;
4879 sbi->s_cluster_bits = 0;
4880 }
4881 sbi->s_cluster_ratio = clustersize / blocksize;
4882
4883
4884 if (sbi->s_blocks_per_group == clustersize << 3)
4885 set_opt2(sb, STD_GROUP_SIZE);
4886
4887
4888
4889
4890
4891 err = generic_check_addressable(sb->s_blocksize_bits,
4892 ext4_blocks_count(es));
4893 if (err) {
4894 ext4_msg(sb, KERN_ERR, "filesystem"
4895 " too large to mount safely on this system");
4896 goto failed_mount;
4897 }
4898
4899 if (EXT4_BLOCKS_PER_GROUP(sb) == 0)
4900 goto cantfind_ext4;
4901
4902
4903 blocks_count = sb_bdev_nr_blocks(sb);
4904 if (blocks_count && ext4_blocks_count(es) > blocks_count) {
4905 ext4_msg(sb, KERN_WARNING, "bad geometry: block count %llu "
4906 "exceeds size of device (%llu blocks)",
4907 ext4_blocks_count(es), blocks_count);
4908 goto failed_mount;
4909 }
4910
4911
4912
4913
4914
4915 if (le32_to_cpu(es->s_first_data_block) >= ext4_blocks_count(es)) {
4916 ext4_msg(sb, KERN_WARNING, "bad geometry: first data "
4917 "block %u is beyond end of filesystem (%llu)",
4918 le32_to_cpu(es->s_first_data_block),
4919 ext4_blocks_count(es));
4920 goto failed_mount;
4921 }
4922 if ((es->s_first_data_block == 0) && (es->s_log_block_size == 0) &&
4923 (sbi->s_cluster_ratio == 1)) {
4924 ext4_msg(sb, KERN_WARNING, "bad geometry: first data "
4925 "block is 0 with a 1k block and cluster size");
4926 goto failed_mount;
4927 }
4928
4929 blocks_count = (ext4_blocks_count(es) -
4930 le32_to_cpu(es->s_first_data_block) +
4931 EXT4_BLOCKS_PER_GROUP(sb) - 1);
4932 do_div(blocks_count, EXT4_BLOCKS_PER_GROUP(sb));
4933 if (blocks_count > ((uint64_t)1<<32) - EXT4_DESC_PER_BLOCK(sb)) {
4934 ext4_msg(sb, KERN_WARNING, "groups count too large: %llu "
4935 "(block count %llu, first data block %u, "
4936 "blocks per group %lu)", blocks_count,
4937 ext4_blocks_count(es),
4938 le32_to_cpu(es->s_first_data_block),
4939 EXT4_BLOCKS_PER_GROUP(sb));
4940 goto failed_mount;
4941 }
4942 sbi->s_groups_count = blocks_count;
4943 sbi->s_blockfile_groups = min_t(ext4_group_t, sbi->s_groups_count,
4944 (EXT4_MAX_BLOCK_FILE_PHYS / EXT4_BLOCKS_PER_GROUP(sb)));
4945 if (((u64)sbi->s_groups_count * sbi->s_inodes_per_group) !=
4946 le32_to_cpu(es->s_inodes_count)) {
4947 ext4_msg(sb, KERN_ERR, "inodes count not valid: %u vs %llu",
4948 le32_to_cpu(es->s_inodes_count),
4949 ((u64)sbi->s_groups_count * sbi->s_inodes_per_group));
4950 ret = -EINVAL;
4951 goto failed_mount;
4952 }
4953 db_count = (sbi->s_groups_count + EXT4_DESC_PER_BLOCK(sb) - 1) /
4954 EXT4_DESC_PER_BLOCK(sb);
4955 if (ext4_has_feature_meta_bg(sb)) {
4956 if (le32_to_cpu(es->s_first_meta_bg) > db_count) {
4957 ext4_msg(sb, KERN_WARNING,
4958 "first meta block group too large: %u "
4959 "(group descriptor block count %u)",
4960 le32_to_cpu(es->s_first_meta_bg), db_count);
4961 goto failed_mount;
4962 }
4963 }
4964 rcu_assign_pointer(sbi->s_group_desc,
4965 kvmalloc_array(db_count,
4966 sizeof(struct buffer_head *),
4967 GFP_KERNEL));
4968 if (sbi->s_group_desc == NULL) {
4969 ext4_msg(sb, KERN_ERR, "not enough memory");
4970 ret = -ENOMEM;
4971 goto failed_mount;
4972 }
4973
4974 bgl_lock_init(sbi->s_blockgroup_lock);
4975
4976
4977 for (i = 0; i < db_count; i++) {
4978 block = descriptor_loc(sb, logical_sb_block, i);
4979 ext4_sb_breadahead_unmovable(sb, block);
4980 }
4981
4982 for (i = 0; i < db_count; i++) {
4983 struct buffer_head *bh;
4984
4985 block = descriptor_loc(sb, logical_sb_block, i);
4986 bh = ext4_sb_bread_unmovable(sb, block);
4987 if (IS_ERR(bh)) {
4988 ext4_msg(sb, KERN_ERR,
4989 "can't read group descriptor %d", i);
4990 db_count = i;
4991 ret = PTR_ERR(bh);
4992 goto failed_mount2;
4993 }
4994 rcu_read_lock();
4995 rcu_dereference(sbi->s_group_desc)[i] = bh;
4996 rcu_read_unlock();
4997 }
4998 sbi->s_gdb_count = db_count;
4999 if (!ext4_check_descriptors(sb, logical_sb_block, &first_not_zeroed)) {
5000 ext4_msg(sb, KERN_ERR, "group descriptors corrupted!");
5001 ret = -EFSCORRUPTED;
5002 goto failed_mount2;
5003 }
5004
5005 timer_setup(&sbi->s_err_report, print_daily_error_info, 0);
5006 spin_lock_init(&sbi->s_error_lock);
5007 INIT_WORK(&sbi->s_error_work, flush_stashed_error_work);
5008
5009
5010 if (ext4_es_register_shrinker(sbi))
5011 goto failed_mount3;
5012
5013 sbi->s_stripe = ext4_get_stripe_size(sbi);
5014 sbi->s_extent_max_zeroout_kb = 32;
5015
5016
5017
5018
5019 sb->s_op = &ext4_sops;
5020 sb->s_export_op = &ext4_export_ops;
5021 sb->s_xattr = ext4_xattr_handlers;
5022 #ifdef CONFIG_FS_ENCRYPTION
5023 sb->s_cop = &ext4_cryptops;
5024 #endif
5025 #ifdef CONFIG_FS_VERITY
5026 sb->s_vop = &ext4_verityops;
5027 #endif
5028 #ifdef CONFIG_QUOTA
5029 sb->dq_op = &ext4_quota_operations;
5030 if (ext4_has_feature_quota(sb))
5031 sb->s_qcop = &dquot_quotactl_sysfile_ops;
5032 else
5033 sb->s_qcop = &ext4_qctl_operations;
5034 sb->s_quota_types = QTYPE_MASK_USR | QTYPE_MASK_GRP | QTYPE_MASK_PRJ;
5035 #endif
5036 memcpy(&sb->s_uuid, es->s_uuid, sizeof(es->s_uuid));
5037
5038 INIT_LIST_HEAD(&sbi->s_orphan);
5039 mutex_init(&sbi->s_orphan_lock);
5040
5041
5042 atomic_set(&sbi->s_fc_subtid, 0);
5043 INIT_LIST_HEAD(&sbi->s_fc_q[FC_Q_MAIN]);
5044 INIT_LIST_HEAD(&sbi->s_fc_q[FC_Q_STAGING]);
5045 INIT_LIST_HEAD(&sbi->s_fc_dentry_q[FC_Q_MAIN]);
5046 INIT_LIST_HEAD(&sbi->s_fc_dentry_q[FC_Q_STAGING]);
5047 sbi->s_fc_bytes = 0;
5048 ext4_clear_mount_flag(sb, EXT4_MF_FC_INELIGIBLE);
5049 sbi->s_fc_ineligible_tid = 0;
5050 spin_lock_init(&sbi->s_fc_lock);
5051 memset(&sbi->s_fc_stats, 0, sizeof(sbi->s_fc_stats));
5052 sbi->s_fc_replay_state.fc_regions = NULL;
5053 sbi->s_fc_replay_state.fc_regions_size = 0;
5054 sbi->s_fc_replay_state.fc_regions_used = 0;
5055 sbi->s_fc_replay_state.fc_regions_valid = 0;
5056 sbi->s_fc_replay_state.fc_modified_inodes = NULL;
5057 sbi->s_fc_replay_state.fc_modified_inodes_size = 0;
5058 sbi->s_fc_replay_state.fc_modified_inodes_used = 0;
5059
5060 sb->s_root = NULL;
5061
5062 needs_recovery = (es->s_last_orphan != 0 ||
5063 ext4_has_feature_orphan_present(sb) ||
5064 ext4_has_feature_journal_needs_recovery(sb));
5065
5066 if (ext4_has_feature_mmp(sb) && !sb_rdonly(sb))
5067 if (ext4_multi_mount_protect(sb, le64_to_cpu(es->s_mmp_block)))
5068 goto failed_mount3a;
5069
5070
5071
5072
5073
5074 if (!test_opt(sb, NOLOAD) && ext4_has_feature_journal(sb)) {
5075 err = ext4_load_journal(sb, es, ctx->journal_devnum);
5076 if (err)
5077 goto failed_mount3a;
5078 } else if (test_opt(sb, NOLOAD) && !sb_rdonly(sb) &&
5079 ext4_has_feature_journal_needs_recovery(sb)) {
5080 ext4_msg(sb, KERN_ERR, "required journal recovery "
5081 "suppressed and not mounted read-only");
5082 goto failed_mount_wq;
5083 } else {
5084
5085 if (test_opt2(sb, EXPLICIT_JOURNAL_CHECKSUM)) {
5086 ext4_msg(sb, KERN_ERR, "can't mount with "
5087 "journal_checksum, fs mounted w/o journal");
5088 goto failed_mount_wq;
5089 }
5090 if (test_opt(sb, JOURNAL_ASYNC_COMMIT)) {
5091 ext4_msg(sb, KERN_ERR, "can't mount with "
5092 "journal_async_commit, fs mounted w/o journal");
5093 goto failed_mount_wq;
5094 }
5095 if (sbi->s_commit_interval != JBD2_DEFAULT_MAX_COMMIT_AGE*HZ) {
5096 ext4_msg(sb, KERN_ERR, "can't mount with "
5097 "commit=%lu, fs mounted w/o journal",
5098 sbi->s_commit_interval / HZ);
5099 goto failed_mount_wq;
5100 }
5101 if (EXT4_MOUNT_DATA_FLAGS &
5102 (sbi->s_mount_opt ^ sbi->s_def_mount_opt)) {
5103 ext4_msg(sb, KERN_ERR, "can't mount with "
5104 "data=, fs mounted w/o journal");
5105 goto failed_mount_wq;
5106 }
5107 sbi->s_def_mount_opt &= ~EXT4_MOUNT_JOURNAL_CHECKSUM;
5108 clear_opt(sb, JOURNAL_CHECKSUM);
5109 clear_opt(sb, DATA_FLAGS);
5110 clear_opt2(sb, JOURNAL_FAST_COMMIT);
5111 sbi->s_journal = NULL;
5112 needs_recovery = 0;
5113 goto no_journal;
5114 }
5115
5116 if (ext4_has_feature_64bit(sb) &&
5117 !jbd2_journal_set_features(EXT4_SB(sb)->s_journal, 0, 0,
5118 JBD2_FEATURE_INCOMPAT_64BIT)) {
5119 ext4_msg(sb, KERN_ERR, "Failed to set 64-bit journal feature");
5120 goto failed_mount_wq;
5121 }
5122
5123 if (!set_journal_csum_feature_set(sb)) {
5124 ext4_msg(sb, KERN_ERR, "Failed to set journal checksum "
5125 "feature set");
5126 goto failed_mount_wq;
5127 }
5128
5129 if (test_opt2(sb, JOURNAL_FAST_COMMIT) &&
5130 !jbd2_journal_set_features(EXT4_SB(sb)->s_journal, 0, 0,
5131 JBD2_FEATURE_INCOMPAT_FAST_COMMIT)) {
5132 ext4_msg(sb, KERN_ERR,
5133 "Failed to set fast commit journal feature");
5134 goto failed_mount_wq;
5135 }
5136
5137
5138
5139 switch (test_opt(sb, DATA_FLAGS)) {
5140 case 0:
5141
5142
5143
5144
5145 if (jbd2_journal_check_available_features
5146 (sbi->s_journal, 0, 0, JBD2_FEATURE_INCOMPAT_REVOKE)) {
5147 set_opt(sb, ORDERED_DATA);
5148 sbi->s_def_mount_opt |= EXT4_MOUNT_ORDERED_DATA;
5149 } else {
5150 set_opt(sb, JOURNAL_DATA);
5151 sbi->s_def_mount_opt |= EXT4_MOUNT_JOURNAL_DATA;
5152 }
5153 break;
5154
5155 case EXT4_MOUNT_ORDERED_DATA:
5156 case EXT4_MOUNT_WRITEBACK_DATA:
5157 if (!jbd2_journal_check_available_features
5158 (sbi->s_journal, 0, 0, JBD2_FEATURE_INCOMPAT_REVOKE)) {
5159 ext4_msg(sb, KERN_ERR, "Journal does not support "
5160 "requested data journaling mode");
5161 goto failed_mount_wq;
5162 }
5163 break;
5164 default:
5165 break;
5166 }
5167
5168 if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_ORDERED_DATA &&
5169 test_opt(sb, JOURNAL_ASYNC_COMMIT)) {
5170 ext4_msg(sb, KERN_ERR, "can't mount with "
5171 "journal_async_commit in data=ordered mode");
5172 goto failed_mount_wq;
5173 }
5174
5175 set_task_ioprio(sbi->s_journal->j_task, ctx->journal_ioprio);
5176
5177 sbi->s_journal->j_submit_inode_data_buffers =
5178 ext4_journal_submit_inode_data_buffers;
5179 sbi->s_journal->j_finish_inode_data_buffers =
5180 ext4_journal_finish_inode_data_buffers;
5181
5182 no_journal:
5183 if (!test_opt(sb, NO_MBCACHE)) {
5184 sbi->s_ea_block_cache = ext4_xattr_create_cache();
5185 if (!sbi->s_ea_block_cache) {
5186 ext4_msg(sb, KERN_ERR,
5187 "Failed to create ea_block_cache");
5188 goto failed_mount_wq;
5189 }
5190
5191 if (ext4_has_feature_ea_inode(sb)) {
5192 sbi->s_ea_inode_cache = ext4_xattr_create_cache();
5193 if (!sbi->s_ea_inode_cache) {
5194 ext4_msg(sb, KERN_ERR,
5195 "Failed to create ea_inode_cache");
5196 goto failed_mount_wq;
5197 }
5198 }
5199 }
5200
5201 if (ext4_has_feature_verity(sb) && blocksize != PAGE_SIZE) {
5202 ext4_msg(sb, KERN_ERR, "Unsupported blocksize for fs-verity");
5203 goto failed_mount_wq;
5204 }
5205
5206
5207
5208
5209
5210 sbi->s_overhead = le32_to_cpu(es->s_overhead_clusters);
5211
5212 if (sbi->s_overhead > ext4_blocks_count(es))
5213 sbi->s_overhead = 0;
5214
5215
5216
5217
5218
5219 if (!ext4_has_feature_bigalloc(sb))
5220 sbi->s_overhead = 0;
5221 if (sbi->s_overhead == 0) {
5222 err = ext4_calculate_overhead(sb);
5223 if (err)
5224 goto failed_mount_wq;
5225 }
5226
5227
5228
5229
5230
5231 EXT4_SB(sb)->rsv_conversion_wq =
5232 alloc_workqueue("ext4-rsv-conversion", WQ_MEM_RECLAIM | WQ_UNBOUND, 1);
5233 if (!EXT4_SB(sb)->rsv_conversion_wq) {
5234 printk(KERN_ERR "EXT4-fs: failed to create workqueue\n");
5235 ret = -ENOMEM;
5236 goto failed_mount4;
5237 }
5238
5239
5240
5241
5242
5243
5244 root = ext4_iget(sb, EXT4_ROOT_INO, EXT4_IGET_SPECIAL);
5245 if (IS_ERR(root)) {
5246 ext4_msg(sb, KERN_ERR, "get root inode failed");
5247 ret = PTR_ERR(root);
5248 root = NULL;
5249 goto failed_mount4;
5250 }
5251 if (!S_ISDIR(root->i_mode) || !root->i_blocks || !root->i_size) {
5252 ext4_msg(sb, KERN_ERR, "corrupt root inode, run e2fsck");
5253 iput(root);
5254 goto failed_mount4;
5255 }
5256
5257 sb->s_root = d_make_root(root);
5258 if (!sb->s_root) {
5259 ext4_msg(sb, KERN_ERR, "get root dentry failed");
5260 ret = -ENOMEM;
5261 goto failed_mount4;
5262 }
5263
5264 ret = ext4_setup_super(sb, es, sb_rdonly(sb));
5265 if (ret == -EROFS) {
5266 sb->s_flags |= SB_RDONLY;
5267 ret = 0;
5268 } else if (ret)
5269 goto failed_mount4a;
5270
5271 ext4_set_resv_clusters(sb);
5272
5273 if (test_opt(sb, BLOCK_VALIDITY)) {
5274 err = ext4_setup_system_zone(sb);
5275 if (err) {
5276 ext4_msg(sb, KERN_ERR, "failed to initialize system "
5277 "zone (%d)", err);
5278 goto failed_mount4a;
5279 }
5280 }
5281 ext4_fc_replay_cleanup(sb);
5282
5283 ext4_ext_init(sb);
5284
5285
5286
5287
5288
5289
5290 if (!(ctx->spec & EXT4_SPEC_mb_optimize_scan)) {
5291 if (sbi->s_groups_count >= MB_DEFAULT_LINEAR_SCAN_THRESHOLD)
5292 set_opt2(sb, MB_OPTIMIZE_SCAN);
5293 else
5294 clear_opt2(sb, MB_OPTIMIZE_SCAN);
5295 }
5296
5297 err = ext4_mb_init(sb);
5298 if (err) {
5299 ext4_msg(sb, KERN_ERR, "failed to initialize mballoc (%d)",
5300 err);
5301 goto failed_mount5;
5302 }
5303
5304
5305
5306
5307
5308 if (sbi->s_journal)
5309 sbi->s_journal->j_commit_callback =
5310 ext4_journal_commit_callback;
5311
5312 block = ext4_count_free_clusters(sb);
5313 ext4_free_blocks_count_set(sbi->s_es,
5314 EXT4_C2B(sbi, block));
5315 err = percpu_counter_init(&sbi->s_freeclusters_counter, block,
5316 GFP_KERNEL);
5317 if (!err) {
5318 unsigned long freei = ext4_count_free_inodes(sb);
5319 sbi->s_es->s_free_inodes_count = cpu_to_le32(freei);
5320 err = percpu_counter_init(&sbi->s_freeinodes_counter, freei,
5321 GFP_KERNEL);
5322 }
5323 if (!err)
5324 err = percpu_counter_init(&sbi->s_dirs_counter,
5325 ext4_count_dirs(sb), GFP_KERNEL);
5326 if (!err)
5327 err = percpu_counter_init(&sbi->s_dirtyclusters_counter, 0,
5328 GFP_KERNEL);
5329 if (!err)
5330 err = percpu_counter_init(&sbi->s_sra_exceeded_retry_limit, 0,
5331 GFP_KERNEL);
5332 if (!err)
5333 err = percpu_init_rwsem(&sbi->s_writepages_rwsem);
5334
5335 if (err) {
5336 ext4_msg(sb, KERN_ERR, "insufficient memory");
5337 goto failed_mount6;
5338 }
5339
5340 if (ext4_has_feature_flex_bg(sb))
5341 if (!ext4_fill_flex_info(sb)) {
5342 ext4_msg(sb, KERN_ERR,
5343 "unable to initialize "
5344 "flex_bg meta info!");
5345 ret = -ENOMEM;
5346 goto failed_mount6;
5347 }
5348
5349 err = ext4_register_li_request(sb, first_not_zeroed);
5350 if (err)
5351 goto failed_mount6;
5352
5353 err = ext4_register_sysfs(sb);
5354 if (err)
5355 goto failed_mount7;
5356
5357 err = ext4_init_orphan_info(sb);
5358 if (err)
5359 goto failed_mount8;
5360 #ifdef CONFIG_QUOTA
5361
5362 if (ext4_has_feature_quota(sb) && !sb_rdonly(sb)) {
5363 err = ext4_enable_quotas(sb);
5364 if (err)
5365 goto failed_mount9;
5366 }
5367 #endif
5368
5369
5370
5371
5372
5373 spin_lock_init(&sbi->s_bdev_wb_lock);
5374 errseq_check_and_advance(&sb->s_bdev->bd_inode->i_mapping->wb_err,
5375 &sbi->s_bdev_wb_err);
5376 sb->s_bdev->bd_super = sb;
5377 EXT4_SB(sb)->s_mount_state |= EXT4_ORPHAN_FS;
5378 ext4_orphan_cleanup(sb, es);
5379 EXT4_SB(sb)->s_mount_state &= ~EXT4_ORPHAN_FS;
5380
5381
5382
5383
5384
5385
5386
5387 ext4_superblock_csum_set(sb);
5388 if (needs_recovery) {
5389 ext4_msg(sb, KERN_INFO, "recovery complete");
5390 err = ext4_mark_recovery_complete(sb, es);
5391 if (err)
5392 goto failed_mount9;
5393 }
5394
5395 if (test_opt(sb, DISCARD) && !bdev_max_discard_sectors(sb->s_bdev))
5396 ext4_msg(sb, KERN_WARNING,
5397 "mounting with \"discard\" option, but the device does not support discard");
5398
5399 if (es->s_error_count)
5400 mod_timer(&sbi->s_err_report, jiffies + 300*HZ);
5401
5402
5403 ratelimit_state_init(&sbi->s_err_ratelimit_state, 5 * HZ, 10);
5404 ratelimit_state_init(&sbi->s_warning_ratelimit_state, 5 * HZ, 10);
5405 ratelimit_state_init(&sbi->s_msg_ratelimit_state, 5 * HZ, 10);
5406 atomic_set(&sbi->s_warning_count, 0);
5407 atomic_set(&sbi->s_msg_count, 0);
5408
5409 return 0;
5410
5411 cantfind_ext4:
5412 if (!silent)
5413 ext4_msg(sb, KERN_ERR, "VFS: Can't find ext4 filesystem");
5414 goto failed_mount;
5415
5416 failed_mount9:
5417 ext4_release_orphan_info(sb);
5418 failed_mount8:
5419 ext4_unregister_sysfs(sb);
5420 kobject_put(&sbi->s_kobj);
5421 failed_mount7:
5422 ext4_unregister_li_request(sb);
5423 failed_mount6:
5424 ext4_mb_release(sb);
5425 rcu_read_lock();
5426 flex_groups = rcu_dereference(sbi->s_flex_groups);
5427 if (flex_groups) {
5428 for (i = 0; i < sbi->s_flex_groups_allocated; i++)
5429 kvfree(flex_groups[i]);
5430 kvfree(flex_groups);
5431 }
5432 rcu_read_unlock();
5433 percpu_counter_destroy(&sbi->s_freeclusters_counter);
5434 percpu_counter_destroy(&sbi->s_freeinodes_counter);
5435 percpu_counter_destroy(&sbi->s_dirs_counter);
5436 percpu_counter_destroy(&sbi->s_dirtyclusters_counter);
5437 percpu_counter_destroy(&sbi->s_sra_exceeded_retry_limit);
5438 percpu_free_rwsem(&sbi->s_writepages_rwsem);
5439 failed_mount5:
5440 ext4_ext_release(sb);
5441 ext4_release_system_zone(sb);
5442 failed_mount4a:
5443 dput(sb->s_root);
5444 sb->s_root = NULL;
5445 failed_mount4:
5446 ext4_msg(sb, KERN_ERR, "mount failed");
5447 if (EXT4_SB(sb)->rsv_conversion_wq)
5448 destroy_workqueue(EXT4_SB(sb)->rsv_conversion_wq);
5449 failed_mount_wq:
5450 ext4_xattr_destroy_cache(sbi->s_ea_inode_cache);
5451 sbi->s_ea_inode_cache = NULL;
5452
5453 ext4_xattr_destroy_cache(sbi->s_ea_block_cache);
5454 sbi->s_ea_block_cache = NULL;
5455
5456 if (sbi->s_journal) {
5457
5458 flush_work(&sbi->s_error_work);
5459 jbd2_journal_destroy(sbi->s_journal);
5460 sbi->s_journal = NULL;
5461 }
5462 failed_mount3a:
5463 ext4_es_unregister_shrinker(sbi);
5464 failed_mount3:
5465
5466 flush_work(&sbi->s_error_work);
5467 del_timer_sync(&sbi->s_err_report);
5468 ext4_stop_mmpd(sbi);
5469 failed_mount2:
5470 rcu_read_lock();
5471 group_desc = rcu_dereference(sbi->s_group_desc);
5472 for (i = 0; i < db_count; i++)
5473 brelse(group_desc[i]);
5474 kvfree(group_desc);
5475 rcu_read_unlock();
5476 failed_mount:
5477 if (sbi->s_chksum_driver)
5478 crypto_free_shash(sbi->s_chksum_driver);
5479
5480 #if IS_ENABLED(CONFIG_UNICODE)
5481 utf8_unload(sb->s_encoding);
5482 #endif
5483
5484 #ifdef CONFIG_QUOTA
5485 for (i = 0; i < EXT4_MAXQUOTAS; i++)
5486 kfree(get_qf_name(sb, sbi, i));
5487 #endif
5488 fscrypt_free_dummy_policy(&sbi->s_dummy_enc_policy);
5489
5490 brelse(bh);
5491 ext4_blkdev_remove(sbi);
5492 out_fail:
5493 sb->s_fs_info = NULL;
5494 return err ? err : ret;
5495 }
5496
5497 static int ext4_fill_super(struct super_block *sb, struct fs_context *fc)
5498 {
5499 struct ext4_fs_context *ctx = fc->fs_private;
5500 struct ext4_sb_info *sbi;
5501 const char *descr;
5502 int ret;
5503
5504 sbi = ext4_alloc_sbi(sb);
5505 if (!sbi)
5506 return -ENOMEM;
5507
5508 fc->s_fs_info = sbi;
5509
5510
5511 strreplace(sb->s_id, '/', '!');
5512
5513 sbi->s_sb_block = 1;
5514 if (ctx->spec & EXT4_SPEC_s_sb_block)
5515 sbi->s_sb_block = ctx->s_sb_block;
5516
5517 ret = __ext4_fill_super(fc, sb);
5518 if (ret < 0)
5519 goto free_sbi;
5520
5521 if (sbi->s_journal) {
5522 if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA)
5523 descr = " journalled data mode";
5524 else if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_ORDERED_DATA)
5525 descr = " ordered data mode";
5526 else
5527 descr = " writeback data mode";
5528 } else
5529 descr = "out journal";
5530
5531 if (___ratelimit(&ext4_mount_msg_ratelimit, "EXT4-fs mount"))
5532 ext4_msg(sb, KERN_INFO, "mounted filesystem with%s. "
5533 "Quota mode: %s.", descr, ext4_quota_mode(sb));
5534
5535
5536 ext4_update_overhead(sb, false);
5537 return 0;
5538
5539 free_sbi:
5540 ext4_free_sbi(sbi);
5541 fc->s_fs_info = NULL;
5542 return ret;
5543 }
5544
5545 static int ext4_get_tree(struct fs_context *fc)
5546 {
5547 return get_tree_bdev(fc, ext4_fill_super);
5548 }
5549
5550
5551
5552
5553
5554
5555 static void ext4_init_journal_params(struct super_block *sb, journal_t *journal)
5556 {
5557 struct ext4_sb_info *sbi = EXT4_SB(sb);
5558
5559 journal->j_commit_interval = sbi->s_commit_interval;
5560 journal->j_min_batch_time = sbi->s_min_batch_time;
5561 journal->j_max_batch_time = sbi->s_max_batch_time;
5562 ext4_fc_init(sb, journal);
5563
5564 write_lock(&journal->j_state_lock);
5565 if (test_opt(sb, BARRIER))
5566 journal->j_flags |= JBD2_BARRIER;
5567 else
5568 journal->j_flags &= ~JBD2_BARRIER;
5569 if (test_opt(sb, DATA_ERR_ABORT))
5570 journal->j_flags |= JBD2_ABORT_ON_SYNCDATA_ERR;
5571 else
5572 journal->j_flags &= ~JBD2_ABORT_ON_SYNCDATA_ERR;
5573 write_unlock(&journal->j_state_lock);
5574 }
5575
5576 static struct inode *ext4_get_journal_inode(struct super_block *sb,
5577 unsigned int journal_inum)
5578 {
5579 struct inode *journal_inode;
5580
5581
5582
5583
5584
5585
5586 journal_inode = ext4_iget(sb, journal_inum, EXT4_IGET_SPECIAL);
5587 if (IS_ERR(journal_inode)) {
5588 ext4_msg(sb, KERN_ERR, "no journal found");
5589 return NULL;
5590 }
5591 if (!journal_inode->i_nlink) {
5592 make_bad_inode(journal_inode);
5593 iput(journal_inode);
5594 ext4_msg(sb, KERN_ERR, "journal inode is deleted");
5595 return NULL;
5596 }
5597
5598 ext4_debug("Journal inode found at %p: %lld bytes\n",
5599 journal_inode, journal_inode->i_size);
5600 if (!S_ISREG(journal_inode->i_mode)) {
5601 ext4_msg(sb, KERN_ERR, "invalid journal inode");
5602 iput(journal_inode);
5603 return NULL;
5604 }
5605 return journal_inode;
5606 }
5607
5608 static journal_t *ext4_get_journal(struct super_block *sb,
5609 unsigned int journal_inum)
5610 {
5611 struct inode *journal_inode;
5612 journal_t *journal;
5613
5614 if (WARN_ON_ONCE(!ext4_has_feature_journal(sb)))
5615 return NULL;
5616
5617 journal_inode = ext4_get_journal_inode(sb, journal_inum);
5618 if (!journal_inode)
5619 return NULL;
5620
5621 journal = jbd2_journal_init_inode(journal_inode);
5622 if (!journal) {
5623 ext4_msg(sb, KERN_ERR, "Could not load journal inode");
5624 iput(journal_inode);
5625 return NULL;
5626 }
5627 journal->j_private = sb;
5628 ext4_init_journal_params(sb, journal);
5629 return journal;
5630 }
5631
5632 static journal_t *ext4_get_dev_journal(struct super_block *sb,
5633 dev_t j_dev)
5634 {
5635 struct buffer_head *bh;
5636 journal_t *journal;
5637 ext4_fsblk_t start;
5638 ext4_fsblk_t len;
5639 int hblock, blocksize;
5640 ext4_fsblk_t sb_block;
5641 unsigned long offset;
5642 struct ext4_super_block *es;
5643 struct block_device *bdev;
5644
5645 if (WARN_ON_ONCE(!ext4_has_feature_journal(sb)))
5646 return NULL;
5647
5648 bdev = ext4_blkdev_get(j_dev, sb);
5649 if (bdev == NULL)
5650 return NULL;
5651
5652 blocksize = sb->s_blocksize;
5653 hblock = bdev_logical_block_size(bdev);
5654 if (blocksize < hblock) {
5655 ext4_msg(sb, KERN_ERR,
5656 "blocksize too small for journal device");
5657 goto out_bdev;
5658 }
5659
5660 sb_block = EXT4_MIN_BLOCK_SIZE / blocksize;
5661 offset = EXT4_MIN_BLOCK_SIZE % blocksize;
5662 set_blocksize(bdev, blocksize);
5663 if (!(bh = __bread(bdev, sb_block, blocksize))) {
5664 ext4_msg(sb, KERN_ERR, "couldn't read superblock of "
5665 "external journal");
5666 goto out_bdev;
5667 }
5668
5669 es = (struct ext4_super_block *) (bh->b_data + offset);
5670 if ((le16_to_cpu(es->s_magic) != EXT4_SUPER_MAGIC) ||
5671 !(le32_to_cpu(es->s_feature_incompat) &
5672 EXT4_FEATURE_INCOMPAT_JOURNAL_DEV)) {
5673 ext4_msg(sb, KERN_ERR, "external journal has "
5674 "bad superblock");
5675 brelse(bh);
5676 goto out_bdev;
5677 }
5678
5679 if ((le32_to_cpu(es->s_feature_ro_compat) &
5680 EXT4_FEATURE_RO_COMPAT_METADATA_CSUM) &&
5681 es->s_checksum != ext4_superblock_csum(sb, es)) {
5682 ext4_msg(sb, KERN_ERR, "external journal has "
5683 "corrupt superblock");
5684 brelse(bh);
5685 goto out_bdev;
5686 }
5687
5688 if (memcmp(EXT4_SB(sb)->s_es->s_journal_uuid, es->s_uuid, 16)) {
5689 ext4_msg(sb, KERN_ERR, "journal UUID does not match");
5690 brelse(bh);
5691 goto out_bdev;
5692 }
5693
5694 len = ext4_blocks_count(es);
5695 start = sb_block + 1;
5696 brelse(bh);
5697
5698 journal = jbd2_journal_init_dev(bdev, sb->s_bdev,
5699 start, len, blocksize);
5700 if (!journal) {
5701 ext4_msg(sb, KERN_ERR, "failed to create device journal");
5702 goto out_bdev;
5703 }
5704 journal->j_private = sb;
5705 if (ext4_read_bh_lock(journal->j_sb_buffer, REQ_META | REQ_PRIO, true)) {
5706 ext4_msg(sb, KERN_ERR, "I/O error on journal device");
5707 goto out_journal;
5708 }
5709 if (be32_to_cpu(journal->j_superblock->s_nr_users) != 1) {
5710 ext4_msg(sb, KERN_ERR, "External journal has more than one "
5711 "user (unsupported) - %d",
5712 be32_to_cpu(journal->j_superblock->s_nr_users));
5713 goto out_journal;
5714 }
5715 EXT4_SB(sb)->s_journal_bdev = bdev;
5716 ext4_init_journal_params(sb, journal);
5717 return journal;
5718
5719 out_journal:
5720 jbd2_journal_destroy(journal);
5721 out_bdev:
5722 ext4_blkdev_put(bdev);
5723 return NULL;
5724 }
5725
5726 static int ext4_load_journal(struct super_block *sb,
5727 struct ext4_super_block *es,
5728 unsigned long journal_devnum)
5729 {
5730 journal_t *journal;
5731 unsigned int journal_inum = le32_to_cpu(es->s_journal_inum);
5732 dev_t journal_dev;
5733 int err = 0;
5734 int really_read_only;
5735 int journal_dev_ro;
5736
5737 if (WARN_ON_ONCE(!ext4_has_feature_journal(sb)))
5738 return -EFSCORRUPTED;
5739
5740 if (journal_devnum &&
5741 journal_devnum != le32_to_cpu(es->s_journal_dev)) {
5742 ext4_msg(sb, KERN_INFO, "external journal device major/minor "
5743 "numbers have changed");
5744 journal_dev = new_decode_dev(journal_devnum);
5745 } else
5746 journal_dev = new_decode_dev(le32_to_cpu(es->s_journal_dev));
5747
5748 if (journal_inum && journal_dev) {
5749 ext4_msg(sb, KERN_ERR,
5750 "filesystem has both journal inode and journal device!");
5751 return -EINVAL;
5752 }
5753
5754 if (journal_inum) {
5755 journal = ext4_get_journal(sb, journal_inum);
5756 if (!journal)
5757 return -EINVAL;
5758 } else {
5759 journal = ext4_get_dev_journal(sb, journal_dev);
5760 if (!journal)
5761 return -EINVAL;
5762 }
5763
5764 journal_dev_ro = bdev_read_only(journal->j_dev);
5765 really_read_only = bdev_read_only(sb->s_bdev) | journal_dev_ro;
5766
5767 if (journal_dev_ro && !sb_rdonly(sb)) {
5768 ext4_msg(sb, KERN_ERR,
5769 "journal device read-only, try mounting with '-o ro'");
5770 err = -EROFS;
5771 goto err_out;
5772 }
5773
5774
5775
5776
5777
5778
5779 if (ext4_has_feature_journal_needs_recovery(sb)) {
5780 if (sb_rdonly(sb)) {
5781 ext4_msg(sb, KERN_INFO, "INFO: recovery "
5782 "required on readonly filesystem");
5783 if (really_read_only) {
5784 ext4_msg(sb, KERN_ERR, "write access "
5785 "unavailable, cannot proceed "
5786 "(try mounting with noload)");
5787 err = -EROFS;
5788 goto err_out;
5789 }
5790 ext4_msg(sb, KERN_INFO, "write access will "
5791 "be enabled during recovery");
5792 }
5793 }
5794
5795 if (!(journal->j_flags & JBD2_BARRIER))
5796 ext4_msg(sb, KERN_INFO, "barriers disabled");
5797
5798 if (!ext4_has_feature_journal_needs_recovery(sb))
5799 err = jbd2_journal_wipe(journal, !really_read_only);
5800 if (!err) {
5801 char *save = kmalloc(EXT4_S_ERR_LEN, GFP_KERNEL);
5802 if (save)
5803 memcpy(save, ((char *) es) +
5804 EXT4_S_ERR_START, EXT4_S_ERR_LEN);
5805 err = jbd2_journal_load(journal);
5806 if (save)
5807 memcpy(((char *) es) + EXT4_S_ERR_START,
5808 save, EXT4_S_ERR_LEN);
5809 kfree(save);
5810 }
5811
5812 if (err) {
5813 ext4_msg(sb, KERN_ERR, "error loading journal");
5814 goto err_out;
5815 }
5816
5817 EXT4_SB(sb)->s_journal = journal;
5818 err = ext4_clear_journal_err(sb, es);
5819 if (err) {
5820 EXT4_SB(sb)->s_journal = NULL;
5821 jbd2_journal_destroy(journal);
5822 return err;
5823 }
5824
5825 if (!really_read_only && journal_devnum &&
5826 journal_devnum != le32_to_cpu(es->s_journal_dev)) {
5827 es->s_journal_dev = cpu_to_le32(journal_devnum);
5828
5829
5830 ext4_commit_super(sb);
5831 }
5832
5833 return 0;
5834
5835 err_out:
5836 jbd2_journal_destroy(journal);
5837 return err;
5838 }
5839
5840
5841 static void ext4_update_super(struct super_block *sb)
5842 {
5843 struct ext4_sb_info *sbi = EXT4_SB(sb);
5844 struct ext4_super_block *es = sbi->s_es;
5845 struct buffer_head *sbh = sbi->s_sbh;
5846
5847 lock_buffer(sbh);
5848
5849
5850
5851
5852
5853
5854
5855
5856
5857
5858 if (!(sb->s_flags & SB_RDONLY))
5859 ext4_update_tstamp(es, s_wtime);
5860 es->s_kbytes_written =
5861 cpu_to_le64(sbi->s_kbytes_written +
5862 ((part_stat_read(sb->s_bdev, sectors[STAT_WRITE]) -
5863 sbi->s_sectors_written_start) >> 1));
5864 if (percpu_counter_initialized(&sbi->s_freeclusters_counter))
5865 ext4_free_blocks_count_set(es,
5866 EXT4_C2B(sbi, percpu_counter_sum_positive(
5867 &sbi->s_freeclusters_counter)));
5868 if (percpu_counter_initialized(&sbi->s_freeinodes_counter))
5869 es->s_free_inodes_count =
5870 cpu_to_le32(percpu_counter_sum_positive(
5871 &sbi->s_freeinodes_counter));
5872
5873 spin_lock(&sbi->s_error_lock);
5874 if (sbi->s_add_error_count > 0) {
5875 es->s_state |= cpu_to_le16(EXT4_ERROR_FS);
5876 if (!es->s_first_error_time && !es->s_first_error_time_hi) {
5877 __ext4_update_tstamp(&es->s_first_error_time,
5878 &es->s_first_error_time_hi,
5879 sbi->s_first_error_time);
5880 strncpy(es->s_first_error_func, sbi->s_first_error_func,
5881 sizeof(es->s_first_error_func));
5882 es->s_first_error_line =
5883 cpu_to_le32(sbi->s_first_error_line);
5884 es->s_first_error_ino =
5885 cpu_to_le32(sbi->s_first_error_ino);
5886 es->s_first_error_block =
5887 cpu_to_le64(sbi->s_first_error_block);
5888 es->s_first_error_errcode =
5889 ext4_errno_to_code(sbi->s_first_error_code);
5890 }
5891 __ext4_update_tstamp(&es->s_last_error_time,
5892 &es->s_last_error_time_hi,
5893 sbi->s_last_error_time);
5894 strncpy(es->s_last_error_func, sbi->s_last_error_func,
5895 sizeof(es->s_last_error_func));
5896 es->s_last_error_line = cpu_to_le32(sbi->s_last_error_line);
5897 es->s_last_error_ino = cpu_to_le32(sbi->s_last_error_ino);
5898 es->s_last_error_block = cpu_to_le64(sbi->s_last_error_block);
5899 es->s_last_error_errcode =
5900 ext4_errno_to_code(sbi->s_last_error_code);
5901
5902
5903
5904
5905 if (!es->s_error_count)
5906 mod_timer(&sbi->s_err_report, jiffies + 24*60*60*HZ);
5907 le32_add_cpu(&es->s_error_count, sbi->s_add_error_count);
5908 sbi->s_add_error_count = 0;
5909 }
5910 spin_unlock(&sbi->s_error_lock);
5911
5912 ext4_superblock_csum_set(sb);
5913 unlock_buffer(sbh);
5914 }
5915
5916 static int ext4_commit_super(struct super_block *sb)
5917 {
5918 struct buffer_head *sbh = EXT4_SB(sb)->s_sbh;
5919
5920 if (!sbh)
5921 return -EINVAL;
5922 if (block_device_ejected(sb))
5923 return -ENODEV;
5924
5925 ext4_update_super(sb);
5926
5927 lock_buffer(sbh);
5928
5929 if (!buffer_mapped(sbh)) {
5930 unlock_buffer(sbh);
5931 return -EIO;
5932 }
5933
5934 if (buffer_write_io_error(sbh) || !buffer_uptodate(sbh)) {
5935
5936
5937
5938
5939
5940
5941
5942
5943 ext4_msg(sb, KERN_ERR, "previous I/O error to "
5944 "superblock detected");
5945 clear_buffer_write_io_error(sbh);
5946 set_buffer_uptodate(sbh);
5947 }
5948 get_bh(sbh);
5949
5950 clear_buffer_dirty(sbh);
5951 sbh->b_end_io = end_buffer_write_sync;
5952 submit_bh(REQ_OP_WRITE | REQ_SYNC |
5953 (test_opt(sb, BARRIER) ? REQ_FUA : 0), sbh);
5954 wait_on_buffer(sbh);
5955 if (buffer_write_io_error(sbh)) {
5956 ext4_msg(sb, KERN_ERR, "I/O error while writing "
5957 "superblock");
5958 clear_buffer_write_io_error(sbh);
5959 set_buffer_uptodate(sbh);
5960 return -EIO;
5961 }
5962 return 0;
5963 }
5964
5965
5966
5967
5968
5969
5970 static int ext4_mark_recovery_complete(struct super_block *sb,
5971 struct ext4_super_block *es)
5972 {
5973 int err;
5974 journal_t *journal = EXT4_SB(sb)->s_journal;
5975
5976 if (!ext4_has_feature_journal(sb)) {
5977 if (journal != NULL) {
5978 ext4_error(sb, "Journal got removed while the fs was "
5979 "mounted!");
5980 return -EFSCORRUPTED;
5981 }
5982 return 0;
5983 }
5984 jbd2_journal_lock_updates(journal);
5985 err = jbd2_journal_flush(journal, 0);
5986 if (err < 0)
5987 goto out;
5988
5989 if (sb_rdonly(sb) && (ext4_has_feature_journal_needs_recovery(sb) ||
5990 ext4_has_feature_orphan_present(sb))) {
5991 if (!ext4_orphan_file_empty(sb)) {
5992 ext4_error(sb, "Orphan file not empty on read-only fs.");
5993 err = -EFSCORRUPTED;
5994 goto out;
5995 }
5996 ext4_clear_feature_journal_needs_recovery(sb);
5997 ext4_clear_feature_orphan_present(sb);
5998 ext4_commit_super(sb);
5999 }
6000 out:
6001 jbd2_journal_unlock_updates(journal);
6002 return err;
6003 }
6004
6005
6006
6007
6008
6009
6010 static int ext4_clear_journal_err(struct super_block *sb,
6011 struct ext4_super_block *es)
6012 {
6013 journal_t *journal;
6014 int j_errno;
6015 const char *errstr;
6016
6017 if (!ext4_has_feature_journal(sb)) {
6018 ext4_error(sb, "Journal got removed while the fs was mounted!");
6019 return -EFSCORRUPTED;
6020 }
6021
6022 journal = EXT4_SB(sb)->s_journal;
6023
6024
6025
6026
6027
6028
6029 j_errno = jbd2_journal_errno(journal);
6030 if (j_errno) {
6031 char nbuf[16];
6032
6033 errstr = ext4_decode_error(sb, j_errno, nbuf);
6034 ext4_warning(sb, "Filesystem error recorded "
6035 "from previous mount: %s", errstr);
6036 ext4_warning(sb, "Marking fs in need of filesystem check.");
6037
6038 EXT4_SB(sb)->s_mount_state |= EXT4_ERROR_FS;
6039 es->s_state |= cpu_to_le16(EXT4_ERROR_FS);
6040 ext4_commit_super(sb);
6041
6042 jbd2_journal_clear_err(journal);
6043 jbd2_journal_update_sb_errno(journal);
6044 }
6045 return 0;
6046 }
6047
6048
6049
6050
6051
6052 int ext4_force_commit(struct super_block *sb)
6053 {
6054 journal_t *journal;
6055
6056 if (sb_rdonly(sb))
6057 return 0;
6058
6059 journal = EXT4_SB(sb)->s_journal;
6060 return ext4_journal_force_commit(journal);
6061 }
6062
6063 static int ext4_sync_fs(struct super_block *sb, int wait)
6064 {
6065 int ret = 0;
6066 tid_t target;
6067 bool needs_barrier = false;
6068 struct ext4_sb_info *sbi = EXT4_SB(sb);
6069
6070 if (unlikely(ext4_forced_shutdown(sbi)))
6071 return 0;
6072
6073 trace_ext4_sync_fs(sb, wait);
6074 flush_workqueue(sbi->rsv_conversion_wq);
6075
6076
6077
6078
6079 dquot_writeback_dquots(sb, -1);
6080
6081
6082
6083
6084
6085 if (sbi->s_journal) {
6086 target = jbd2_get_latest_transaction(sbi->s_journal);
6087 if (wait && sbi->s_journal->j_flags & JBD2_BARRIER &&
6088 !jbd2_trans_will_send_data_barrier(sbi->s_journal, target))
6089 needs_barrier = true;
6090
6091 if (jbd2_journal_start_commit(sbi->s_journal, &target)) {
6092 if (wait)
6093 ret = jbd2_log_wait_commit(sbi->s_journal,
6094 target);
6095 }
6096 } else if (wait && test_opt(sb, BARRIER))
6097 needs_barrier = true;
6098 if (needs_barrier) {
6099 int err;
6100 err = blkdev_issue_flush(sb->s_bdev);
6101 if (!ret)
6102 ret = err;
6103 }
6104
6105 return ret;
6106 }
6107
6108
6109
6110
6111
6112
6113
6114
6115
6116 static int ext4_freeze(struct super_block *sb)
6117 {
6118 int error = 0;
6119 journal_t *journal;
6120
6121 if (sb_rdonly(sb))
6122 return 0;
6123
6124 journal = EXT4_SB(sb)->s_journal;
6125
6126 if (journal) {
6127
6128 jbd2_journal_lock_updates(journal);
6129
6130
6131
6132
6133
6134 error = jbd2_journal_flush(journal, 0);
6135 if (error < 0)
6136 goto out;
6137
6138
6139 ext4_clear_feature_journal_needs_recovery(sb);
6140 if (ext4_orphan_file_empty(sb))
6141 ext4_clear_feature_orphan_present(sb);
6142 }
6143
6144 error = ext4_commit_super(sb);
6145 out:
6146 if (journal)
6147
6148 jbd2_journal_unlock_updates(journal);
6149 return error;
6150 }
6151
6152
6153
6154
6155
6156 static int ext4_unfreeze(struct super_block *sb)
6157 {
6158 if (sb_rdonly(sb) || ext4_forced_shutdown(EXT4_SB(sb)))
6159 return 0;
6160
6161 if (EXT4_SB(sb)->s_journal) {
6162
6163 ext4_set_feature_journal_needs_recovery(sb);
6164 if (ext4_has_feature_orphan_file(sb))
6165 ext4_set_feature_orphan_present(sb);
6166 }
6167
6168 ext4_commit_super(sb);
6169 return 0;
6170 }
6171
6172
6173
6174
6175 struct ext4_mount_options {
6176 unsigned long s_mount_opt;
6177 unsigned long s_mount_opt2;
6178 kuid_t s_resuid;
6179 kgid_t s_resgid;
6180 unsigned long s_commit_interval;
6181 u32 s_min_batch_time, s_max_batch_time;
6182 #ifdef CONFIG_QUOTA
6183 int s_jquota_fmt;
6184 char *s_qf_names[EXT4_MAXQUOTAS];
6185 #endif
6186 };
6187
6188 static int __ext4_remount(struct fs_context *fc, struct super_block *sb)
6189 {
6190 struct ext4_fs_context *ctx = fc->fs_private;
6191 struct ext4_super_block *es;
6192 struct ext4_sb_info *sbi = EXT4_SB(sb);
6193 unsigned long old_sb_flags;
6194 struct ext4_mount_options old_opts;
6195 ext4_group_t g;
6196 int err = 0;
6197 #ifdef CONFIG_QUOTA
6198 int enable_quota = 0;
6199 int i, j;
6200 char *to_free[EXT4_MAXQUOTAS];
6201 #endif
6202
6203
6204
6205 old_sb_flags = sb->s_flags;
6206 old_opts.s_mount_opt = sbi->s_mount_opt;
6207 old_opts.s_mount_opt2 = sbi->s_mount_opt2;
6208 old_opts.s_resuid = sbi->s_resuid;
6209 old_opts.s_resgid = sbi->s_resgid;
6210 old_opts.s_commit_interval = sbi->s_commit_interval;
6211 old_opts.s_min_batch_time = sbi->s_min_batch_time;
6212 old_opts.s_max_batch_time = sbi->s_max_batch_time;
6213 #ifdef CONFIG_QUOTA
6214 old_opts.s_jquota_fmt = sbi->s_jquota_fmt;
6215 for (i = 0; i < EXT4_MAXQUOTAS; i++)
6216 if (sbi->s_qf_names[i]) {
6217 char *qf_name = get_qf_name(sb, sbi, i);
6218
6219 old_opts.s_qf_names[i] = kstrdup(qf_name, GFP_KERNEL);
6220 if (!old_opts.s_qf_names[i]) {
6221 for (j = 0; j < i; j++)
6222 kfree(old_opts.s_qf_names[j]);
6223 return -ENOMEM;
6224 }
6225 } else
6226 old_opts.s_qf_names[i] = NULL;
6227 #endif
6228 if (!(ctx->spec & EXT4_SPEC_JOURNAL_IOPRIO)) {
6229 if (sbi->s_journal && sbi->s_journal->j_task->io_context)
6230 ctx->journal_ioprio =
6231 sbi->s_journal->j_task->io_context->ioprio;
6232 else
6233 ctx->journal_ioprio = DEFAULT_JOURNAL_IOPRIO;
6234
6235 }
6236
6237 ext4_apply_options(fc, sb);
6238
6239 if ((old_opts.s_mount_opt & EXT4_MOUNT_JOURNAL_CHECKSUM) ^
6240 test_opt(sb, JOURNAL_CHECKSUM)) {
6241 ext4_msg(sb, KERN_ERR, "changing journal_checksum "
6242 "during remount not supported; ignoring");
6243 sbi->s_mount_opt ^= EXT4_MOUNT_JOURNAL_CHECKSUM;
6244 }
6245
6246 if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA) {
6247 if (test_opt2(sb, EXPLICIT_DELALLOC)) {
6248 ext4_msg(sb, KERN_ERR, "can't mount with "
6249 "both data=journal and delalloc");
6250 err = -EINVAL;
6251 goto restore_opts;
6252 }
6253 if (test_opt(sb, DIOREAD_NOLOCK)) {
6254 ext4_msg(sb, KERN_ERR, "can't mount with "
6255 "both data=journal and dioread_nolock");
6256 err = -EINVAL;
6257 goto restore_opts;
6258 }
6259 } else if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_ORDERED_DATA) {
6260 if (test_opt(sb, JOURNAL_ASYNC_COMMIT)) {
6261 ext4_msg(sb, KERN_ERR, "can't mount with "
6262 "journal_async_commit in data=ordered mode");
6263 err = -EINVAL;
6264 goto restore_opts;
6265 }
6266 }
6267
6268 if ((sbi->s_mount_opt ^ old_opts.s_mount_opt) & EXT4_MOUNT_NO_MBCACHE) {
6269 ext4_msg(sb, KERN_ERR, "can't enable nombcache during remount");
6270 err = -EINVAL;
6271 goto restore_opts;
6272 }
6273
6274 if (ext4_test_mount_flag(sb, EXT4_MF_FS_ABORTED))
6275 ext4_abort(sb, ESHUTDOWN, "Abort forced by user");
6276
6277 sb->s_flags = (sb->s_flags & ~SB_POSIXACL) |
6278 (test_opt(sb, POSIX_ACL) ? SB_POSIXACL : 0);
6279
6280 es = sbi->s_es;
6281
6282 if (sbi->s_journal) {
6283 ext4_init_journal_params(sb, sbi->s_journal);
6284 set_task_ioprio(sbi->s_journal->j_task, ctx->journal_ioprio);
6285 }
6286
6287
6288 flush_work(&sbi->s_error_work);
6289
6290 if ((bool)(fc->sb_flags & SB_RDONLY) != sb_rdonly(sb)) {
6291 if (ext4_test_mount_flag(sb, EXT4_MF_FS_ABORTED)) {
6292 err = -EROFS;
6293 goto restore_opts;
6294 }
6295
6296 if (fc->sb_flags & SB_RDONLY) {
6297 err = sync_filesystem(sb);
6298 if (err < 0)
6299 goto restore_opts;
6300 err = dquot_suspend(sb, -1);
6301 if (err < 0)
6302 goto restore_opts;
6303
6304
6305
6306
6307
6308 sb->s_flags |= SB_RDONLY;
6309
6310
6311
6312
6313
6314
6315 if (!(es->s_state & cpu_to_le16(EXT4_VALID_FS)) &&
6316 (sbi->s_mount_state & EXT4_VALID_FS))
6317 es->s_state = cpu_to_le16(sbi->s_mount_state);
6318
6319 if (sbi->s_journal) {
6320
6321
6322
6323
6324 ext4_mark_recovery_complete(sb, es);
6325 }
6326 } else {
6327
6328 if (ext4_has_feature_readonly(sb) ||
6329 !ext4_feature_set_ok(sb, 0)) {
6330 err = -EROFS;
6331 goto restore_opts;
6332 }
6333
6334
6335
6336
6337 for (g = 0; g < sbi->s_groups_count; g++) {
6338 struct ext4_group_desc *gdp =
6339 ext4_get_group_desc(sb, g, NULL);
6340
6341 if (!ext4_group_desc_csum_verify(sb, g, gdp)) {
6342 ext4_msg(sb, KERN_ERR,
6343 "ext4_remount: Checksum for group %u failed (%u!=%u)",
6344 g, le16_to_cpu(ext4_group_desc_csum(sb, g, gdp)),
6345 le16_to_cpu(gdp->bg_checksum));
6346 err = -EFSBADCRC;
6347 goto restore_opts;
6348 }
6349 }
6350
6351
6352
6353
6354
6355
6356 if (es->s_last_orphan || !ext4_orphan_file_empty(sb)) {
6357 ext4_msg(sb, KERN_WARNING, "Couldn't "
6358 "remount RDWR because of unprocessed "
6359 "orphan inode list. Please "
6360 "umount/remount instead");
6361 err = -EINVAL;
6362 goto restore_opts;
6363 }
6364
6365
6366
6367
6368
6369
6370
6371 if (sbi->s_journal) {
6372 err = ext4_clear_journal_err(sb, es);
6373 if (err)
6374 goto restore_opts;
6375 }
6376 sbi->s_mount_state = (le16_to_cpu(es->s_state) &
6377 ~EXT4_FC_REPLAY);
6378
6379 err = ext4_setup_super(sb, es, 0);
6380 if (err)
6381 goto restore_opts;
6382
6383 sb->s_flags &= ~SB_RDONLY;
6384 if (ext4_has_feature_mmp(sb))
6385 if (ext4_multi_mount_protect(sb,
6386 le64_to_cpu(es->s_mmp_block))) {
6387 err = -EROFS;
6388 goto restore_opts;
6389 }
6390 #ifdef CONFIG_QUOTA
6391 enable_quota = 1;
6392 #endif
6393 }
6394 }
6395
6396
6397
6398
6399
6400 if (sb_rdonly(sb) || !test_opt(sb, INIT_INODE_TABLE))
6401 ext4_unregister_li_request(sb);
6402 else {
6403 ext4_group_t first_not_zeroed;
6404 first_not_zeroed = ext4_has_uninit_itable(sb);
6405 ext4_register_li_request(sb, first_not_zeroed);
6406 }
6407
6408
6409
6410
6411
6412
6413 if (test_opt(sb, BLOCK_VALIDITY) && !sbi->s_system_blks) {
6414 err = ext4_setup_system_zone(sb);
6415 if (err)
6416 goto restore_opts;
6417 }
6418
6419 if (sbi->s_journal == NULL && !(old_sb_flags & SB_RDONLY)) {
6420 err = ext4_commit_super(sb);
6421 if (err)
6422 goto restore_opts;
6423 }
6424
6425 #ifdef CONFIG_QUOTA
6426
6427 for (i = 0; i < EXT4_MAXQUOTAS; i++)
6428 kfree(old_opts.s_qf_names[i]);
6429 if (enable_quota) {
6430 if (sb_any_quota_suspended(sb))
6431 dquot_resume(sb, -1);
6432 else if (ext4_has_feature_quota(sb)) {
6433 err = ext4_enable_quotas(sb);
6434 if (err)
6435 goto restore_opts;
6436 }
6437 }
6438 #endif
6439 if (!test_opt(sb, BLOCK_VALIDITY) && sbi->s_system_blks)
6440 ext4_release_system_zone(sb);
6441
6442 if (!ext4_has_feature_mmp(sb) || sb_rdonly(sb))
6443 ext4_stop_mmpd(sbi);
6444
6445 return 0;
6446
6447 restore_opts:
6448 sb->s_flags = old_sb_flags;
6449 sbi->s_mount_opt = old_opts.s_mount_opt;
6450 sbi->s_mount_opt2 = old_opts.s_mount_opt2;
6451 sbi->s_resuid = old_opts.s_resuid;
6452 sbi->s_resgid = old_opts.s_resgid;
6453 sbi->s_commit_interval = old_opts.s_commit_interval;
6454 sbi->s_min_batch_time = old_opts.s_min_batch_time;
6455 sbi->s_max_batch_time = old_opts.s_max_batch_time;
6456 if (!test_opt(sb, BLOCK_VALIDITY) && sbi->s_system_blks)
6457 ext4_release_system_zone(sb);
6458 #ifdef CONFIG_QUOTA
6459 sbi->s_jquota_fmt = old_opts.s_jquota_fmt;
6460 for (i = 0; i < EXT4_MAXQUOTAS; i++) {
6461 to_free[i] = get_qf_name(sb, sbi, i);
6462 rcu_assign_pointer(sbi->s_qf_names[i], old_opts.s_qf_names[i]);
6463 }
6464 synchronize_rcu();
6465 for (i = 0; i < EXT4_MAXQUOTAS; i++)
6466 kfree(to_free[i]);
6467 #endif
6468 if (!ext4_has_feature_mmp(sb) || sb_rdonly(sb))
6469 ext4_stop_mmpd(sbi);
6470 return err;
6471 }
6472
6473 static int ext4_reconfigure(struct fs_context *fc)
6474 {
6475 struct super_block *sb = fc->root->d_sb;
6476 int ret;
6477
6478 fc->s_fs_info = EXT4_SB(sb);
6479
6480 ret = ext4_check_opt_consistency(fc, sb);
6481 if (ret < 0)
6482 return ret;
6483
6484 ret = __ext4_remount(fc, sb);
6485 if (ret < 0)
6486 return ret;
6487
6488 ext4_msg(sb, KERN_INFO, "re-mounted. Quota mode: %s.",
6489 ext4_quota_mode(sb));
6490
6491 return 0;
6492 }
6493
6494 #ifdef CONFIG_QUOTA
6495 static int ext4_statfs_project(struct super_block *sb,
6496 kprojid_t projid, struct kstatfs *buf)
6497 {
6498 struct kqid qid;
6499 struct dquot *dquot;
6500 u64 limit;
6501 u64 curblock;
6502
6503 qid = make_kqid_projid(projid);
6504 dquot = dqget(sb, qid);
6505 if (IS_ERR(dquot))
6506 return PTR_ERR(dquot);
6507 spin_lock(&dquot->dq_dqb_lock);
6508
6509 limit = min_not_zero(dquot->dq_dqb.dqb_bsoftlimit,
6510 dquot->dq_dqb.dqb_bhardlimit);
6511 limit >>= sb->s_blocksize_bits;
6512
6513 if (limit && buf->f_blocks > limit) {
6514 curblock = (dquot->dq_dqb.dqb_curspace +
6515 dquot->dq_dqb.dqb_rsvspace) >> sb->s_blocksize_bits;
6516 buf->f_blocks = limit;
6517 buf->f_bfree = buf->f_bavail =
6518 (buf->f_blocks > curblock) ?
6519 (buf->f_blocks - curblock) : 0;
6520 }
6521
6522 limit = min_not_zero(dquot->dq_dqb.dqb_isoftlimit,
6523 dquot->dq_dqb.dqb_ihardlimit);
6524 if (limit && buf->f_files > limit) {
6525 buf->f_files = limit;
6526 buf->f_ffree =
6527 (buf->f_files > dquot->dq_dqb.dqb_curinodes) ?
6528 (buf->f_files - dquot->dq_dqb.dqb_curinodes) : 0;
6529 }
6530
6531 spin_unlock(&dquot->dq_dqb_lock);
6532 dqput(dquot);
6533 return 0;
6534 }
6535 #endif
6536
6537 static int ext4_statfs(struct dentry *dentry, struct kstatfs *buf)
6538 {
6539 struct super_block *sb = dentry->d_sb;
6540 struct ext4_sb_info *sbi = EXT4_SB(sb);
6541 struct ext4_super_block *es = sbi->s_es;
6542 ext4_fsblk_t overhead = 0, resv_blocks;
6543 s64 bfree;
6544 resv_blocks = EXT4_C2B(sbi, atomic64_read(&sbi->s_resv_clusters));
6545
6546 if (!test_opt(sb, MINIX_DF))
6547 overhead = sbi->s_overhead;
6548
6549 buf->f_type = EXT4_SUPER_MAGIC;
6550 buf->f_bsize = sb->s_blocksize;
6551 buf->f_blocks = ext4_blocks_count(es) - EXT4_C2B(sbi, overhead);
6552 bfree = percpu_counter_sum_positive(&sbi->s_freeclusters_counter) -
6553 percpu_counter_sum_positive(&sbi->s_dirtyclusters_counter);
6554
6555 buf->f_bfree = EXT4_C2B(sbi, max_t(s64, bfree, 0));
6556 buf->f_bavail = buf->f_bfree -
6557 (ext4_r_blocks_count(es) + resv_blocks);
6558 if (buf->f_bfree < (ext4_r_blocks_count(es) + resv_blocks))
6559 buf->f_bavail = 0;
6560 buf->f_files = le32_to_cpu(es->s_inodes_count);
6561 buf->f_ffree = percpu_counter_sum_positive(&sbi->s_freeinodes_counter);
6562 buf->f_namelen = EXT4_NAME_LEN;
6563 buf->f_fsid = uuid_to_fsid(es->s_uuid);
6564
6565 #ifdef CONFIG_QUOTA
6566 if (ext4_test_inode_flag(dentry->d_inode, EXT4_INODE_PROJINHERIT) &&
6567 sb_has_quota_limits_enabled(sb, PRJQUOTA))
6568 ext4_statfs_project(sb, EXT4_I(dentry->d_inode)->i_projid, buf);
6569 #endif
6570 return 0;
6571 }
6572
6573
6574 #ifdef CONFIG_QUOTA
6575
6576
6577
6578
6579
6580 static inline struct inode *dquot_to_inode(struct dquot *dquot)
6581 {
6582 return sb_dqopt(dquot->dq_sb)->files[dquot->dq_id.type];
6583 }
6584
6585 static int ext4_write_dquot(struct dquot *dquot)
6586 {
6587 int ret, err;
6588 handle_t *handle;
6589 struct inode *inode;
6590
6591 inode = dquot_to_inode(dquot);
6592 handle = ext4_journal_start(inode, EXT4_HT_QUOTA,
6593 EXT4_QUOTA_TRANS_BLOCKS(dquot->dq_sb));
6594 if (IS_ERR(handle))
6595 return PTR_ERR(handle);
6596 ret = dquot_commit(dquot);
6597 err = ext4_journal_stop(handle);
6598 if (!ret)
6599 ret = err;
6600 return ret;
6601 }
6602
6603 static int ext4_acquire_dquot(struct dquot *dquot)
6604 {
6605 int ret, err;
6606 handle_t *handle;
6607
6608 handle = ext4_journal_start(dquot_to_inode(dquot), EXT4_HT_QUOTA,
6609 EXT4_QUOTA_INIT_BLOCKS(dquot->dq_sb));
6610 if (IS_ERR(handle))
6611 return PTR_ERR(handle);
6612 ret = dquot_acquire(dquot);
6613 err = ext4_journal_stop(handle);
6614 if (!ret)
6615 ret = err;
6616 return ret;
6617 }
6618
6619 static int ext4_release_dquot(struct dquot *dquot)
6620 {
6621 int ret, err;
6622 handle_t *handle;
6623
6624 handle = ext4_journal_start(dquot_to_inode(dquot), EXT4_HT_QUOTA,
6625 EXT4_QUOTA_DEL_BLOCKS(dquot->dq_sb));
6626 if (IS_ERR(handle)) {
6627
6628 dquot_release(dquot);
6629 return PTR_ERR(handle);
6630 }
6631 ret = dquot_release(dquot);
6632 err = ext4_journal_stop(handle);
6633 if (!ret)
6634 ret = err;
6635 return ret;
6636 }
6637
6638 static int ext4_mark_dquot_dirty(struct dquot *dquot)
6639 {
6640 struct super_block *sb = dquot->dq_sb;
6641
6642 if (ext4_is_quota_journalled(sb)) {
6643 dquot_mark_dquot_dirty(dquot);
6644 return ext4_write_dquot(dquot);
6645 } else {
6646 return dquot_mark_dquot_dirty(dquot);
6647 }
6648 }
6649
6650 static int ext4_write_info(struct super_block *sb, int type)
6651 {
6652 int ret, err;
6653 handle_t *handle;
6654
6655
6656 handle = ext4_journal_start(d_inode(sb->s_root), EXT4_HT_QUOTA, 2);
6657 if (IS_ERR(handle))
6658 return PTR_ERR(handle);
6659 ret = dquot_commit_info(sb, type);
6660 err = ext4_journal_stop(handle);
6661 if (!ret)
6662 ret = err;
6663 return ret;
6664 }
6665
6666 static void lockdep_set_quota_inode(struct inode *inode, int subclass)
6667 {
6668 struct ext4_inode_info *ei = EXT4_I(inode);
6669
6670
6671
6672
6673
6674
6675
6676 (void) ei;
6677 lockdep_set_subclass(&ei->i_data_sem, subclass);
6678 }
6679
6680
6681
6682
6683 static int ext4_quota_on(struct super_block *sb, int type, int format_id,
6684 const struct path *path)
6685 {
6686 int err;
6687
6688 if (!test_opt(sb, QUOTA))
6689 return -EINVAL;
6690
6691
6692 if (path->dentry->d_sb != sb)
6693 return -EXDEV;
6694
6695
6696 if (IS_NOQUOTA(d_inode(path->dentry)))
6697 return -EBUSY;
6698
6699
6700 if (EXT4_SB(sb)->s_qf_names[type]) {
6701
6702 if (path->dentry->d_parent != sb->s_root)
6703 ext4_msg(sb, KERN_WARNING,
6704 "Quota file not on filesystem root. "
6705 "Journaled quota will not work");
6706 sb_dqopt(sb)->flags |= DQUOT_NOLIST_DIRTY;
6707 } else {
6708
6709
6710
6711
6712 sb_dqopt(sb)->flags &= ~DQUOT_NOLIST_DIRTY;
6713 }
6714
6715
6716
6717
6718
6719 if (EXT4_SB(sb)->s_journal &&
6720 ext4_should_journal_data(d_inode(path->dentry))) {
6721
6722
6723
6724
6725 jbd2_journal_lock_updates(EXT4_SB(sb)->s_journal);
6726 err = jbd2_journal_flush(EXT4_SB(sb)->s_journal, 0);
6727 jbd2_journal_unlock_updates(EXT4_SB(sb)->s_journal);
6728 if (err)
6729 return err;
6730 }
6731
6732 lockdep_set_quota_inode(path->dentry->d_inode, I_DATA_SEM_QUOTA);
6733 err = dquot_quota_on(sb, type, format_id, path);
6734 if (!err) {
6735 struct inode *inode = d_inode(path->dentry);
6736 handle_t *handle;
6737
6738
6739
6740
6741
6742
6743 inode_lock(inode);
6744 handle = ext4_journal_start(inode, EXT4_HT_QUOTA, 1);
6745 if (IS_ERR(handle))
6746 goto unlock_inode;
6747 EXT4_I(inode)->i_flags |= EXT4_NOATIME_FL | EXT4_IMMUTABLE_FL;
6748 inode_set_flags(inode, S_NOATIME | S_IMMUTABLE,
6749 S_NOATIME | S_IMMUTABLE);
6750 err = ext4_mark_inode_dirty(handle, inode);
6751 ext4_journal_stop(handle);
6752 unlock_inode:
6753 inode_unlock(inode);
6754 if (err)
6755 dquot_quota_off(sb, type);
6756 }
6757 if (err)
6758 lockdep_set_quota_inode(path->dentry->d_inode,
6759 I_DATA_SEM_NORMAL);
6760 return err;
6761 }
6762
6763 static int ext4_quota_enable(struct super_block *sb, int type, int format_id,
6764 unsigned int flags)
6765 {
6766 int err;
6767 struct inode *qf_inode;
6768 unsigned long qf_inums[EXT4_MAXQUOTAS] = {
6769 le32_to_cpu(EXT4_SB(sb)->s_es->s_usr_quota_inum),
6770 le32_to_cpu(EXT4_SB(sb)->s_es->s_grp_quota_inum),
6771 le32_to_cpu(EXT4_SB(sb)->s_es->s_prj_quota_inum)
6772 };
6773
6774 BUG_ON(!ext4_has_feature_quota(sb));
6775
6776 if (!qf_inums[type])
6777 return -EPERM;
6778
6779 qf_inode = ext4_iget(sb, qf_inums[type], EXT4_IGET_SPECIAL);
6780 if (IS_ERR(qf_inode)) {
6781 ext4_error(sb, "Bad quota inode # %lu", qf_inums[type]);
6782 return PTR_ERR(qf_inode);
6783 }
6784
6785
6786 qf_inode->i_flags |= S_NOQUOTA;
6787 lockdep_set_quota_inode(qf_inode, I_DATA_SEM_QUOTA);
6788 err = dquot_load_quota_inode(qf_inode, type, format_id, flags);
6789 if (err)
6790 lockdep_set_quota_inode(qf_inode, I_DATA_SEM_NORMAL);
6791 iput(qf_inode);
6792
6793 return err;
6794 }
6795
6796
6797 int ext4_enable_quotas(struct super_block *sb)
6798 {
6799 int type, err = 0;
6800 unsigned long qf_inums[EXT4_MAXQUOTAS] = {
6801 le32_to_cpu(EXT4_SB(sb)->s_es->s_usr_quota_inum),
6802 le32_to_cpu(EXT4_SB(sb)->s_es->s_grp_quota_inum),
6803 le32_to_cpu(EXT4_SB(sb)->s_es->s_prj_quota_inum)
6804 };
6805 bool quota_mopt[EXT4_MAXQUOTAS] = {
6806 test_opt(sb, USRQUOTA),
6807 test_opt(sb, GRPQUOTA),
6808 test_opt(sb, PRJQUOTA),
6809 };
6810
6811 sb_dqopt(sb)->flags |= DQUOT_QUOTA_SYS_FILE | DQUOT_NOLIST_DIRTY;
6812 for (type = 0; type < EXT4_MAXQUOTAS; type++) {
6813 if (qf_inums[type]) {
6814 err = ext4_quota_enable(sb, type, QFMT_VFS_V1,
6815 DQUOT_USAGE_ENABLED |
6816 (quota_mopt[type] ? DQUOT_LIMITS_ENABLED : 0));
6817 if (err) {
6818 ext4_warning(sb,
6819 "Failed to enable quota tracking "
6820 "(type=%d, err=%d). Please run "
6821 "e2fsck to fix.", type, err);
6822 for (type--; type >= 0; type--) {
6823 struct inode *inode;
6824
6825 inode = sb_dqopt(sb)->files[type];
6826 if (inode)
6827 inode = igrab(inode);
6828 dquot_quota_off(sb, type);
6829 if (inode) {
6830 lockdep_set_quota_inode(inode,
6831 I_DATA_SEM_NORMAL);
6832 iput(inode);
6833 }
6834 }
6835
6836 return err;
6837 }
6838 }
6839 }
6840 return 0;
6841 }
6842
6843 static int ext4_quota_off(struct super_block *sb, int type)
6844 {
6845 struct inode *inode = sb_dqopt(sb)->files[type];
6846 handle_t *handle;
6847 int err;
6848
6849
6850
6851 if (test_opt(sb, DELALLOC))
6852 sync_filesystem(sb);
6853
6854 if (!inode || !igrab(inode))
6855 goto out;
6856
6857 err = dquot_quota_off(sb, type);
6858 if (err || ext4_has_feature_quota(sb))
6859 goto out_put;
6860
6861 inode_lock(inode);
6862
6863
6864
6865
6866
6867 handle = ext4_journal_start(inode, EXT4_HT_QUOTA, 1);
6868 if (IS_ERR(handle)) {
6869 err = PTR_ERR(handle);
6870 goto out_unlock;
6871 }
6872 EXT4_I(inode)->i_flags &= ~(EXT4_NOATIME_FL | EXT4_IMMUTABLE_FL);
6873 inode_set_flags(inode, 0, S_NOATIME | S_IMMUTABLE);
6874 inode->i_mtime = inode->i_ctime = current_time(inode);
6875 err = ext4_mark_inode_dirty(handle, inode);
6876 ext4_journal_stop(handle);
6877 out_unlock:
6878 inode_unlock(inode);
6879 out_put:
6880 lockdep_set_quota_inode(inode, I_DATA_SEM_NORMAL);
6881 iput(inode);
6882 return err;
6883 out:
6884 return dquot_quota_off(sb, type);
6885 }
6886
6887
6888
6889
6890
6891 static ssize_t ext4_quota_read(struct super_block *sb, int type, char *data,
6892 size_t len, loff_t off)
6893 {
6894 struct inode *inode = sb_dqopt(sb)->files[type];
6895 ext4_lblk_t blk = off >> EXT4_BLOCK_SIZE_BITS(sb);
6896 int offset = off & (sb->s_blocksize - 1);
6897 int tocopy;
6898 size_t toread;
6899 struct buffer_head *bh;
6900 loff_t i_size = i_size_read(inode);
6901
6902 if (off > i_size)
6903 return 0;
6904 if (off+len > i_size)
6905 len = i_size-off;
6906 toread = len;
6907 while (toread > 0) {
6908 tocopy = sb->s_blocksize - offset < toread ?
6909 sb->s_blocksize - offset : toread;
6910 bh = ext4_bread(NULL, inode, blk, 0);
6911 if (IS_ERR(bh))
6912 return PTR_ERR(bh);
6913 if (!bh)
6914 memset(data, 0, tocopy);
6915 else
6916 memcpy(data, bh->b_data+offset, tocopy);
6917 brelse(bh);
6918 offset = 0;
6919 toread -= tocopy;
6920 data += tocopy;
6921 blk++;
6922 }
6923 return len;
6924 }
6925
6926
6927
6928 static ssize_t ext4_quota_write(struct super_block *sb, int type,
6929 const char *data, size_t len, loff_t off)
6930 {
6931 struct inode *inode = sb_dqopt(sb)->files[type];
6932 ext4_lblk_t blk = off >> EXT4_BLOCK_SIZE_BITS(sb);
6933 int err = 0, err2 = 0, offset = off & (sb->s_blocksize - 1);
6934 int retries = 0;
6935 struct buffer_head *bh;
6936 handle_t *handle = journal_current_handle();
6937
6938 if (!handle) {
6939 ext4_msg(sb, KERN_WARNING, "Quota write (off=%llu, len=%llu)"
6940 " cancelled because transaction is not started",
6941 (unsigned long long)off, (unsigned long long)len);
6942 return -EIO;
6943 }
6944
6945
6946
6947
6948 if (sb->s_blocksize - offset < len) {
6949 ext4_msg(sb, KERN_WARNING, "Quota write (off=%llu, len=%llu)"
6950 " cancelled because not block aligned",
6951 (unsigned long long)off, (unsigned long long)len);
6952 return -EIO;
6953 }
6954
6955 do {
6956 bh = ext4_bread(handle, inode, blk,
6957 EXT4_GET_BLOCKS_CREATE |
6958 EXT4_GET_BLOCKS_METADATA_NOFAIL);
6959 } while (PTR_ERR(bh) == -ENOSPC &&
6960 ext4_should_retry_alloc(inode->i_sb, &retries));
6961 if (IS_ERR(bh))
6962 return PTR_ERR(bh);
6963 if (!bh)
6964 goto out;
6965 BUFFER_TRACE(bh, "get write access");
6966 err = ext4_journal_get_write_access(handle, sb, bh, EXT4_JTR_NONE);
6967 if (err) {
6968 brelse(bh);
6969 return err;
6970 }
6971 lock_buffer(bh);
6972 memcpy(bh->b_data+offset, data, len);
6973 flush_dcache_page(bh->b_page);
6974 unlock_buffer(bh);
6975 err = ext4_handle_dirty_metadata(handle, NULL, bh);
6976 brelse(bh);
6977 out:
6978 if (inode->i_size < off + len) {
6979 i_size_write(inode, off + len);
6980 EXT4_I(inode)->i_disksize = inode->i_size;
6981 err2 = ext4_mark_inode_dirty(handle, inode);
6982 if (unlikely(err2 && !err))
6983 err = err2;
6984 }
6985 return err ? err : len;
6986 }
6987 #endif
6988
6989 #if !defined(CONFIG_EXT2_FS) && !defined(CONFIG_EXT2_FS_MODULE) && defined(CONFIG_EXT4_USE_FOR_EXT2)
6990 static inline void register_as_ext2(void)
6991 {
6992 int err = register_filesystem(&ext2_fs_type);
6993 if (err)
6994 printk(KERN_WARNING
6995 "EXT4-fs: Unable to register as ext2 (%d)\n", err);
6996 }
6997
6998 static inline void unregister_as_ext2(void)
6999 {
7000 unregister_filesystem(&ext2_fs_type);
7001 }
7002
7003 static inline int ext2_feature_set_ok(struct super_block *sb)
7004 {
7005 if (ext4_has_unknown_ext2_incompat_features(sb))
7006 return 0;
7007 if (sb_rdonly(sb))
7008 return 1;
7009 if (ext4_has_unknown_ext2_ro_compat_features(sb))
7010 return 0;
7011 return 1;
7012 }
7013 #else
7014 static inline void register_as_ext2(void) { }
7015 static inline void unregister_as_ext2(void) { }
7016 static inline int ext2_feature_set_ok(struct super_block *sb) { return 0; }
7017 #endif
7018
7019 static inline void register_as_ext3(void)
7020 {
7021 int err = register_filesystem(&ext3_fs_type);
7022 if (err)
7023 printk(KERN_WARNING
7024 "EXT4-fs: Unable to register as ext3 (%d)\n", err);
7025 }
7026
7027 static inline void unregister_as_ext3(void)
7028 {
7029 unregister_filesystem(&ext3_fs_type);
7030 }
7031
7032 static inline int ext3_feature_set_ok(struct super_block *sb)
7033 {
7034 if (ext4_has_unknown_ext3_incompat_features(sb))
7035 return 0;
7036 if (!ext4_has_feature_journal(sb))
7037 return 0;
7038 if (sb_rdonly(sb))
7039 return 1;
7040 if (ext4_has_unknown_ext3_ro_compat_features(sb))
7041 return 0;
7042 return 1;
7043 }
7044
7045 static struct file_system_type ext4_fs_type = {
7046 .owner = THIS_MODULE,
7047 .name = "ext4",
7048 .init_fs_context = ext4_init_fs_context,
7049 .parameters = ext4_param_specs,
7050 .kill_sb = kill_block_super,
7051 .fs_flags = FS_REQUIRES_DEV | FS_ALLOW_IDMAP,
7052 };
7053 MODULE_ALIAS_FS("ext4");
7054
7055
7056 wait_queue_head_t ext4__ioend_wq[EXT4_WQ_HASH_SZ];
7057
7058 static int __init ext4_init_fs(void)
7059 {
7060 int i, err;
7061
7062 ratelimit_state_init(&ext4_mount_msg_ratelimit, 30 * HZ, 64);
7063 ext4_li_info = NULL;
7064
7065
7066 ext4_check_flag_values();
7067
7068 for (i = 0; i < EXT4_WQ_HASH_SZ; i++)
7069 init_waitqueue_head(&ext4__ioend_wq[i]);
7070
7071 err = ext4_init_es();
7072 if (err)
7073 return err;
7074
7075 err = ext4_init_pending();
7076 if (err)
7077 goto out7;
7078
7079 err = ext4_init_post_read_processing();
7080 if (err)
7081 goto out6;
7082
7083 err = ext4_init_pageio();
7084 if (err)
7085 goto out5;
7086
7087 err = ext4_init_system_zone();
7088 if (err)
7089 goto out4;
7090
7091 err = ext4_init_sysfs();
7092 if (err)
7093 goto out3;
7094
7095 err = ext4_init_mballoc();
7096 if (err)
7097 goto out2;
7098 err = init_inodecache();
7099 if (err)
7100 goto out1;
7101
7102 err = ext4_fc_init_dentry_cache();
7103 if (err)
7104 goto out05;
7105
7106 register_as_ext3();
7107 register_as_ext2();
7108 err = register_filesystem(&ext4_fs_type);
7109 if (err)
7110 goto out;
7111
7112 return 0;
7113 out:
7114 unregister_as_ext2();
7115 unregister_as_ext3();
7116 ext4_fc_destroy_dentry_cache();
7117 out05:
7118 destroy_inodecache();
7119 out1:
7120 ext4_exit_mballoc();
7121 out2:
7122 ext4_exit_sysfs();
7123 out3:
7124 ext4_exit_system_zone();
7125 out4:
7126 ext4_exit_pageio();
7127 out5:
7128 ext4_exit_post_read_processing();
7129 out6:
7130 ext4_exit_pending();
7131 out7:
7132 ext4_exit_es();
7133
7134 return err;
7135 }
7136
7137 static void __exit ext4_exit_fs(void)
7138 {
7139 ext4_destroy_lazyinit_thread();
7140 unregister_as_ext2();
7141 unregister_as_ext3();
7142 unregister_filesystem(&ext4_fs_type);
7143 ext4_fc_destroy_dentry_cache();
7144 destroy_inodecache();
7145 ext4_exit_mballoc();
7146 ext4_exit_sysfs();
7147 ext4_exit_system_zone();
7148 ext4_exit_pageio();
7149 ext4_exit_post_read_processing();
7150 ext4_exit_es();
7151 ext4_exit_pending();
7152 }
7153
7154 MODULE_AUTHOR("Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore Ts'o and others");
7155 MODULE_DESCRIPTION("Fourth Extended Filesystem");
7156 MODULE_LICENSE("GPL");
7157 MODULE_SOFTDEP("pre: crc32c");
7158 module_init(ext4_init_fs)
7159 module_exit(ext4_exit_fs)