cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

super.c (124519B)


      1// SPDX-License-Identifier: GPL-2.0
      2/*
      3 * fs/f2fs/super.c
      4 *
      5 * Copyright (c) 2012 Samsung Electronics Co., Ltd.
      6 *             http://www.samsung.com/
      7 */
      8#include <linux/module.h>
      9#include <linux/init.h>
     10#include <linux/fs.h>
     11#include <linux/sched/mm.h>
     12#include <linux/statfs.h>
     13#include <linux/buffer_head.h>
     14#include <linux/kthread.h>
     15#include <linux/parser.h>
     16#include <linux/mount.h>
     17#include <linux/seq_file.h>
     18#include <linux/proc_fs.h>
     19#include <linux/random.h>
     20#include <linux/exportfs.h>
     21#include <linux/blkdev.h>
     22#include <linux/quotaops.h>
     23#include <linux/f2fs_fs.h>
     24#include <linux/sysfs.h>
     25#include <linux/quota.h>
     26#include <linux/unicode.h>
     27#include <linux/part_stat.h>
     28#include <linux/zstd.h>
     29#include <linux/lz4.h>
     30
     31#include "f2fs.h"
     32#include "node.h"
     33#include "segment.h"
     34#include "xattr.h"
     35#include "gc.h"
     36#include "iostat.h"
     37
     38#define CREATE_TRACE_POINTS
     39#include <trace/events/f2fs.h>
     40
     41static struct kmem_cache *f2fs_inode_cachep;
     42
     43#ifdef CONFIG_F2FS_FAULT_INJECTION
     44
     45const char *f2fs_fault_name[FAULT_MAX] = {
     46	[FAULT_KMALLOC]		= "kmalloc",
     47	[FAULT_KVMALLOC]	= "kvmalloc",
     48	[FAULT_PAGE_ALLOC]	= "page alloc",
     49	[FAULT_PAGE_GET]	= "page get",
     50	[FAULT_ALLOC_NID]	= "alloc nid",
     51	[FAULT_ORPHAN]		= "orphan",
     52	[FAULT_BLOCK]		= "no more block",
     53	[FAULT_DIR_DEPTH]	= "too big dir depth",
     54	[FAULT_EVICT_INODE]	= "evict_inode fail",
     55	[FAULT_TRUNCATE]	= "truncate fail",
     56	[FAULT_READ_IO]		= "read IO error",
     57	[FAULT_CHECKPOINT]	= "checkpoint error",
     58	[FAULT_DISCARD]		= "discard error",
     59	[FAULT_WRITE_IO]	= "write IO error",
     60	[FAULT_SLAB_ALLOC]	= "slab alloc",
     61	[FAULT_DQUOT_INIT]	= "dquot initialize",
     62	[FAULT_LOCK_OP]		= "lock_op",
     63};
     64
     65void f2fs_build_fault_attr(struct f2fs_sb_info *sbi, unsigned int rate,
     66							unsigned int type)
     67{
     68	struct f2fs_fault_info *ffi = &F2FS_OPTION(sbi).fault_info;
     69
     70	if (rate) {
     71		atomic_set(&ffi->inject_ops, 0);
     72		ffi->inject_rate = rate;
     73	}
     74
     75	if (type)
     76		ffi->inject_type = type;
     77
     78	if (!rate && !type)
     79		memset(ffi, 0, sizeof(struct f2fs_fault_info));
     80}
     81#endif
     82
     83/* f2fs-wide shrinker description */
     84static struct shrinker f2fs_shrinker_info = {
     85	.scan_objects = f2fs_shrink_scan,
     86	.count_objects = f2fs_shrink_count,
     87	.seeks = DEFAULT_SEEKS,
     88};
     89
     90enum {
     91	Opt_gc_background,
     92	Opt_disable_roll_forward,
     93	Opt_norecovery,
     94	Opt_discard,
     95	Opt_nodiscard,
     96	Opt_noheap,
     97	Opt_heap,
     98	Opt_user_xattr,
     99	Opt_nouser_xattr,
    100	Opt_acl,
    101	Opt_noacl,
    102	Opt_active_logs,
    103	Opt_disable_ext_identify,
    104	Opt_inline_xattr,
    105	Opt_noinline_xattr,
    106	Opt_inline_xattr_size,
    107	Opt_inline_data,
    108	Opt_inline_dentry,
    109	Opt_noinline_dentry,
    110	Opt_flush_merge,
    111	Opt_noflush_merge,
    112	Opt_nobarrier,
    113	Opt_fastboot,
    114	Opt_extent_cache,
    115	Opt_noextent_cache,
    116	Opt_noinline_data,
    117	Opt_data_flush,
    118	Opt_reserve_root,
    119	Opt_resgid,
    120	Opt_resuid,
    121	Opt_mode,
    122	Opt_io_size_bits,
    123	Opt_fault_injection,
    124	Opt_fault_type,
    125	Opt_lazytime,
    126	Opt_nolazytime,
    127	Opt_quota,
    128	Opt_noquota,
    129	Opt_usrquota,
    130	Opt_grpquota,
    131	Opt_prjquota,
    132	Opt_usrjquota,
    133	Opt_grpjquota,
    134	Opt_prjjquota,
    135	Opt_offusrjquota,
    136	Opt_offgrpjquota,
    137	Opt_offprjjquota,
    138	Opt_jqfmt_vfsold,
    139	Opt_jqfmt_vfsv0,
    140	Opt_jqfmt_vfsv1,
    141	Opt_alloc,
    142	Opt_fsync,
    143	Opt_test_dummy_encryption,
    144	Opt_inlinecrypt,
    145	Opt_checkpoint_disable,
    146	Opt_checkpoint_disable_cap,
    147	Opt_checkpoint_disable_cap_perc,
    148	Opt_checkpoint_enable,
    149	Opt_checkpoint_merge,
    150	Opt_nocheckpoint_merge,
    151	Opt_compress_algorithm,
    152	Opt_compress_log_size,
    153	Opt_compress_extension,
    154	Opt_nocompress_extension,
    155	Opt_compress_chksum,
    156	Opt_compress_mode,
    157	Opt_compress_cache,
    158	Opt_atgc,
    159	Opt_gc_merge,
    160	Opt_nogc_merge,
    161	Opt_discard_unit,
    162	Opt_err,
    163};
    164
    165static match_table_t f2fs_tokens = {
    166	{Opt_gc_background, "background_gc=%s"},
    167	{Opt_disable_roll_forward, "disable_roll_forward"},
    168	{Opt_norecovery, "norecovery"},
    169	{Opt_discard, "discard"},
    170	{Opt_nodiscard, "nodiscard"},
    171	{Opt_noheap, "no_heap"},
    172	{Opt_heap, "heap"},
    173	{Opt_user_xattr, "user_xattr"},
    174	{Opt_nouser_xattr, "nouser_xattr"},
    175	{Opt_acl, "acl"},
    176	{Opt_noacl, "noacl"},
    177	{Opt_active_logs, "active_logs=%u"},
    178	{Opt_disable_ext_identify, "disable_ext_identify"},
    179	{Opt_inline_xattr, "inline_xattr"},
    180	{Opt_noinline_xattr, "noinline_xattr"},
    181	{Opt_inline_xattr_size, "inline_xattr_size=%u"},
    182	{Opt_inline_data, "inline_data"},
    183	{Opt_inline_dentry, "inline_dentry"},
    184	{Opt_noinline_dentry, "noinline_dentry"},
    185	{Opt_flush_merge, "flush_merge"},
    186	{Opt_noflush_merge, "noflush_merge"},
    187	{Opt_nobarrier, "nobarrier"},
    188	{Opt_fastboot, "fastboot"},
    189	{Opt_extent_cache, "extent_cache"},
    190	{Opt_noextent_cache, "noextent_cache"},
    191	{Opt_noinline_data, "noinline_data"},
    192	{Opt_data_flush, "data_flush"},
    193	{Opt_reserve_root, "reserve_root=%u"},
    194	{Opt_resgid, "resgid=%u"},
    195	{Opt_resuid, "resuid=%u"},
    196	{Opt_mode, "mode=%s"},
    197	{Opt_io_size_bits, "io_bits=%u"},
    198	{Opt_fault_injection, "fault_injection=%u"},
    199	{Opt_fault_type, "fault_type=%u"},
    200	{Opt_lazytime, "lazytime"},
    201	{Opt_nolazytime, "nolazytime"},
    202	{Opt_quota, "quota"},
    203	{Opt_noquota, "noquota"},
    204	{Opt_usrquota, "usrquota"},
    205	{Opt_grpquota, "grpquota"},
    206	{Opt_prjquota, "prjquota"},
    207	{Opt_usrjquota, "usrjquota=%s"},
    208	{Opt_grpjquota, "grpjquota=%s"},
    209	{Opt_prjjquota, "prjjquota=%s"},
    210	{Opt_offusrjquota, "usrjquota="},
    211	{Opt_offgrpjquota, "grpjquota="},
    212	{Opt_offprjjquota, "prjjquota="},
    213	{Opt_jqfmt_vfsold, "jqfmt=vfsold"},
    214	{Opt_jqfmt_vfsv0, "jqfmt=vfsv0"},
    215	{Opt_jqfmt_vfsv1, "jqfmt=vfsv1"},
    216	{Opt_alloc, "alloc_mode=%s"},
    217	{Opt_fsync, "fsync_mode=%s"},
    218	{Opt_test_dummy_encryption, "test_dummy_encryption=%s"},
    219	{Opt_test_dummy_encryption, "test_dummy_encryption"},
    220	{Opt_inlinecrypt, "inlinecrypt"},
    221	{Opt_checkpoint_disable, "checkpoint=disable"},
    222	{Opt_checkpoint_disable_cap, "checkpoint=disable:%u"},
    223	{Opt_checkpoint_disable_cap_perc, "checkpoint=disable:%u%%"},
    224	{Opt_checkpoint_enable, "checkpoint=enable"},
    225	{Opt_checkpoint_merge, "checkpoint_merge"},
    226	{Opt_nocheckpoint_merge, "nocheckpoint_merge"},
    227	{Opt_compress_algorithm, "compress_algorithm=%s"},
    228	{Opt_compress_log_size, "compress_log_size=%u"},
    229	{Opt_compress_extension, "compress_extension=%s"},
    230	{Opt_nocompress_extension, "nocompress_extension=%s"},
    231	{Opt_compress_chksum, "compress_chksum"},
    232	{Opt_compress_mode, "compress_mode=%s"},
    233	{Opt_compress_cache, "compress_cache"},
    234	{Opt_atgc, "atgc"},
    235	{Opt_gc_merge, "gc_merge"},
    236	{Opt_nogc_merge, "nogc_merge"},
    237	{Opt_discard_unit, "discard_unit=%s"},
    238	{Opt_err, NULL},
    239};
    240
    241void f2fs_printk(struct f2fs_sb_info *sbi, const char *fmt, ...)
    242{
    243	struct va_format vaf;
    244	va_list args;
    245	int level;
    246
    247	va_start(args, fmt);
    248
    249	level = printk_get_level(fmt);
    250	vaf.fmt = printk_skip_level(fmt);
    251	vaf.va = &args;
    252	printk("%c%cF2FS-fs (%s): %pV\n",
    253	       KERN_SOH_ASCII, level, sbi->sb->s_id, &vaf);
    254
    255	va_end(args);
    256}
    257
    258#if IS_ENABLED(CONFIG_UNICODE)
    259static const struct f2fs_sb_encodings {
    260	__u16 magic;
    261	char *name;
    262	unsigned int version;
    263} f2fs_sb_encoding_map[] = {
    264	{F2FS_ENC_UTF8_12_1, "utf8", UNICODE_AGE(12, 1, 0)},
    265};
    266
    267static const struct f2fs_sb_encodings *
    268f2fs_sb_read_encoding(const struct f2fs_super_block *sb)
    269{
    270	__u16 magic = le16_to_cpu(sb->s_encoding);
    271	int i;
    272
    273	for (i = 0; i < ARRAY_SIZE(f2fs_sb_encoding_map); i++)
    274		if (magic == f2fs_sb_encoding_map[i].magic)
    275			return &f2fs_sb_encoding_map[i];
    276
    277	return NULL;
    278}
    279
    280struct kmem_cache *f2fs_cf_name_slab;
    281static int __init f2fs_create_casefold_cache(void)
    282{
    283	f2fs_cf_name_slab = f2fs_kmem_cache_create("f2fs_casefolded_name",
    284							F2FS_NAME_LEN);
    285	if (!f2fs_cf_name_slab)
    286		return -ENOMEM;
    287	return 0;
    288}
    289
    290static void f2fs_destroy_casefold_cache(void)
    291{
    292	kmem_cache_destroy(f2fs_cf_name_slab);
    293}
    294#else
    295static int __init f2fs_create_casefold_cache(void) { return 0; }
    296static void f2fs_destroy_casefold_cache(void) { }
    297#endif
    298
    299static inline void limit_reserve_root(struct f2fs_sb_info *sbi)
    300{
    301	block_t limit = min((sbi->user_block_count << 1) / 1000,
    302			sbi->user_block_count - sbi->reserved_blocks);
    303
    304	/* limit is 0.2% */
    305	if (test_opt(sbi, RESERVE_ROOT) &&
    306			F2FS_OPTION(sbi).root_reserved_blocks > limit) {
    307		F2FS_OPTION(sbi).root_reserved_blocks = limit;
    308		f2fs_info(sbi, "Reduce reserved blocks for root = %u",
    309			  F2FS_OPTION(sbi).root_reserved_blocks);
    310	}
    311	if (!test_opt(sbi, RESERVE_ROOT) &&
    312		(!uid_eq(F2FS_OPTION(sbi).s_resuid,
    313				make_kuid(&init_user_ns, F2FS_DEF_RESUID)) ||
    314		!gid_eq(F2FS_OPTION(sbi).s_resgid,
    315				make_kgid(&init_user_ns, F2FS_DEF_RESGID))))
    316		f2fs_info(sbi, "Ignore s_resuid=%u, s_resgid=%u w/o reserve_root",
    317			  from_kuid_munged(&init_user_ns,
    318					   F2FS_OPTION(sbi).s_resuid),
    319			  from_kgid_munged(&init_user_ns,
    320					   F2FS_OPTION(sbi).s_resgid));
    321}
    322
    323static inline int adjust_reserved_segment(struct f2fs_sb_info *sbi)
    324{
    325	unsigned int sec_blks = sbi->blocks_per_seg * sbi->segs_per_sec;
    326	unsigned int avg_vblocks;
    327	unsigned int wanted_reserved_segments;
    328	block_t avail_user_block_count;
    329
    330	if (!F2FS_IO_ALIGNED(sbi))
    331		return 0;
    332
    333	/* average valid block count in section in worst case */
    334	avg_vblocks = sec_blks / F2FS_IO_SIZE(sbi);
    335
    336	/*
    337	 * we need enough free space when migrating one section in worst case
    338	 */
    339	wanted_reserved_segments = (F2FS_IO_SIZE(sbi) / avg_vblocks) *
    340						reserved_segments(sbi);
    341	wanted_reserved_segments -= reserved_segments(sbi);
    342
    343	avail_user_block_count = sbi->user_block_count -
    344				sbi->current_reserved_blocks -
    345				F2FS_OPTION(sbi).root_reserved_blocks;
    346
    347	if (wanted_reserved_segments * sbi->blocks_per_seg >
    348					avail_user_block_count) {
    349		f2fs_err(sbi, "IO align feature can't grab additional reserved segment: %u, available segments: %u",
    350			wanted_reserved_segments,
    351			avail_user_block_count >> sbi->log_blocks_per_seg);
    352		return -ENOSPC;
    353	}
    354
    355	SM_I(sbi)->additional_reserved_segments = wanted_reserved_segments;
    356
    357	f2fs_info(sbi, "IO align feature needs additional reserved segment: %u",
    358			 wanted_reserved_segments);
    359
    360	return 0;
    361}
    362
    363static inline void adjust_unusable_cap_perc(struct f2fs_sb_info *sbi)
    364{
    365	if (!F2FS_OPTION(sbi).unusable_cap_perc)
    366		return;
    367
    368	if (F2FS_OPTION(sbi).unusable_cap_perc == 100)
    369		F2FS_OPTION(sbi).unusable_cap = sbi->user_block_count;
    370	else
    371		F2FS_OPTION(sbi).unusable_cap = (sbi->user_block_count / 100) *
    372					F2FS_OPTION(sbi).unusable_cap_perc;
    373
    374	f2fs_info(sbi, "Adjust unusable cap for checkpoint=disable = %u / %u%%",
    375			F2FS_OPTION(sbi).unusable_cap,
    376			F2FS_OPTION(sbi).unusable_cap_perc);
    377}
    378
    379static void init_once(void *foo)
    380{
    381	struct f2fs_inode_info *fi = (struct f2fs_inode_info *) foo;
    382
    383	inode_init_once(&fi->vfs_inode);
    384}
    385
    386#ifdef CONFIG_QUOTA
    387static const char * const quotatypes[] = INITQFNAMES;
    388#define QTYPE2NAME(t) (quotatypes[t])
    389static int f2fs_set_qf_name(struct super_block *sb, int qtype,
    390							substring_t *args)
    391{
    392	struct f2fs_sb_info *sbi = F2FS_SB(sb);
    393	char *qname;
    394	int ret = -EINVAL;
    395
    396	if (sb_any_quota_loaded(sb) && !F2FS_OPTION(sbi).s_qf_names[qtype]) {
    397		f2fs_err(sbi, "Cannot change journaled quota options when quota turned on");
    398		return -EINVAL;
    399	}
    400	if (f2fs_sb_has_quota_ino(sbi)) {
    401		f2fs_info(sbi, "QUOTA feature is enabled, so ignore qf_name");
    402		return 0;
    403	}
    404
    405	qname = match_strdup(args);
    406	if (!qname) {
    407		f2fs_err(sbi, "Not enough memory for storing quotafile name");
    408		return -ENOMEM;
    409	}
    410	if (F2FS_OPTION(sbi).s_qf_names[qtype]) {
    411		if (strcmp(F2FS_OPTION(sbi).s_qf_names[qtype], qname) == 0)
    412			ret = 0;
    413		else
    414			f2fs_err(sbi, "%s quota file already specified",
    415				 QTYPE2NAME(qtype));
    416		goto errout;
    417	}
    418	if (strchr(qname, '/')) {
    419		f2fs_err(sbi, "quotafile must be on filesystem root");
    420		goto errout;
    421	}
    422	F2FS_OPTION(sbi).s_qf_names[qtype] = qname;
    423	set_opt(sbi, QUOTA);
    424	return 0;
    425errout:
    426	kfree(qname);
    427	return ret;
    428}
    429
    430static int f2fs_clear_qf_name(struct super_block *sb, int qtype)
    431{
    432	struct f2fs_sb_info *sbi = F2FS_SB(sb);
    433
    434	if (sb_any_quota_loaded(sb) && F2FS_OPTION(sbi).s_qf_names[qtype]) {
    435		f2fs_err(sbi, "Cannot change journaled quota options when quota turned on");
    436		return -EINVAL;
    437	}
    438	kfree(F2FS_OPTION(sbi).s_qf_names[qtype]);
    439	F2FS_OPTION(sbi).s_qf_names[qtype] = NULL;
    440	return 0;
    441}
    442
    443static int f2fs_check_quota_options(struct f2fs_sb_info *sbi)
    444{
    445	/*
    446	 * We do the test below only for project quotas. 'usrquota' and
    447	 * 'grpquota' mount options are allowed even without quota feature
    448	 * to support legacy quotas in quota files.
    449	 */
    450	if (test_opt(sbi, PRJQUOTA) && !f2fs_sb_has_project_quota(sbi)) {
    451		f2fs_err(sbi, "Project quota feature not enabled. Cannot enable project quota enforcement.");
    452		return -1;
    453	}
    454	if (F2FS_OPTION(sbi).s_qf_names[USRQUOTA] ||
    455			F2FS_OPTION(sbi).s_qf_names[GRPQUOTA] ||
    456			F2FS_OPTION(sbi).s_qf_names[PRJQUOTA]) {
    457		if (test_opt(sbi, USRQUOTA) &&
    458				F2FS_OPTION(sbi).s_qf_names[USRQUOTA])
    459			clear_opt(sbi, USRQUOTA);
    460
    461		if (test_opt(sbi, GRPQUOTA) &&
    462				F2FS_OPTION(sbi).s_qf_names[GRPQUOTA])
    463			clear_opt(sbi, GRPQUOTA);
    464
    465		if (test_opt(sbi, PRJQUOTA) &&
    466				F2FS_OPTION(sbi).s_qf_names[PRJQUOTA])
    467			clear_opt(sbi, PRJQUOTA);
    468
    469		if (test_opt(sbi, GRPQUOTA) || test_opt(sbi, USRQUOTA) ||
    470				test_opt(sbi, PRJQUOTA)) {
    471			f2fs_err(sbi, "old and new quota format mixing");
    472			return -1;
    473		}
    474
    475		if (!F2FS_OPTION(sbi).s_jquota_fmt) {
    476			f2fs_err(sbi, "journaled quota format not specified");
    477			return -1;
    478		}
    479	}
    480
    481	if (f2fs_sb_has_quota_ino(sbi) && F2FS_OPTION(sbi).s_jquota_fmt) {
    482		f2fs_info(sbi, "QUOTA feature is enabled, so ignore jquota_fmt");
    483		F2FS_OPTION(sbi).s_jquota_fmt = 0;
    484	}
    485	return 0;
    486}
    487#endif
    488
    489static int f2fs_set_test_dummy_encryption(struct super_block *sb,
    490					  const char *opt,
    491					  const substring_t *arg,
    492					  bool is_remount)
    493{
    494	struct f2fs_sb_info *sbi = F2FS_SB(sb);
    495#ifdef CONFIG_FS_ENCRYPTION
    496	int err;
    497
    498	if (!f2fs_sb_has_encrypt(sbi)) {
    499		f2fs_err(sbi, "Encrypt feature is off");
    500		return -EINVAL;
    501	}
    502
    503	/*
    504	 * This mount option is just for testing, and it's not worthwhile to
    505	 * implement the extra complexity (e.g. RCU protection) that would be
    506	 * needed to allow it to be set or changed during remount.  We do allow
    507	 * it to be specified during remount, but only if there is no change.
    508	 */
    509	if (is_remount && !F2FS_OPTION(sbi).dummy_enc_policy.policy) {
    510		f2fs_warn(sbi, "Can't set test_dummy_encryption on remount");
    511		return -EINVAL;
    512	}
    513	err = fscrypt_set_test_dummy_encryption(
    514		sb, arg->from, &F2FS_OPTION(sbi).dummy_enc_policy);
    515	if (err) {
    516		if (err == -EEXIST)
    517			f2fs_warn(sbi,
    518				  "Can't change test_dummy_encryption on remount");
    519		else if (err == -EINVAL)
    520			f2fs_warn(sbi, "Value of option \"%s\" is unrecognized",
    521				  opt);
    522		else
    523			f2fs_warn(sbi, "Error processing option \"%s\" [%d]",
    524				  opt, err);
    525		return -EINVAL;
    526	}
    527	f2fs_warn(sbi, "Test dummy encryption mode enabled");
    528	return 0;
    529#else
    530	f2fs_warn(sbi, "test_dummy_encryption option not supported");
    531	return -EINVAL;
    532#endif
    533}
    534
    535#ifdef CONFIG_F2FS_FS_COMPRESSION
    536/*
    537 * 1. The same extension name cannot not appear in both compress and non-compress extension
    538 * at the same time.
    539 * 2. If the compress extension specifies all files, the types specified by the non-compress
    540 * extension will be treated as special cases and will not be compressed.
    541 * 3. Don't allow the non-compress extension specifies all files.
    542 */
    543static int f2fs_test_compress_extension(struct f2fs_sb_info *sbi)
    544{
    545	unsigned char (*ext)[F2FS_EXTENSION_LEN];
    546	unsigned char (*noext)[F2FS_EXTENSION_LEN];
    547	int ext_cnt, noext_cnt, index = 0, no_index = 0;
    548
    549	ext = F2FS_OPTION(sbi).extensions;
    550	ext_cnt = F2FS_OPTION(sbi).compress_ext_cnt;
    551	noext = F2FS_OPTION(sbi).noextensions;
    552	noext_cnt = F2FS_OPTION(sbi).nocompress_ext_cnt;
    553
    554	if (!noext_cnt)
    555		return 0;
    556
    557	for (no_index = 0; no_index < noext_cnt; no_index++) {
    558		if (!strcasecmp("*", noext[no_index])) {
    559			f2fs_info(sbi, "Don't allow the nocompress extension specifies all files");
    560			return -EINVAL;
    561		}
    562		for (index = 0; index < ext_cnt; index++) {
    563			if (!strcasecmp(ext[index], noext[no_index])) {
    564				f2fs_info(sbi, "Don't allow the same extension %s appear in both compress and nocompress extension",
    565						ext[index]);
    566				return -EINVAL;
    567			}
    568		}
    569	}
    570	return 0;
    571}
    572
    573#ifdef CONFIG_F2FS_FS_LZ4
    574static int f2fs_set_lz4hc_level(struct f2fs_sb_info *sbi, const char *str)
    575{
    576#ifdef CONFIG_F2FS_FS_LZ4HC
    577	unsigned int level;
    578#endif
    579
    580	if (strlen(str) == 3) {
    581		F2FS_OPTION(sbi).compress_level = 0;
    582		return 0;
    583	}
    584
    585#ifdef CONFIG_F2FS_FS_LZ4HC
    586	str += 3;
    587
    588	if (str[0] != ':') {
    589		f2fs_info(sbi, "wrong format, e.g. <alg_name>:<compr_level>");
    590		return -EINVAL;
    591	}
    592	if (kstrtouint(str + 1, 10, &level))
    593		return -EINVAL;
    594
    595	if (level < LZ4HC_MIN_CLEVEL || level > LZ4HC_MAX_CLEVEL) {
    596		f2fs_info(sbi, "invalid lz4hc compress level: %d", level);
    597		return -EINVAL;
    598	}
    599
    600	F2FS_OPTION(sbi).compress_level = level;
    601	return 0;
    602#else
    603	f2fs_info(sbi, "kernel doesn't support lz4hc compression");
    604	return -EINVAL;
    605#endif
    606}
    607#endif
    608
    609#ifdef CONFIG_F2FS_FS_ZSTD
    610static int f2fs_set_zstd_level(struct f2fs_sb_info *sbi, const char *str)
    611{
    612	unsigned int level;
    613	int len = 4;
    614
    615	if (strlen(str) == len) {
    616		F2FS_OPTION(sbi).compress_level = 0;
    617		return 0;
    618	}
    619
    620	str += len;
    621
    622	if (str[0] != ':') {
    623		f2fs_info(sbi, "wrong format, e.g. <alg_name>:<compr_level>");
    624		return -EINVAL;
    625	}
    626	if (kstrtouint(str + 1, 10, &level))
    627		return -EINVAL;
    628
    629	if (!level || level > zstd_max_clevel()) {
    630		f2fs_info(sbi, "invalid zstd compress level: %d", level);
    631		return -EINVAL;
    632	}
    633
    634	F2FS_OPTION(sbi).compress_level = level;
    635	return 0;
    636}
    637#endif
    638#endif
    639
    640static int parse_options(struct super_block *sb, char *options, bool is_remount)
    641{
    642	struct f2fs_sb_info *sbi = F2FS_SB(sb);
    643	substring_t args[MAX_OPT_ARGS];
    644#ifdef CONFIG_F2FS_FS_COMPRESSION
    645	unsigned char (*ext)[F2FS_EXTENSION_LEN];
    646	unsigned char (*noext)[F2FS_EXTENSION_LEN];
    647	int ext_cnt, noext_cnt;
    648#endif
    649	char *p, *name;
    650	int arg = 0;
    651	kuid_t uid;
    652	kgid_t gid;
    653	int ret;
    654
    655	if (!options)
    656		goto default_check;
    657
    658	while ((p = strsep(&options, ",")) != NULL) {
    659		int token;
    660
    661		if (!*p)
    662			continue;
    663		/*
    664		 * Initialize args struct so we know whether arg was
    665		 * found; some options take optional arguments.
    666		 */
    667		args[0].to = args[0].from = NULL;
    668		token = match_token(p, f2fs_tokens, args);
    669
    670		switch (token) {
    671		case Opt_gc_background:
    672			name = match_strdup(&args[0]);
    673
    674			if (!name)
    675				return -ENOMEM;
    676			if (!strcmp(name, "on")) {
    677				F2FS_OPTION(sbi).bggc_mode = BGGC_MODE_ON;
    678			} else if (!strcmp(name, "off")) {
    679				F2FS_OPTION(sbi).bggc_mode = BGGC_MODE_OFF;
    680			} else if (!strcmp(name, "sync")) {
    681				F2FS_OPTION(sbi).bggc_mode = BGGC_MODE_SYNC;
    682			} else {
    683				kfree(name);
    684				return -EINVAL;
    685			}
    686			kfree(name);
    687			break;
    688		case Opt_disable_roll_forward:
    689			set_opt(sbi, DISABLE_ROLL_FORWARD);
    690			break;
    691		case Opt_norecovery:
    692			/* this option mounts f2fs with ro */
    693			set_opt(sbi, NORECOVERY);
    694			if (!f2fs_readonly(sb))
    695				return -EINVAL;
    696			break;
    697		case Opt_discard:
    698			if (!f2fs_hw_support_discard(sbi)) {
    699				f2fs_warn(sbi, "device does not support discard");
    700				break;
    701			}
    702			set_opt(sbi, DISCARD);
    703			break;
    704		case Opt_nodiscard:
    705			if (f2fs_hw_should_discard(sbi)) {
    706				f2fs_warn(sbi, "discard is required for zoned block devices");
    707				return -EINVAL;
    708			}
    709			clear_opt(sbi, DISCARD);
    710			break;
    711		case Opt_noheap:
    712			set_opt(sbi, NOHEAP);
    713			break;
    714		case Opt_heap:
    715			clear_opt(sbi, NOHEAP);
    716			break;
    717#ifdef CONFIG_F2FS_FS_XATTR
    718		case Opt_user_xattr:
    719			set_opt(sbi, XATTR_USER);
    720			break;
    721		case Opt_nouser_xattr:
    722			clear_opt(sbi, XATTR_USER);
    723			break;
    724		case Opt_inline_xattr:
    725			set_opt(sbi, INLINE_XATTR);
    726			break;
    727		case Opt_noinline_xattr:
    728			clear_opt(sbi, INLINE_XATTR);
    729			break;
    730		case Opt_inline_xattr_size:
    731			if (args->from && match_int(args, &arg))
    732				return -EINVAL;
    733			set_opt(sbi, INLINE_XATTR_SIZE);
    734			F2FS_OPTION(sbi).inline_xattr_size = arg;
    735			break;
    736#else
    737		case Opt_user_xattr:
    738			f2fs_info(sbi, "user_xattr options not supported");
    739			break;
    740		case Opt_nouser_xattr:
    741			f2fs_info(sbi, "nouser_xattr options not supported");
    742			break;
    743		case Opt_inline_xattr:
    744			f2fs_info(sbi, "inline_xattr options not supported");
    745			break;
    746		case Opt_noinline_xattr:
    747			f2fs_info(sbi, "noinline_xattr options not supported");
    748			break;
    749#endif
    750#ifdef CONFIG_F2FS_FS_POSIX_ACL
    751		case Opt_acl:
    752			set_opt(sbi, POSIX_ACL);
    753			break;
    754		case Opt_noacl:
    755			clear_opt(sbi, POSIX_ACL);
    756			break;
    757#else
    758		case Opt_acl:
    759			f2fs_info(sbi, "acl options not supported");
    760			break;
    761		case Opt_noacl:
    762			f2fs_info(sbi, "noacl options not supported");
    763			break;
    764#endif
    765		case Opt_active_logs:
    766			if (args->from && match_int(args, &arg))
    767				return -EINVAL;
    768			if (arg != 2 && arg != 4 &&
    769				arg != NR_CURSEG_PERSIST_TYPE)
    770				return -EINVAL;
    771			F2FS_OPTION(sbi).active_logs = arg;
    772			break;
    773		case Opt_disable_ext_identify:
    774			set_opt(sbi, DISABLE_EXT_IDENTIFY);
    775			break;
    776		case Opt_inline_data:
    777			set_opt(sbi, INLINE_DATA);
    778			break;
    779		case Opt_inline_dentry:
    780			set_opt(sbi, INLINE_DENTRY);
    781			break;
    782		case Opt_noinline_dentry:
    783			clear_opt(sbi, INLINE_DENTRY);
    784			break;
    785		case Opt_flush_merge:
    786			set_opt(sbi, FLUSH_MERGE);
    787			break;
    788		case Opt_noflush_merge:
    789			clear_opt(sbi, FLUSH_MERGE);
    790			break;
    791		case Opt_nobarrier:
    792			set_opt(sbi, NOBARRIER);
    793			break;
    794		case Opt_fastboot:
    795			set_opt(sbi, FASTBOOT);
    796			break;
    797		case Opt_extent_cache:
    798			set_opt(sbi, EXTENT_CACHE);
    799			break;
    800		case Opt_noextent_cache:
    801			clear_opt(sbi, EXTENT_CACHE);
    802			break;
    803		case Opt_noinline_data:
    804			clear_opt(sbi, INLINE_DATA);
    805			break;
    806		case Opt_data_flush:
    807			set_opt(sbi, DATA_FLUSH);
    808			break;
    809		case Opt_reserve_root:
    810			if (args->from && match_int(args, &arg))
    811				return -EINVAL;
    812			if (test_opt(sbi, RESERVE_ROOT)) {
    813				f2fs_info(sbi, "Preserve previous reserve_root=%u",
    814					  F2FS_OPTION(sbi).root_reserved_blocks);
    815			} else {
    816				F2FS_OPTION(sbi).root_reserved_blocks = arg;
    817				set_opt(sbi, RESERVE_ROOT);
    818			}
    819			break;
    820		case Opt_resuid:
    821			if (args->from && match_int(args, &arg))
    822				return -EINVAL;
    823			uid = make_kuid(current_user_ns(), arg);
    824			if (!uid_valid(uid)) {
    825				f2fs_err(sbi, "Invalid uid value %d", arg);
    826				return -EINVAL;
    827			}
    828			F2FS_OPTION(sbi).s_resuid = uid;
    829			break;
    830		case Opt_resgid:
    831			if (args->from && match_int(args, &arg))
    832				return -EINVAL;
    833			gid = make_kgid(current_user_ns(), arg);
    834			if (!gid_valid(gid)) {
    835				f2fs_err(sbi, "Invalid gid value %d", arg);
    836				return -EINVAL;
    837			}
    838			F2FS_OPTION(sbi).s_resgid = gid;
    839			break;
    840		case Opt_mode:
    841			name = match_strdup(&args[0]);
    842
    843			if (!name)
    844				return -ENOMEM;
    845			if (!strcmp(name, "adaptive")) {
    846				if (f2fs_sb_has_blkzoned(sbi)) {
    847					f2fs_warn(sbi, "adaptive mode is not allowed with zoned block device feature");
    848					kfree(name);
    849					return -EINVAL;
    850				}
    851				F2FS_OPTION(sbi).fs_mode = FS_MODE_ADAPTIVE;
    852			} else if (!strcmp(name, "lfs")) {
    853				F2FS_OPTION(sbi).fs_mode = FS_MODE_LFS;
    854			} else if (!strcmp(name, "fragment:segment")) {
    855				F2FS_OPTION(sbi).fs_mode = FS_MODE_FRAGMENT_SEG;
    856			} else if (!strcmp(name, "fragment:block")) {
    857				F2FS_OPTION(sbi).fs_mode = FS_MODE_FRAGMENT_BLK;
    858			} else {
    859				kfree(name);
    860				return -EINVAL;
    861			}
    862			kfree(name);
    863			break;
    864		case Opt_io_size_bits:
    865			if (args->from && match_int(args, &arg))
    866				return -EINVAL;
    867			if (arg <= 0 || arg > __ilog2_u32(BIO_MAX_VECS)) {
    868				f2fs_warn(sbi, "Not support %d, larger than %d",
    869					  1 << arg, BIO_MAX_VECS);
    870				return -EINVAL;
    871			}
    872			F2FS_OPTION(sbi).write_io_size_bits = arg;
    873			break;
    874#ifdef CONFIG_F2FS_FAULT_INJECTION
    875		case Opt_fault_injection:
    876			if (args->from && match_int(args, &arg))
    877				return -EINVAL;
    878			f2fs_build_fault_attr(sbi, arg, F2FS_ALL_FAULT_TYPE);
    879			set_opt(sbi, FAULT_INJECTION);
    880			break;
    881
    882		case Opt_fault_type:
    883			if (args->from && match_int(args, &arg))
    884				return -EINVAL;
    885			f2fs_build_fault_attr(sbi, 0, arg);
    886			set_opt(sbi, FAULT_INJECTION);
    887			break;
    888#else
    889		case Opt_fault_injection:
    890			f2fs_info(sbi, "fault_injection options not supported");
    891			break;
    892
    893		case Opt_fault_type:
    894			f2fs_info(sbi, "fault_type options not supported");
    895			break;
    896#endif
    897		case Opt_lazytime:
    898			sb->s_flags |= SB_LAZYTIME;
    899			break;
    900		case Opt_nolazytime:
    901			sb->s_flags &= ~SB_LAZYTIME;
    902			break;
    903#ifdef CONFIG_QUOTA
    904		case Opt_quota:
    905		case Opt_usrquota:
    906			set_opt(sbi, USRQUOTA);
    907			break;
    908		case Opt_grpquota:
    909			set_opt(sbi, GRPQUOTA);
    910			break;
    911		case Opt_prjquota:
    912			set_opt(sbi, PRJQUOTA);
    913			break;
    914		case Opt_usrjquota:
    915			ret = f2fs_set_qf_name(sb, USRQUOTA, &args[0]);
    916			if (ret)
    917				return ret;
    918			break;
    919		case Opt_grpjquota:
    920			ret = f2fs_set_qf_name(sb, GRPQUOTA, &args[0]);
    921			if (ret)
    922				return ret;
    923			break;
    924		case Opt_prjjquota:
    925			ret = f2fs_set_qf_name(sb, PRJQUOTA, &args[0]);
    926			if (ret)
    927				return ret;
    928			break;
    929		case Opt_offusrjquota:
    930			ret = f2fs_clear_qf_name(sb, USRQUOTA);
    931			if (ret)
    932				return ret;
    933			break;
    934		case Opt_offgrpjquota:
    935			ret = f2fs_clear_qf_name(sb, GRPQUOTA);
    936			if (ret)
    937				return ret;
    938			break;
    939		case Opt_offprjjquota:
    940			ret = f2fs_clear_qf_name(sb, PRJQUOTA);
    941			if (ret)
    942				return ret;
    943			break;
    944		case Opt_jqfmt_vfsold:
    945			F2FS_OPTION(sbi).s_jquota_fmt = QFMT_VFS_OLD;
    946			break;
    947		case Opt_jqfmt_vfsv0:
    948			F2FS_OPTION(sbi).s_jquota_fmt = QFMT_VFS_V0;
    949			break;
    950		case Opt_jqfmt_vfsv1:
    951			F2FS_OPTION(sbi).s_jquota_fmt = QFMT_VFS_V1;
    952			break;
    953		case Opt_noquota:
    954			clear_opt(sbi, QUOTA);
    955			clear_opt(sbi, USRQUOTA);
    956			clear_opt(sbi, GRPQUOTA);
    957			clear_opt(sbi, PRJQUOTA);
    958			break;
    959#else
    960		case Opt_quota:
    961		case Opt_usrquota:
    962		case Opt_grpquota:
    963		case Opt_prjquota:
    964		case Opt_usrjquota:
    965		case Opt_grpjquota:
    966		case Opt_prjjquota:
    967		case Opt_offusrjquota:
    968		case Opt_offgrpjquota:
    969		case Opt_offprjjquota:
    970		case Opt_jqfmt_vfsold:
    971		case Opt_jqfmt_vfsv0:
    972		case Opt_jqfmt_vfsv1:
    973		case Opt_noquota:
    974			f2fs_info(sbi, "quota operations not supported");
    975			break;
    976#endif
    977		case Opt_alloc:
    978			name = match_strdup(&args[0]);
    979			if (!name)
    980				return -ENOMEM;
    981
    982			if (!strcmp(name, "default")) {
    983				F2FS_OPTION(sbi).alloc_mode = ALLOC_MODE_DEFAULT;
    984			} else if (!strcmp(name, "reuse")) {
    985				F2FS_OPTION(sbi).alloc_mode = ALLOC_MODE_REUSE;
    986			} else {
    987				kfree(name);
    988				return -EINVAL;
    989			}
    990			kfree(name);
    991			break;
    992		case Opt_fsync:
    993			name = match_strdup(&args[0]);
    994			if (!name)
    995				return -ENOMEM;
    996			if (!strcmp(name, "posix")) {
    997				F2FS_OPTION(sbi).fsync_mode = FSYNC_MODE_POSIX;
    998			} else if (!strcmp(name, "strict")) {
    999				F2FS_OPTION(sbi).fsync_mode = FSYNC_MODE_STRICT;
   1000			} else if (!strcmp(name, "nobarrier")) {
   1001				F2FS_OPTION(sbi).fsync_mode =
   1002							FSYNC_MODE_NOBARRIER;
   1003			} else {
   1004				kfree(name);
   1005				return -EINVAL;
   1006			}
   1007			kfree(name);
   1008			break;
   1009		case Opt_test_dummy_encryption:
   1010			ret = f2fs_set_test_dummy_encryption(sb, p, &args[0],
   1011							     is_remount);
   1012			if (ret)
   1013				return ret;
   1014			break;
   1015		case Opt_inlinecrypt:
   1016#ifdef CONFIG_FS_ENCRYPTION_INLINE_CRYPT
   1017			sb->s_flags |= SB_INLINECRYPT;
   1018#else
   1019			f2fs_info(sbi, "inline encryption not supported");
   1020#endif
   1021			break;
   1022		case Opt_checkpoint_disable_cap_perc:
   1023			if (args->from && match_int(args, &arg))
   1024				return -EINVAL;
   1025			if (arg < 0 || arg > 100)
   1026				return -EINVAL;
   1027			F2FS_OPTION(sbi).unusable_cap_perc = arg;
   1028			set_opt(sbi, DISABLE_CHECKPOINT);
   1029			break;
   1030		case Opt_checkpoint_disable_cap:
   1031			if (args->from && match_int(args, &arg))
   1032				return -EINVAL;
   1033			F2FS_OPTION(sbi).unusable_cap = arg;
   1034			set_opt(sbi, DISABLE_CHECKPOINT);
   1035			break;
   1036		case Opt_checkpoint_disable:
   1037			set_opt(sbi, DISABLE_CHECKPOINT);
   1038			break;
   1039		case Opt_checkpoint_enable:
   1040			clear_opt(sbi, DISABLE_CHECKPOINT);
   1041			break;
   1042		case Opt_checkpoint_merge:
   1043			set_opt(sbi, MERGE_CHECKPOINT);
   1044			break;
   1045		case Opt_nocheckpoint_merge:
   1046			clear_opt(sbi, MERGE_CHECKPOINT);
   1047			break;
   1048#ifdef CONFIG_F2FS_FS_COMPRESSION
   1049		case Opt_compress_algorithm:
   1050			if (!f2fs_sb_has_compression(sbi)) {
   1051				f2fs_info(sbi, "Image doesn't support compression");
   1052				break;
   1053			}
   1054			name = match_strdup(&args[0]);
   1055			if (!name)
   1056				return -ENOMEM;
   1057			if (!strcmp(name, "lzo")) {
   1058#ifdef CONFIG_F2FS_FS_LZO
   1059				F2FS_OPTION(sbi).compress_level = 0;
   1060				F2FS_OPTION(sbi).compress_algorithm =
   1061								COMPRESS_LZO;
   1062#else
   1063				f2fs_info(sbi, "kernel doesn't support lzo compression");
   1064#endif
   1065			} else if (!strncmp(name, "lz4", 3)) {
   1066#ifdef CONFIG_F2FS_FS_LZ4
   1067				ret = f2fs_set_lz4hc_level(sbi, name);
   1068				if (ret) {
   1069					kfree(name);
   1070					return -EINVAL;
   1071				}
   1072				F2FS_OPTION(sbi).compress_algorithm =
   1073								COMPRESS_LZ4;
   1074#else
   1075				f2fs_info(sbi, "kernel doesn't support lz4 compression");
   1076#endif
   1077			} else if (!strncmp(name, "zstd", 4)) {
   1078#ifdef CONFIG_F2FS_FS_ZSTD
   1079				ret = f2fs_set_zstd_level(sbi, name);
   1080				if (ret) {
   1081					kfree(name);
   1082					return -EINVAL;
   1083				}
   1084				F2FS_OPTION(sbi).compress_algorithm =
   1085								COMPRESS_ZSTD;
   1086#else
   1087				f2fs_info(sbi, "kernel doesn't support zstd compression");
   1088#endif
   1089			} else if (!strcmp(name, "lzo-rle")) {
   1090#ifdef CONFIG_F2FS_FS_LZORLE
   1091				F2FS_OPTION(sbi).compress_level = 0;
   1092				F2FS_OPTION(sbi).compress_algorithm =
   1093								COMPRESS_LZORLE;
   1094#else
   1095				f2fs_info(sbi, "kernel doesn't support lzorle compression");
   1096#endif
   1097			} else {
   1098				kfree(name);
   1099				return -EINVAL;
   1100			}
   1101			kfree(name);
   1102			break;
   1103		case Opt_compress_log_size:
   1104			if (!f2fs_sb_has_compression(sbi)) {
   1105				f2fs_info(sbi, "Image doesn't support compression");
   1106				break;
   1107			}
   1108			if (args->from && match_int(args, &arg))
   1109				return -EINVAL;
   1110			if (arg < MIN_COMPRESS_LOG_SIZE ||
   1111				arg > MAX_COMPRESS_LOG_SIZE) {
   1112				f2fs_err(sbi,
   1113					"Compress cluster log size is out of range");
   1114				return -EINVAL;
   1115			}
   1116			F2FS_OPTION(sbi).compress_log_size = arg;
   1117			break;
   1118		case Opt_compress_extension:
   1119			if (!f2fs_sb_has_compression(sbi)) {
   1120				f2fs_info(sbi, "Image doesn't support compression");
   1121				break;
   1122			}
   1123			name = match_strdup(&args[0]);
   1124			if (!name)
   1125				return -ENOMEM;
   1126
   1127			ext = F2FS_OPTION(sbi).extensions;
   1128			ext_cnt = F2FS_OPTION(sbi).compress_ext_cnt;
   1129
   1130			if (strlen(name) >= F2FS_EXTENSION_LEN ||
   1131				ext_cnt >= COMPRESS_EXT_NUM) {
   1132				f2fs_err(sbi,
   1133					"invalid extension length/number");
   1134				kfree(name);
   1135				return -EINVAL;
   1136			}
   1137
   1138			strcpy(ext[ext_cnt], name);
   1139			F2FS_OPTION(sbi).compress_ext_cnt++;
   1140			kfree(name);
   1141			break;
   1142		case Opt_nocompress_extension:
   1143			if (!f2fs_sb_has_compression(sbi)) {
   1144				f2fs_info(sbi, "Image doesn't support compression");
   1145				break;
   1146			}
   1147			name = match_strdup(&args[0]);
   1148			if (!name)
   1149				return -ENOMEM;
   1150
   1151			noext = F2FS_OPTION(sbi).noextensions;
   1152			noext_cnt = F2FS_OPTION(sbi).nocompress_ext_cnt;
   1153
   1154			if (strlen(name) >= F2FS_EXTENSION_LEN ||
   1155				noext_cnt >= COMPRESS_EXT_NUM) {
   1156				f2fs_err(sbi,
   1157					"invalid extension length/number");
   1158				kfree(name);
   1159				return -EINVAL;
   1160			}
   1161
   1162			strcpy(noext[noext_cnt], name);
   1163			F2FS_OPTION(sbi).nocompress_ext_cnt++;
   1164			kfree(name);
   1165			break;
   1166		case Opt_compress_chksum:
   1167			F2FS_OPTION(sbi).compress_chksum = true;
   1168			break;
   1169		case Opt_compress_mode:
   1170			name = match_strdup(&args[0]);
   1171			if (!name)
   1172				return -ENOMEM;
   1173			if (!strcmp(name, "fs")) {
   1174				F2FS_OPTION(sbi).compress_mode = COMPR_MODE_FS;
   1175			} else if (!strcmp(name, "user")) {
   1176				F2FS_OPTION(sbi).compress_mode = COMPR_MODE_USER;
   1177			} else {
   1178				kfree(name);
   1179				return -EINVAL;
   1180			}
   1181			kfree(name);
   1182			break;
   1183		case Opt_compress_cache:
   1184			set_opt(sbi, COMPRESS_CACHE);
   1185			break;
   1186#else
   1187		case Opt_compress_algorithm:
   1188		case Opt_compress_log_size:
   1189		case Opt_compress_extension:
   1190		case Opt_nocompress_extension:
   1191		case Opt_compress_chksum:
   1192		case Opt_compress_mode:
   1193		case Opt_compress_cache:
   1194			f2fs_info(sbi, "compression options not supported");
   1195			break;
   1196#endif
   1197		case Opt_atgc:
   1198			set_opt(sbi, ATGC);
   1199			break;
   1200		case Opt_gc_merge:
   1201			set_opt(sbi, GC_MERGE);
   1202			break;
   1203		case Opt_nogc_merge:
   1204			clear_opt(sbi, GC_MERGE);
   1205			break;
   1206		case Opt_discard_unit:
   1207			name = match_strdup(&args[0]);
   1208			if (!name)
   1209				return -ENOMEM;
   1210			if (!strcmp(name, "block")) {
   1211				F2FS_OPTION(sbi).discard_unit =
   1212						DISCARD_UNIT_BLOCK;
   1213			} else if (!strcmp(name, "segment")) {
   1214				F2FS_OPTION(sbi).discard_unit =
   1215						DISCARD_UNIT_SEGMENT;
   1216			} else if (!strcmp(name, "section")) {
   1217				F2FS_OPTION(sbi).discard_unit =
   1218						DISCARD_UNIT_SECTION;
   1219			} else {
   1220				kfree(name);
   1221				return -EINVAL;
   1222			}
   1223			kfree(name);
   1224			break;
   1225		default:
   1226			f2fs_err(sbi, "Unrecognized mount option \"%s\" or missing value",
   1227				 p);
   1228			return -EINVAL;
   1229		}
   1230	}
   1231default_check:
   1232#ifdef CONFIG_QUOTA
   1233	if (f2fs_check_quota_options(sbi))
   1234		return -EINVAL;
   1235#else
   1236	if (f2fs_sb_has_quota_ino(sbi) && !f2fs_readonly(sbi->sb)) {
   1237		f2fs_info(sbi, "Filesystem with quota feature cannot be mounted RDWR without CONFIG_QUOTA");
   1238		return -EINVAL;
   1239	}
   1240	if (f2fs_sb_has_project_quota(sbi) && !f2fs_readonly(sbi->sb)) {
   1241		f2fs_err(sbi, "Filesystem with project quota feature cannot be mounted RDWR without CONFIG_QUOTA");
   1242		return -EINVAL;
   1243	}
   1244#endif
   1245#if !IS_ENABLED(CONFIG_UNICODE)
   1246	if (f2fs_sb_has_casefold(sbi)) {
   1247		f2fs_err(sbi,
   1248			"Filesystem with casefold feature cannot be mounted without CONFIG_UNICODE");
   1249		return -EINVAL;
   1250	}
   1251#endif
   1252	/*
   1253	 * The BLKZONED feature indicates that the drive was formatted with
   1254	 * zone alignment optimization. This is optional for host-aware
   1255	 * devices, but mandatory for host-managed zoned block devices.
   1256	 */
   1257#ifndef CONFIG_BLK_DEV_ZONED
   1258	if (f2fs_sb_has_blkzoned(sbi)) {
   1259		f2fs_err(sbi, "Zoned block device support is not enabled");
   1260		return -EINVAL;
   1261	}
   1262#endif
   1263	if (f2fs_sb_has_blkzoned(sbi)) {
   1264		if (F2FS_OPTION(sbi).discard_unit !=
   1265						DISCARD_UNIT_SECTION) {
   1266			f2fs_info(sbi, "Zoned block device doesn't need small discard, set discard_unit=section by default");
   1267			F2FS_OPTION(sbi).discard_unit =
   1268					DISCARD_UNIT_SECTION;
   1269		}
   1270	}
   1271
   1272#ifdef CONFIG_F2FS_FS_COMPRESSION
   1273	if (f2fs_test_compress_extension(sbi)) {
   1274		f2fs_err(sbi, "invalid compress or nocompress extension");
   1275		return -EINVAL;
   1276	}
   1277#endif
   1278
   1279	if (F2FS_IO_SIZE_BITS(sbi) && !f2fs_lfs_mode(sbi)) {
   1280		f2fs_err(sbi, "Should set mode=lfs with %uKB-sized IO",
   1281			 F2FS_IO_SIZE_KB(sbi));
   1282		return -EINVAL;
   1283	}
   1284
   1285	if (test_opt(sbi, INLINE_XATTR_SIZE)) {
   1286		int min_size, max_size;
   1287
   1288		if (!f2fs_sb_has_extra_attr(sbi) ||
   1289			!f2fs_sb_has_flexible_inline_xattr(sbi)) {
   1290			f2fs_err(sbi, "extra_attr or flexible_inline_xattr feature is off");
   1291			return -EINVAL;
   1292		}
   1293		if (!test_opt(sbi, INLINE_XATTR)) {
   1294			f2fs_err(sbi, "inline_xattr_size option should be set with inline_xattr option");
   1295			return -EINVAL;
   1296		}
   1297
   1298		min_size = sizeof(struct f2fs_xattr_header) / sizeof(__le32);
   1299		max_size = MAX_INLINE_XATTR_SIZE;
   1300
   1301		if (F2FS_OPTION(sbi).inline_xattr_size < min_size ||
   1302				F2FS_OPTION(sbi).inline_xattr_size > max_size) {
   1303			f2fs_err(sbi, "inline xattr size is out of range: %d ~ %d",
   1304				 min_size, max_size);
   1305			return -EINVAL;
   1306		}
   1307	}
   1308
   1309	if (test_opt(sbi, DISABLE_CHECKPOINT) && f2fs_lfs_mode(sbi)) {
   1310		f2fs_err(sbi, "LFS not compatible with checkpoint=disable");
   1311		return -EINVAL;
   1312	}
   1313
   1314	if (f2fs_sb_has_readonly(sbi) && !f2fs_readonly(sbi->sb)) {
   1315		f2fs_err(sbi, "Allow to mount readonly mode only");
   1316		return -EROFS;
   1317	}
   1318	return 0;
   1319}
   1320
   1321static struct inode *f2fs_alloc_inode(struct super_block *sb)
   1322{
   1323	struct f2fs_inode_info *fi;
   1324
   1325	if (time_to_inject(F2FS_SB(sb), FAULT_SLAB_ALLOC)) {
   1326		f2fs_show_injection_info(F2FS_SB(sb), FAULT_SLAB_ALLOC);
   1327		return NULL;
   1328	}
   1329
   1330	fi = alloc_inode_sb(sb, f2fs_inode_cachep, GFP_F2FS_ZERO);
   1331	if (!fi)
   1332		return NULL;
   1333
   1334	init_once((void *) fi);
   1335
   1336	/* Initialize f2fs-specific inode info */
   1337	atomic_set(&fi->dirty_pages, 0);
   1338	atomic_set(&fi->i_compr_blocks, 0);
   1339	init_f2fs_rwsem(&fi->i_sem);
   1340	spin_lock_init(&fi->i_size_lock);
   1341	INIT_LIST_HEAD(&fi->dirty_list);
   1342	INIT_LIST_HEAD(&fi->gdirty_list);
   1343	init_f2fs_rwsem(&fi->i_gc_rwsem[READ]);
   1344	init_f2fs_rwsem(&fi->i_gc_rwsem[WRITE]);
   1345	init_f2fs_rwsem(&fi->i_xattr_sem);
   1346
   1347	/* Will be used by directory only */
   1348	fi->i_dir_level = F2FS_SB(sb)->dir_level;
   1349
   1350	return &fi->vfs_inode;
   1351}
   1352
   1353static int f2fs_drop_inode(struct inode *inode)
   1354{
   1355	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
   1356	int ret;
   1357
   1358	/*
   1359	 * during filesystem shutdown, if checkpoint is disabled,
   1360	 * drop useless meta/node dirty pages.
   1361	 */
   1362	if (unlikely(is_sbi_flag_set(sbi, SBI_CP_DISABLED))) {
   1363		if (inode->i_ino == F2FS_NODE_INO(sbi) ||
   1364			inode->i_ino == F2FS_META_INO(sbi)) {
   1365			trace_f2fs_drop_inode(inode, 1);
   1366			return 1;
   1367		}
   1368	}
   1369
   1370	/*
   1371	 * This is to avoid a deadlock condition like below.
   1372	 * writeback_single_inode(inode)
   1373	 *  - f2fs_write_data_page
   1374	 *    - f2fs_gc -> iput -> evict
   1375	 *       - inode_wait_for_writeback(inode)
   1376	 */
   1377	if ((!inode_unhashed(inode) && inode->i_state & I_SYNC)) {
   1378		if (!inode->i_nlink && !is_bad_inode(inode)) {
   1379			/* to avoid evict_inode call simultaneously */
   1380			atomic_inc(&inode->i_count);
   1381			spin_unlock(&inode->i_lock);
   1382
   1383			if (f2fs_is_atomic_file(inode))
   1384				f2fs_abort_atomic_write(inode, true);
   1385
   1386			/* should remain fi->extent_tree for writepage */
   1387			f2fs_destroy_extent_node(inode);
   1388
   1389			sb_start_intwrite(inode->i_sb);
   1390			f2fs_i_size_write(inode, 0);
   1391
   1392			f2fs_submit_merged_write_cond(F2FS_I_SB(inode),
   1393					inode, NULL, 0, DATA);
   1394			truncate_inode_pages_final(inode->i_mapping);
   1395
   1396			if (F2FS_HAS_BLOCKS(inode))
   1397				f2fs_truncate(inode);
   1398
   1399			sb_end_intwrite(inode->i_sb);
   1400
   1401			spin_lock(&inode->i_lock);
   1402			atomic_dec(&inode->i_count);
   1403		}
   1404		trace_f2fs_drop_inode(inode, 0);
   1405		return 0;
   1406	}
   1407	ret = generic_drop_inode(inode);
   1408	if (!ret)
   1409		ret = fscrypt_drop_inode(inode);
   1410	trace_f2fs_drop_inode(inode, ret);
   1411	return ret;
   1412}
   1413
   1414int f2fs_inode_dirtied(struct inode *inode, bool sync)
   1415{
   1416	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
   1417	int ret = 0;
   1418
   1419	spin_lock(&sbi->inode_lock[DIRTY_META]);
   1420	if (is_inode_flag_set(inode, FI_DIRTY_INODE)) {
   1421		ret = 1;
   1422	} else {
   1423		set_inode_flag(inode, FI_DIRTY_INODE);
   1424		stat_inc_dirty_inode(sbi, DIRTY_META);
   1425	}
   1426	if (sync && list_empty(&F2FS_I(inode)->gdirty_list)) {
   1427		list_add_tail(&F2FS_I(inode)->gdirty_list,
   1428				&sbi->inode_list[DIRTY_META]);
   1429		inc_page_count(sbi, F2FS_DIRTY_IMETA);
   1430	}
   1431	spin_unlock(&sbi->inode_lock[DIRTY_META]);
   1432	return ret;
   1433}
   1434
   1435void f2fs_inode_synced(struct inode *inode)
   1436{
   1437	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
   1438
   1439	spin_lock(&sbi->inode_lock[DIRTY_META]);
   1440	if (!is_inode_flag_set(inode, FI_DIRTY_INODE)) {
   1441		spin_unlock(&sbi->inode_lock[DIRTY_META]);
   1442		return;
   1443	}
   1444	if (!list_empty(&F2FS_I(inode)->gdirty_list)) {
   1445		list_del_init(&F2FS_I(inode)->gdirty_list);
   1446		dec_page_count(sbi, F2FS_DIRTY_IMETA);
   1447	}
   1448	clear_inode_flag(inode, FI_DIRTY_INODE);
   1449	clear_inode_flag(inode, FI_AUTO_RECOVER);
   1450	stat_dec_dirty_inode(F2FS_I_SB(inode), DIRTY_META);
   1451	spin_unlock(&sbi->inode_lock[DIRTY_META]);
   1452}
   1453
   1454/*
   1455 * f2fs_dirty_inode() is called from __mark_inode_dirty()
   1456 *
   1457 * We should call set_dirty_inode to write the dirty inode through write_inode.
   1458 */
   1459static void f2fs_dirty_inode(struct inode *inode, int flags)
   1460{
   1461	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
   1462
   1463	if (inode->i_ino == F2FS_NODE_INO(sbi) ||
   1464			inode->i_ino == F2FS_META_INO(sbi))
   1465		return;
   1466
   1467	if (is_inode_flag_set(inode, FI_AUTO_RECOVER))
   1468		clear_inode_flag(inode, FI_AUTO_RECOVER);
   1469
   1470	f2fs_inode_dirtied(inode, false);
   1471}
   1472
   1473static void f2fs_free_inode(struct inode *inode)
   1474{
   1475	fscrypt_free_inode(inode);
   1476	kmem_cache_free(f2fs_inode_cachep, F2FS_I(inode));
   1477}
   1478
   1479static void destroy_percpu_info(struct f2fs_sb_info *sbi)
   1480{
   1481	percpu_counter_destroy(&sbi->total_valid_inode_count);
   1482	percpu_counter_destroy(&sbi->rf_node_block_count);
   1483	percpu_counter_destroy(&sbi->alloc_valid_block_count);
   1484}
   1485
   1486static void destroy_device_list(struct f2fs_sb_info *sbi)
   1487{
   1488	int i;
   1489
   1490	for (i = 0; i < sbi->s_ndevs; i++) {
   1491		blkdev_put(FDEV(i).bdev, FMODE_EXCL);
   1492#ifdef CONFIG_BLK_DEV_ZONED
   1493		kvfree(FDEV(i).blkz_seq);
   1494		kfree(FDEV(i).zone_capacity_blocks);
   1495#endif
   1496	}
   1497	kvfree(sbi->devs);
   1498}
   1499
   1500static void f2fs_put_super(struct super_block *sb)
   1501{
   1502	struct f2fs_sb_info *sbi = F2FS_SB(sb);
   1503	int i;
   1504	bool dropped;
   1505
   1506	/* unregister procfs/sysfs entries in advance to avoid race case */
   1507	f2fs_unregister_sysfs(sbi);
   1508
   1509	f2fs_quota_off_umount(sb);
   1510
   1511	/* prevent remaining shrinker jobs */
   1512	mutex_lock(&sbi->umount_mutex);
   1513
   1514	/*
   1515	 * flush all issued checkpoints and stop checkpoint issue thread.
   1516	 * after then, all checkpoints should be done by each process context.
   1517	 */
   1518	f2fs_stop_ckpt_thread(sbi);
   1519
   1520	/*
   1521	 * We don't need to do checkpoint when superblock is clean.
   1522	 * But, the previous checkpoint was not done by umount, it needs to do
   1523	 * clean checkpoint again.
   1524	 */
   1525	if ((is_sbi_flag_set(sbi, SBI_IS_DIRTY) ||
   1526			!is_set_ckpt_flags(sbi, CP_UMOUNT_FLAG))) {
   1527		struct cp_control cpc = {
   1528			.reason = CP_UMOUNT,
   1529		};
   1530		f2fs_write_checkpoint(sbi, &cpc);
   1531	}
   1532
   1533	/* be sure to wait for any on-going discard commands */
   1534	dropped = f2fs_issue_discard_timeout(sbi);
   1535
   1536	if ((f2fs_hw_support_discard(sbi) || f2fs_hw_should_discard(sbi)) &&
   1537					!sbi->discard_blks && !dropped) {
   1538		struct cp_control cpc = {
   1539			.reason = CP_UMOUNT | CP_TRIMMED,
   1540		};
   1541		f2fs_write_checkpoint(sbi, &cpc);
   1542	}
   1543
   1544	/*
   1545	 * normally superblock is clean, so we need to release this.
   1546	 * In addition, EIO will skip do checkpoint, we need this as well.
   1547	 */
   1548	f2fs_release_ino_entry(sbi, true);
   1549
   1550	f2fs_leave_shrinker(sbi);
   1551	mutex_unlock(&sbi->umount_mutex);
   1552
   1553	/* our cp_error case, we can wait for any writeback page */
   1554	f2fs_flush_merged_writes(sbi);
   1555
   1556	f2fs_wait_on_all_pages(sbi, F2FS_WB_CP_DATA);
   1557
   1558	f2fs_bug_on(sbi, sbi->fsync_node_num);
   1559
   1560	f2fs_destroy_compress_inode(sbi);
   1561
   1562	iput(sbi->node_inode);
   1563	sbi->node_inode = NULL;
   1564
   1565	iput(sbi->meta_inode);
   1566	sbi->meta_inode = NULL;
   1567
   1568	/*
   1569	 * iput() can update stat information, if f2fs_write_checkpoint()
   1570	 * above failed with error.
   1571	 */
   1572	f2fs_destroy_stats(sbi);
   1573
   1574	/* destroy f2fs internal modules */
   1575	f2fs_destroy_node_manager(sbi);
   1576	f2fs_destroy_segment_manager(sbi);
   1577
   1578	f2fs_destroy_post_read_wq(sbi);
   1579
   1580	kvfree(sbi->ckpt);
   1581
   1582	sb->s_fs_info = NULL;
   1583	if (sbi->s_chksum_driver)
   1584		crypto_free_shash(sbi->s_chksum_driver);
   1585	kfree(sbi->raw_super);
   1586
   1587	destroy_device_list(sbi);
   1588	f2fs_destroy_page_array_cache(sbi);
   1589	f2fs_destroy_xattr_caches(sbi);
   1590	mempool_destroy(sbi->write_io_dummy);
   1591#ifdef CONFIG_QUOTA
   1592	for (i = 0; i < MAXQUOTAS; i++)
   1593		kfree(F2FS_OPTION(sbi).s_qf_names[i]);
   1594#endif
   1595	fscrypt_free_dummy_policy(&F2FS_OPTION(sbi).dummy_enc_policy);
   1596	destroy_percpu_info(sbi);
   1597	f2fs_destroy_iostat(sbi);
   1598	for (i = 0; i < NR_PAGE_TYPE; i++)
   1599		kvfree(sbi->write_io[i]);
   1600#if IS_ENABLED(CONFIG_UNICODE)
   1601	utf8_unload(sb->s_encoding);
   1602#endif
   1603	kfree(sbi);
   1604}
   1605
   1606int f2fs_sync_fs(struct super_block *sb, int sync)
   1607{
   1608	struct f2fs_sb_info *sbi = F2FS_SB(sb);
   1609	int err = 0;
   1610
   1611	if (unlikely(f2fs_cp_error(sbi)))
   1612		return 0;
   1613	if (unlikely(is_sbi_flag_set(sbi, SBI_CP_DISABLED)))
   1614		return 0;
   1615
   1616	trace_f2fs_sync_fs(sb, sync);
   1617
   1618	if (unlikely(is_sbi_flag_set(sbi, SBI_POR_DOING)))
   1619		return -EAGAIN;
   1620
   1621	if (sync)
   1622		err = f2fs_issue_checkpoint(sbi);
   1623
   1624	return err;
   1625}
   1626
   1627static int f2fs_freeze(struct super_block *sb)
   1628{
   1629	if (f2fs_readonly(sb))
   1630		return 0;
   1631
   1632	/* IO error happened before */
   1633	if (unlikely(f2fs_cp_error(F2FS_SB(sb))))
   1634		return -EIO;
   1635
   1636	/* must be clean, since sync_filesystem() was already called */
   1637	if (is_sbi_flag_set(F2FS_SB(sb), SBI_IS_DIRTY))
   1638		return -EINVAL;
   1639
   1640	/* ensure no checkpoint required */
   1641	if (!llist_empty(&F2FS_SB(sb)->cprc_info.issue_list))
   1642		return -EINVAL;
   1643
   1644	/* to avoid deadlock on f2fs_evict_inode->SB_FREEZE_FS */
   1645	set_sbi_flag(F2FS_SB(sb), SBI_IS_FREEZING);
   1646	return 0;
   1647}
   1648
   1649static int f2fs_unfreeze(struct super_block *sb)
   1650{
   1651	clear_sbi_flag(F2FS_SB(sb), SBI_IS_FREEZING);
   1652	return 0;
   1653}
   1654
   1655#ifdef CONFIG_QUOTA
   1656static int f2fs_statfs_project(struct super_block *sb,
   1657				kprojid_t projid, struct kstatfs *buf)
   1658{
   1659	struct kqid qid;
   1660	struct dquot *dquot;
   1661	u64 limit;
   1662	u64 curblock;
   1663
   1664	qid = make_kqid_projid(projid);
   1665	dquot = dqget(sb, qid);
   1666	if (IS_ERR(dquot))
   1667		return PTR_ERR(dquot);
   1668	spin_lock(&dquot->dq_dqb_lock);
   1669
   1670	limit = min_not_zero(dquot->dq_dqb.dqb_bsoftlimit,
   1671					dquot->dq_dqb.dqb_bhardlimit);
   1672	if (limit)
   1673		limit >>= sb->s_blocksize_bits;
   1674
   1675	if (limit && buf->f_blocks > limit) {
   1676		curblock = (dquot->dq_dqb.dqb_curspace +
   1677			    dquot->dq_dqb.dqb_rsvspace) >> sb->s_blocksize_bits;
   1678		buf->f_blocks = limit;
   1679		buf->f_bfree = buf->f_bavail =
   1680			(buf->f_blocks > curblock) ?
   1681			 (buf->f_blocks - curblock) : 0;
   1682	}
   1683
   1684	limit = min_not_zero(dquot->dq_dqb.dqb_isoftlimit,
   1685					dquot->dq_dqb.dqb_ihardlimit);
   1686
   1687	if (limit && buf->f_files > limit) {
   1688		buf->f_files = limit;
   1689		buf->f_ffree =
   1690			(buf->f_files > dquot->dq_dqb.dqb_curinodes) ?
   1691			 (buf->f_files - dquot->dq_dqb.dqb_curinodes) : 0;
   1692	}
   1693
   1694	spin_unlock(&dquot->dq_dqb_lock);
   1695	dqput(dquot);
   1696	return 0;
   1697}
   1698#endif
   1699
   1700static int f2fs_statfs(struct dentry *dentry, struct kstatfs *buf)
   1701{
   1702	struct super_block *sb = dentry->d_sb;
   1703	struct f2fs_sb_info *sbi = F2FS_SB(sb);
   1704	u64 id = huge_encode_dev(sb->s_bdev->bd_dev);
   1705	block_t total_count, user_block_count, start_count;
   1706	u64 avail_node_count;
   1707	unsigned int total_valid_node_count;
   1708
   1709	total_count = le64_to_cpu(sbi->raw_super->block_count);
   1710	start_count = le32_to_cpu(sbi->raw_super->segment0_blkaddr);
   1711	buf->f_type = F2FS_SUPER_MAGIC;
   1712	buf->f_bsize = sbi->blocksize;
   1713
   1714	buf->f_blocks = total_count - start_count;
   1715
   1716	spin_lock(&sbi->stat_lock);
   1717
   1718	user_block_count = sbi->user_block_count;
   1719	total_valid_node_count = valid_node_count(sbi);
   1720	avail_node_count = sbi->total_node_count - F2FS_RESERVED_NODE_NUM;
   1721	buf->f_bfree = user_block_count - valid_user_blocks(sbi) -
   1722						sbi->current_reserved_blocks;
   1723
   1724	if (unlikely(buf->f_bfree <= sbi->unusable_block_count))
   1725		buf->f_bfree = 0;
   1726	else
   1727		buf->f_bfree -= sbi->unusable_block_count;
   1728	spin_unlock(&sbi->stat_lock);
   1729
   1730	if (buf->f_bfree > F2FS_OPTION(sbi).root_reserved_blocks)
   1731		buf->f_bavail = buf->f_bfree -
   1732				F2FS_OPTION(sbi).root_reserved_blocks;
   1733	else
   1734		buf->f_bavail = 0;
   1735
   1736	if (avail_node_count > user_block_count) {
   1737		buf->f_files = user_block_count;
   1738		buf->f_ffree = buf->f_bavail;
   1739	} else {
   1740		buf->f_files = avail_node_count;
   1741		buf->f_ffree = min(avail_node_count - total_valid_node_count,
   1742					buf->f_bavail);
   1743	}
   1744
   1745	buf->f_namelen = F2FS_NAME_LEN;
   1746	buf->f_fsid    = u64_to_fsid(id);
   1747
   1748#ifdef CONFIG_QUOTA
   1749	if (is_inode_flag_set(dentry->d_inode, FI_PROJ_INHERIT) &&
   1750			sb_has_quota_limits_enabled(sb, PRJQUOTA)) {
   1751		f2fs_statfs_project(sb, F2FS_I(dentry->d_inode)->i_projid, buf);
   1752	}
   1753#endif
   1754	return 0;
   1755}
   1756
   1757static inline void f2fs_show_quota_options(struct seq_file *seq,
   1758					   struct super_block *sb)
   1759{
   1760#ifdef CONFIG_QUOTA
   1761	struct f2fs_sb_info *sbi = F2FS_SB(sb);
   1762
   1763	if (F2FS_OPTION(sbi).s_jquota_fmt) {
   1764		char *fmtname = "";
   1765
   1766		switch (F2FS_OPTION(sbi).s_jquota_fmt) {
   1767		case QFMT_VFS_OLD:
   1768			fmtname = "vfsold";
   1769			break;
   1770		case QFMT_VFS_V0:
   1771			fmtname = "vfsv0";
   1772			break;
   1773		case QFMT_VFS_V1:
   1774			fmtname = "vfsv1";
   1775			break;
   1776		}
   1777		seq_printf(seq, ",jqfmt=%s", fmtname);
   1778	}
   1779
   1780	if (F2FS_OPTION(sbi).s_qf_names[USRQUOTA])
   1781		seq_show_option(seq, "usrjquota",
   1782			F2FS_OPTION(sbi).s_qf_names[USRQUOTA]);
   1783
   1784	if (F2FS_OPTION(sbi).s_qf_names[GRPQUOTA])
   1785		seq_show_option(seq, "grpjquota",
   1786			F2FS_OPTION(sbi).s_qf_names[GRPQUOTA]);
   1787
   1788	if (F2FS_OPTION(sbi).s_qf_names[PRJQUOTA])
   1789		seq_show_option(seq, "prjjquota",
   1790			F2FS_OPTION(sbi).s_qf_names[PRJQUOTA]);
   1791#endif
   1792}
   1793
   1794#ifdef CONFIG_F2FS_FS_COMPRESSION
   1795static inline void f2fs_show_compress_options(struct seq_file *seq,
   1796							struct super_block *sb)
   1797{
   1798	struct f2fs_sb_info *sbi = F2FS_SB(sb);
   1799	char *algtype = "";
   1800	int i;
   1801
   1802	if (!f2fs_sb_has_compression(sbi))
   1803		return;
   1804
   1805	switch (F2FS_OPTION(sbi).compress_algorithm) {
   1806	case COMPRESS_LZO:
   1807		algtype = "lzo";
   1808		break;
   1809	case COMPRESS_LZ4:
   1810		algtype = "lz4";
   1811		break;
   1812	case COMPRESS_ZSTD:
   1813		algtype = "zstd";
   1814		break;
   1815	case COMPRESS_LZORLE:
   1816		algtype = "lzo-rle";
   1817		break;
   1818	}
   1819	seq_printf(seq, ",compress_algorithm=%s", algtype);
   1820
   1821	if (F2FS_OPTION(sbi).compress_level)
   1822		seq_printf(seq, ":%d", F2FS_OPTION(sbi).compress_level);
   1823
   1824	seq_printf(seq, ",compress_log_size=%u",
   1825			F2FS_OPTION(sbi).compress_log_size);
   1826
   1827	for (i = 0; i < F2FS_OPTION(sbi).compress_ext_cnt; i++) {
   1828		seq_printf(seq, ",compress_extension=%s",
   1829			F2FS_OPTION(sbi).extensions[i]);
   1830	}
   1831
   1832	for (i = 0; i < F2FS_OPTION(sbi).nocompress_ext_cnt; i++) {
   1833		seq_printf(seq, ",nocompress_extension=%s",
   1834			F2FS_OPTION(sbi).noextensions[i]);
   1835	}
   1836
   1837	if (F2FS_OPTION(sbi).compress_chksum)
   1838		seq_puts(seq, ",compress_chksum");
   1839
   1840	if (F2FS_OPTION(sbi).compress_mode == COMPR_MODE_FS)
   1841		seq_printf(seq, ",compress_mode=%s", "fs");
   1842	else if (F2FS_OPTION(sbi).compress_mode == COMPR_MODE_USER)
   1843		seq_printf(seq, ",compress_mode=%s", "user");
   1844
   1845	if (test_opt(sbi, COMPRESS_CACHE))
   1846		seq_puts(seq, ",compress_cache");
   1847}
   1848#endif
   1849
   1850static int f2fs_show_options(struct seq_file *seq, struct dentry *root)
   1851{
   1852	struct f2fs_sb_info *sbi = F2FS_SB(root->d_sb);
   1853
   1854	if (F2FS_OPTION(sbi).bggc_mode == BGGC_MODE_SYNC)
   1855		seq_printf(seq, ",background_gc=%s", "sync");
   1856	else if (F2FS_OPTION(sbi).bggc_mode == BGGC_MODE_ON)
   1857		seq_printf(seq, ",background_gc=%s", "on");
   1858	else if (F2FS_OPTION(sbi).bggc_mode == BGGC_MODE_OFF)
   1859		seq_printf(seq, ",background_gc=%s", "off");
   1860
   1861	if (test_opt(sbi, GC_MERGE))
   1862		seq_puts(seq, ",gc_merge");
   1863
   1864	if (test_opt(sbi, DISABLE_ROLL_FORWARD))
   1865		seq_puts(seq, ",disable_roll_forward");
   1866	if (test_opt(sbi, NORECOVERY))
   1867		seq_puts(seq, ",norecovery");
   1868	if (test_opt(sbi, DISCARD))
   1869		seq_puts(seq, ",discard");
   1870	else
   1871		seq_puts(seq, ",nodiscard");
   1872	if (test_opt(sbi, NOHEAP))
   1873		seq_puts(seq, ",no_heap");
   1874	else
   1875		seq_puts(seq, ",heap");
   1876#ifdef CONFIG_F2FS_FS_XATTR
   1877	if (test_opt(sbi, XATTR_USER))
   1878		seq_puts(seq, ",user_xattr");
   1879	else
   1880		seq_puts(seq, ",nouser_xattr");
   1881	if (test_opt(sbi, INLINE_XATTR))
   1882		seq_puts(seq, ",inline_xattr");
   1883	else
   1884		seq_puts(seq, ",noinline_xattr");
   1885	if (test_opt(sbi, INLINE_XATTR_SIZE))
   1886		seq_printf(seq, ",inline_xattr_size=%u",
   1887					F2FS_OPTION(sbi).inline_xattr_size);
   1888#endif
   1889#ifdef CONFIG_F2FS_FS_POSIX_ACL
   1890	if (test_opt(sbi, POSIX_ACL))
   1891		seq_puts(seq, ",acl");
   1892	else
   1893		seq_puts(seq, ",noacl");
   1894#endif
   1895	if (test_opt(sbi, DISABLE_EXT_IDENTIFY))
   1896		seq_puts(seq, ",disable_ext_identify");
   1897	if (test_opt(sbi, INLINE_DATA))
   1898		seq_puts(seq, ",inline_data");
   1899	else
   1900		seq_puts(seq, ",noinline_data");
   1901	if (test_opt(sbi, INLINE_DENTRY))
   1902		seq_puts(seq, ",inline_dentry");
   1903	else
   1904		seq_puts(seq, ",noinline_dentry");
   1905	if (!f2fs_readonly(sbi->sb) && test_opt(sbi, FLUSH_MERGE))
   1906		seq_puts(seq, ",flush_merge");
   1907	if (test_opt(sbi, NOBARRIER))
   1908		seq_puts(seq, ",nobarrier");
   1909	if (test_opt(sbi, FASTBOOT))
   1910		seq_puts(seq, ",fastboot");
   1911	if (test_opt(sbi, EXTENT_CACHE))
   1912		seq_puts(seq, ",extent_cache");
   1913	else
   1914		seq_puts(seq, ",noextent_cache");
   1915	if (test_opt(sbi, DATA_FLUSH))
   1916		seq_puts(seq, ",data_flush");
   1917
   1918	seq_puts(seq, ",mode=");
   1919	if (F2FS_OPTION(sbi).fs_mode == FS_MODE_ADAPTIVE)
   1920		seq_puts(seq, "adaptive");
   1921	else if (F2FS_OPTION(sbi).fs_mode == FS_MODE_LFS)
   1922		seq_puts(seq, "lfs");
   1923	else if (F2FS_OPTION(sbi).fs_mode == FS_MODE_FRAGMENT_SEG)
   1924		seq_puts(seq, "fragment:segment");
   1925	else if (F2FS_OPTION(sbi).fs_mode == FS_MODE_FRAGMENT_BLK)
   1926		seq_puts(seq, "fragment:block");
   1927	seq_printf(seq, ",active_logs=%u", F2FS_OPTION(sbi).active_logs);
   1928	if (test_opt(sbi, RESERVE_ROOT))
   1929		seq_printf(seq, ",reserve_root=%u,resuid=%u,resgid=%u",
   1930				F2FS_OPTION(sbi).root_reserved_blocks,
   1931				from_kuid_munged(&init_user_ns,
   1932					F2FS_OPTION(sbi).s_resuid),
   1933				from_kgid_munged(&init_user_ns,
   1934					F2FS_OPTION(sbi).s_resgid));
   1935	if (F2FS_IO_SIZE_BITS(sbi))
   1936		seq_printf(seq, ",io_bits=%u",
   1937				F2FS_OPTION(sbi).write_io_size_bits);
   1938#ifdef CONFIG_F2FS_FAULT_INJECTION
   1939	if (test_opt(sbi, FAULT_INJECTION)) {
   1940		seq_printf(seq, ",fault_injection=%u",
   1941				F2FS_OPTION(sbi).fault_info.inject_rate);
   1942		seq_printf(seq, ",fault_type=%u",
   1943				F2FS_OPTION(sbi).fault_info.inject_type);
   1944	}
   1945#endif
   1946#ifdef CONFIG_QUOTA
   1947	if (test_opt(sbi, QUOTA))
   1948		seq_puts(seq, ",quota");
   1949	if (test_opt(sbi, USRQUOTA))
   1950		seq_puts(seq, ",usrquota");
   1951	if (test_opt(sbi, GRPQUOTA))
   1952		seq_puts(seq, ",grpquota");
   1953	if (test_opt(sbi, PRJQUOTA))
   1954		seq_puts(seq, ",prjquota");
   1955#endif
   1956	f2fs_show_quota_options(seq, sbi->sb);
   1957
   1958	fscrypt_show_test_dummy_encryption(seq, ',', sbi->sb);
   1959
   1960	if (sbi->sb->s_flags & SB_INLINECRYPT)
   1961		seq_puts(seq, ",inlinecrypt");
   1962
   1963	if (F2FS_OPTION(sbi).alloc_mode == ALLOC_MODE_DEFAULT)
   1964		seq_printf(seq, ",alloc_mode=%s", "default");
   1965	else if (F2FS_OPTION(sbi).alloc_mode == ALLOC_MODE_REUSE)
   1966		seq_printf(seq, ",alloc_mode=%s", "reuse");
   1967
   1968	if (test_opt(sbi, DISABLE_CHECKPOINT))
   1969		seq_printf(seq, ",checkpoint=disable:%u",
   1970				F2FS_OPTION(sbi).unusable_cap);
   1971	if (test_opt(sbi, MERGE_CHECKPOINT))
   1972		seq_puts(seq, ",checkpoint_merge");
   1973	else
   1974		seq_puts(seq, ",nocheckpoint_merge");
   1975	if (F2FS_OPTION(sbi).fsync_mode == FSYNC_MODE_POSIX)
   1976		seq_printf(seq, ",fsync_mode=%s", "posix");
   1977	else if (F2FS_OPTION(sbi).fsync_mode == FSYNC_MODE_STRICT)
   1978		seq_printf(seq, ",fsync_mode=%s", "strict");
   1979	else if (F2FS_OPTION(sbi).fsync_mode == FSYNC_MODE_NOBARRIER)
   1980		seq_printf(seq, ",fsync_mode=%s", "nobarrier");
   1981
   1982#ifdef CONFIG_F2FS_FS_COMPRESSION
   1983	f2fs_show_compress_options(seq, sbi->sb);
   1984#endif
   1985
   1986	if (test_opt(sbi, ATGC))
   1987		seq_puts(seq, ",atgc");
   1988
   1989	if (F2FS_OPTION(sbi).discard_unit == DISCARD_UNIT_BLOCK)
   1990		seq_printf(seq, ",discard_unit=%s", "block");
   1991	else if (F2FS_OPTION(sbi).discard_unit == DISCARD_UNIT_SEGMENT)
   1992		seq_printf(seq, ",discard_unit=%s", "segment");
   1993	else if (F2FS_OPTION(sbi).discard_unit == DISCARD_UNIT_SECTION)
   1994		seq_printf(seq, ",discard_unit=%s", "section");
   1995
   1996	return 0;
   1997}
   1998
   1999static void default_options(struct f2fs_sb_info *sbi)
   2000{
   2001	/* init some FS parameters */
   2002	if (f2fs_sb_has_readonly(sbi))
   2003		F2FS_OPTION(sbi).active_logs = NR_CURSEG_RO_TYPE;
   2004	else
   2005		F2FS_OPTION(sbi).active_logs = NR_CURSEG_PERSIST_TYPE;
   2006
   2007	F2FS_OPTION(sbi).inline_xattr_size = DEFAULT_INLINE_XATTR_ADDRS;
   2008	F2FS_OPTION(sbi).alloc_mode = ALLOC_MODE_DEFAULT;
   2009	F2FS_OPTION(sbi).fsync_mode = FSYNC_MODE_POSIX;
   2010	F2FS_OPTION(sbi).s_resuid = make_kuid(&init_user_ns, F2FS_DEF_RESUID);
   2011	F2FS_OPTION(sbi).s_resgid = make_kgid(&init_user_ns, F2FS_DEF_RESGID);
   2012	F2FS_OPTION(sbi).compress_algorithm = COMPRESS_LZ4;
   2013	F2FS_OPTION(sbi).compress_log_size = MIN_COMPRESS_LOG_SIZE;
   2014	F2FS_OPTION(sbi).compress_ext_cnt = 0;
   2015	F2FS_OPTION(sbi).compress_mode = COMPR_MODE_FS;
   2016	F2FS_OPTION(sbi).bggc_mode = BGGC_MODE_ON;
   2017
   2018	sbi->sb->s_flags &= ~SB_INLINECRYPT;
   2019
   2020	set_opt(sbi, INLINE_XATTR);
   2021	set_opt(sbi, INLINE_DATA);
   2022	set_opt(sbi, INLINE_DENTRY);
   2023	set_opt(sbi, EXTENT_CACHE);
   2024	set_opt(sbi, NOHEAP);
   2025	clear_opt(sbi, DISABLE_CHECKPOINT);
   2026	set_opt(sbi, MERGE_CHECKPOINT);
   2027	F2FS_OPTION(sbi).unusable_cap = 0;
   2028	sbi->sb->s_flags |= SB_LAZYTIME;
   2029	set_opt(sbi, FLUSH_MERGE);
   2030	if (f2fs_hw_support_discard(sbi) || f2fs_hw_should_discard(sbi))
   2031		set_opt(sbi, DISCARD);
   2032	if (f2fs_sb_has_blkzoned(sbi)) {
   2033		F2FS_OPTION(sbi).fs_mode = FS_MODE_LFS;
   2034		F2FS_OPTION(sbi).discard_unit = DISCARD_UNIT_SECTION;
   2035	} else {
   2036		F2FS_OPTION(sbi).fs_mode = FS_MODE_ADAPTIVE;
   2037		F2FS_OPTION(sbi).discard_unit = DISCARD_UNIT_BLOCK;
   2038	}
   2039
   2040#ifdef CONFIG_F2FS_FS_XATTR
   2041	set_opt(sbi, XATTR_USER);
   2042#endif
   2043#ifdef CONFIG_F2FS_FS_POSIX_ACL
   2044	set_opt(sbi, POSIX_ACL);
   2045#endif
   2046
   2047	f2fs_build_fault_attr(sbi, 0, 0);
   2048}
   2049
   2050#ifdef CONFIG_QUOTA
   2051static int f2fs_enable_quotas(struct super_block *sb);
   2052#endif
   2053
   2054static int f2fs_disable_checkpoint(struct f2fs_sb_info *sbi)
   2055{
   2056	unsigned int s_flags = sbi->sb->s_flags;
   2057	struct cp_control cpc;
   2058	unsigned int gc_mode = sbi->gc_mode;
   2059	int err = 0;
   2060	int ret;
   2061	block_t unusable;
   2062
   2063	if (s_flags & SB_RDONLY) {
   2064		f2fs_err(sbi, "checkpoint=disable on readonly fs");
   2065		return -EINVAL;
   2066	}
   2067	sbi->sb->s_flags |= SB_ACTIVE;
   2068
   2069	/* check if we need more GC first */
   2070	unusable = f2fs_get_unusable_blocks(sbi);
   2071	if (!f2fs_disable_cp_again(sbi, unusable))
   2072		goto skip_gc;
   2073
   2074	f2fs_update_time(sbi, DISABLE_TIME);
   2075
   2076	sbi->gc_mode = GC_URGENT_HIGH;
   2077
   2078	while (!f2fs_time_over(sbi, DISABLE_TIME)) {
   2079		struct f2fs_gc_control gc_control = {
   2080			.victim_segno = NULL_SEGNO,
   2081			.init_gc_type = FG_GC,
   2082			.should_migrate_blocks = false,
   2083			.err_gc_skipped = true,
   2084			.nr_free_secs = 1 };
   2085
   2086		f2fs_down_write(&sbi->gc_lock);
   2087		err = f2fs_gc(sbi, &gc_control);
   2088		if (err == -ENODATA) {
   2089			err = 0;
   2090			break;
   2091		}
   2092		if (err && err != -EAGAIN)
   2093			break;
   2094	}
   2095
   2096	ret = sync_filesystem(sbi->sb);
   2097	if (ret || err) {
   2098		err = ret ? ret : err;
   2099		goto restore_flag;
   2100	}
   2101
   2102	unusable = f2fs_get_unusable_blocks(sbi);
   2103	if (f2fs_disable_cp_again(sbi, unusable)) {
   2104		err = -EAGAIN;
   2105		goto restore_flag;
   2106	}
   2107
   2108skip_gc:
   2109	f2fs_down_write(&sbi->gc_lock);
   2110	cpc.reason = CP_PAUSE;
   2111	set_sbi_flag(sbi, SBI_CP_DISABLED);
   2112	err = f2fs_write_checkpoint(sbi, &cpc);
   2113	if (err)
   2114		goto out_unlock;
   2115
   2116	spin_lock(&sbi->stat_lock);
   2117	sbi->unusable_block_count = unusable;
   2118	spin_unlock(&sbi->stat_lock);
   2119
   2120out_unlock:
   2121	f2fs_up_write(&sbi->gc_lock);
   2122restore_flag:
   2123	sbi->gc_mode = gc_mode;
   2124	sbi->sb->s_flags = s_flags;	/* Restore SB_RDONLY status */
   2125	return err;
   2126}
   2127
   2128static void f2fs_enable_checkpoint(struct f2fs_sb_info *sbi)
   2129{
   2130	int retry = DEFAULT_RETRY_IO_COUNT;
   2131
   2132	/* we should flush all the data to keep data consistency */
   2133	do {
   2134		sync_inodes_sb(sbi->sb);
   2135		f2fs_io_schedule_timeout(DEFAULT_IO_TIMEOUT);
   2136	} while (get_pages(sbi, F2FS_DIRTY_DATA) && retry--);
   2137
   2138	if (unlikely(retry < 0))
   2139		f2fs_warn(sbi, "checkpoint=enable has some unwritten data.");
   2140
   2141	f2fs_down_write(&sbi->gc_lock);
   2142	f2fs_dirty_to_prefree(sbi);
   2143
   2144	clear_sbi_flag(sbi, SBI_CP_DISABLED);
   2145	set_sbi_flag(sbi, SBI_IS_DIRTY);
   2146	f2fs_up_write(&sbi->gc_lock);
   2147
   2148	f2fs_sync_fs(sbi->sb, 1);
   2149}
   2150
   2151static int f2fs_remount(struct super_block *sb, int *flags, char *data)
   2152{
   2153	struct f2fs_sb_info *sbi = F2FS_SB(sb);
   2154	struct f2fs_mount_info org_mount_opt;
   2155	unsigned long old_sb_flags;
   2156	int err;
   2157	bool need_restart_gc = false, need_stop_gc = false;
   2158	bool need_restart_ckpt = false, need_stop_ckpt = false;
   2159	bool need_restart_flush = false, need_stop_flush = false;
   2160	bool need_restart_discard = false, need_stop_discard = false;
   2161	bool no_extent_cache = !test_opt(sbi, EXTENT_CACHE);
   2162	bool enable_checkpoint = !test_opt(sbi, DISABLE_CHECKPOINT);
   2163	bool no_io_align = !F2FS_IO_ALIGNED(sbi);
   2164	bool no_atgc = !test_opt(sbi, ATGC);
   2165	bool no_discard = !test_opt(sbi, DISCARD);
   2166	bool no_compress_cache = !test_opt(sbi, COMPRESS_CACHE);
   2167	bool block_unit_discard = f2fs_block_unit_discard(sbi);
   2168	struct discard_cmd_control *dcc;
   2169#ifdef CONFIG_QUOTA
   2170	int i, j;
   2171#endif
   2172
   2173	/*
   2174	 * Save the old mount options in case we
   2175	 * need to restore them.
   2176	 */
   2177	org_mount_opt = sbi->mount_opt;
   2178	old_sb_flags = sb->s_flags;
   2179
   2180#ifdef CONFIG_QUOTA
   2181	org_mount_opt.s_jquota_fmt = F2FS_OPTION(sbi).s_jquota_fmt;
   2182	for (i = 0; i < MAXQUOTAS; i++) {
   2183		if (F2FS_OPTION(sbi).s_qf_names[i]) {
   2184			org_mount_opt.s_qf_names[i] =
   2185				kstrdup(F2FS_OPTION(sbi).s_qf_names[i],
   2186				GFP_KERNEL);
   2187			if (!org_mount_opt.s_qf_names[i]) {
   2188				for (j = 0; j < i; j++)
   2189					kfree(org_mount_opt.s_qf_names[j]);
   2190				return -ENOMEM;
   2191			}
   2192		} else {
   2193			org_mount_opt.s_qf_names[i] = NULL;
   2194		}
   2195	}
   2196#endif
   2197
   2198	/* recover superblocks we couldn't write due to previous RO mount */
   2199	if (!(*flags & SB_RDONLY) && is_sbi_flag_set(sbi, SBI_NEED_SB_WRITE)) {
   2200		err = f2fs_commit_super(sbi, false);
   2201		f2fs_info(sbi, "Try to recover all the superblocks, ret: %d",
   2202			  err);
   2203		if (!err)
   2204			clear_sbi_flag(sbi, SBI_NEED_SB_WRITE);
   2205	}
   2206
   2207	default_options(sbi);
   2208
   2209	/* parse mount options */
   2210	err = parse_options(sb, data, true);
   2211	if (err)
   2212		goto restore_opts;
   2213
   2214	/*
   2215	 * Previous and new state of filesystem is RO,
   2216	 * so skip checking GC and FLUSH_MERGE conditions.
   2217	 */
   2218	if (f2fs_readonly(sb) && (*flags & SB_RDONLY))
   2219		goto skip;
   2220
   2221	if (f2fs_sb_has_readonly(sbi) && !(*flags & SB_RDONLY)) {
   2222		err = -EROFS;
   2223		goto restore_opts;
   2224	}
   2225
   2226#ifdef CONFIG_QUOTA
   2227	if (!f2fs_readonly(sb) && (*flags & SB_RDONLY)) {
   2228		err = dquot_suspend(sb, -1);
   2229		if (err < 0)
   2230			goto restore_opts;
   2231	} else if (f2fs_readonly(sb) && !(*flags & SB_RDONLY)) {
   2232		/* dquot_resume needs RW */
   2233		sb->s_flags &= ~SB_RDONLY;
   2234		if (sb_any_quota_suspended(sb)) {
   2235			dquot_resume(sb, -1);
   2236		} else if (f2fs_sb_has_quota_ino(sbi)) {
   2237			err = f2fs_enable_quotas(sb);
   2238			if (err)
   2239				goto restore_opts;
   2240		}
   2241	}
   2242#endif
   2243	/* disallow enable atgc dynamically */
   2244	if (no_atgc == !!test_opt(sbi, ATGC)) {
   2245		err = -EINVAL;
   2246		f2fs_warn(sbi, "switch atgc option is not allowed");
   2247		goto restore_opts;
   2248	}
   2249
   2250	/* disallow enable/disable extent_cache dynamically */
   2251	if (no_extent_cache == !!test_opt(sbi, EXTENT_CACHE)) {
   2252		err = -EINVAL;
   2253		f2fs_warn(sbi, "switch extent_cache option is not allowed");
   2254		goto restore_opts;
   2255	}
   2256
   2257	if (no_io_align == !!F2FS_IO_ALIGNED(sbi)) {
   2258		err = -EINVAL;
   2259		f2fs_warn(sbi, "switch io_bits option is not allowed");
   2260		goto restore_opts;
   2261	}
   2262
   2263	if (no_compress_cache == !!test_opt(sbi, COMPRESS_CACHE)) {
   2264		err = -EINVAL;
   2265		f2fs_warn(sbi, "switch compress_cache option is not allowed");
   2266		goto restore_opts;
   2267	}
   2268
   2269	if (block_unit_discard != f2fs_block_unit_discard(sbi)) {
   2270		err = -EINVAL;
   2271		f2fs_warn(sbi, "switch discard_unit option is not allowed");
   2272		goto restore_opts;
   2273	}
   2274
   2275	if ((*flags & SB_RDONLY) && test_opt(sbi, DISABLE_CHECKPOINT)) {
   2276		err = -EINVAL;
   2277		f2fs_warn(sbi, "disabling checkpoint not compatible with read-only");
   2278		goto restore_opts;
   2279	}
   2280
   2281	/*
   2282	 * We stop the GC thread if FS is mounted as RO
   2283	 * or if background_gc = off is passed in mount
   2284	 * option. Also sync the filesystem.
   2285	 */
   2286	if ((*flags & SB_RDONLY) ||
   2287			(F2FS_OPTION(sbi).bggc_mode == BGGC_MODE_OFF &&
   2288			!test_opt(sbi, GC_MERGE))) {
   2289		if (sbi->gc_thread) {
   2290			f2fs_stop_gc_thread(sbi);
   2291			need_restart_gc = true;
   2292		}
   2293	} else if (!sbi->gc_thread) {
   2294		err = f2fs_start_gc_thread(sbi);
   2295		if (err)
   2296			goto restore_opts;
   2297		need_stop_gc = true;
   2298	}
   2299
   2300	if (*flags & SB_RDONLY) {
   2301		sync_inodes_sb(sb);
   2302
   2303		set_sbi_flag(sbi, SBI_IS_DIRTY);
   2304		set_sbi_flag(sbi, SBI_IS_CLOSE);
   2305		f2fs_sync_fs(sb, 1);
   2306		clear_sbi_flag(sbi, SBI_IS_CLOSE);
   2307	}
   2308
   2309	if ((*flags & SB_RDONLY) || test_opt(sbi, DISABLE_CHECKPOINT) ||
   2310			!test_opt(sbi, MERGE_CHECKPOINT)) {
   2311		f2fs_stop_ckpt_thread(sbi);
   2312		need_restart_ckpt = true;
   2313	} else {
   2314		err = f2fs_start_ckpt_thread(sbi);
   2315		if (err) {
   2316			f2fs_err(sbi,
   2317			    "Failed to start F2FS issue_checkpoint_thread (%d)",
   2318			    err);
   2319			goto restore_gc;
   2320		}
   2321		need_stop_ckpt = true;
   2322	}
   2323
   2324	/*
   2325	 * We stop issue flush thread if FS is mounted as RO
   2326	 * or if flush_merge is not passed in mount option.
   2327	 */
   2328	if ((*flags & SB_RDONLY) || !test_opt(sbi, FLUSH_MERGE)) {
   2329		clear_opt(sbi, FLUSH_MERGE);
   2330		f2fs_destroy_flush_cmd_control(sbi, false);
   2331		need_restart_flush = true;
   2332	} else {
   2333		err = f2fs_create_flush_cmd_control(sbi);
   2334		if (err)
   2335			goto restore_ckpt;
   2336		need_stop_flush = true;
   2337	}
   2338
   2339	if (no_discard == !!test_opt(sbi, DISCARD)) {
   2340		if (test_opt(sbi, DISCARD)) {
   2341			err = f2fs_start_discard_thread(sbi);
   2342			if (err)
   2343				goto restore_flush;
   2344			need_stop_discard = true;
   2345		} else {
   2346			dcc = SM_I(sbi)->dcc_info;
   2347			f2fs_stop_discard_thread(sbi);
   2348			if (atomic_read(&dcc->discard_cmd_cnt))
   2349				f2fs_issue_discard_timeout(sbi);
   2350			need_restart_discard = true;
   2351		}
   2352	}
   2353
   2354	if (enable_checkpoint == !!test_opt(sbi, DISABLE_CHECKPOINT)) {
   2355		if (test_opt(sbi, DISABLE_CHECKPOINT)) {
   2356			err = f2fs_disable_checkpoint(sbi);
   2357			if (err)
   2358				goto restore_discard;
   2359		} else {
   2360			f2fs_enable_checkpoint(sbi);
   2361		}
   2362	}
   2363
   2364skip:
   2365#ifdef CONFIG_QUOTA
   2366	/* Release old quota file names */
   2367	for (i = 0; i < MAXQUOTAS; i++)
   2368		kfree(org_mount_opt.s_qf_names[i]);
   2369#endif
   2370	/* Update the POSIXACL Flag */
   2371	sb->s_flags = (sb->s_flags & ~SB_POSIXACL) |
   2372		(test_opt(sbi, POSIX_ACL) ? SB_POSIXACL : 0);
   2373
   2374	limit_reserve_root(sbi);
   2375	adjust_unusable_cap_perc(sbi);
   2376	*flags = (*flags & ~SB_LAZYTIME) | (sb->s_flags & SB_LAZYTIME);
   2377	return 0;
   2378restore_discard:
   2379	if (need_restart_discard) {
   2380		if (f2fs_start_discard_thread(sbi))
   2381			f2fs_warn(sbi, "discard has been stopped");
   2382	} else if (need_stop_discard) {
   2383		f2fs_stop_discard_thread(sbi);
   2384	}
   2385restore_flush:
   2386	if (need_restart_flush) {
   2387		if (f2fs_create_flush_cmd_control(sbi))
   2388			f2fs_warn(sbi, "background flush thread has stopped");
   2389	} else if (need_stop_flush) {
   2390		clear_opt(sbi, FLUSH_MERGE);
   2391		f2fs_destroy_flush_cmd_control(sbi, false);
   2392	}
   2393restore_ckpt:
   2394	if (need_restart_ckpt) {
   2395		if (f2fs_start_ckpt_thread(sbi))
   2396			f2fs_warn(sbi, "background ckpt thread has stopped");
   2397	} else if (need_stop_ckpt) {
   2398		f2fs_stop_ckpt_thread(sbi);
   2399	}
   2400restore_gc:
   2401	if (need_restart_gc) {
   2402		if (f2fs_start_gc_thread(sbi))
   2403			f2fs_warn(sbi, "background gc thread has stopped");
   2404	} else if (need_stop_gc) {
   2405		f2fs_stop_gc_thread(sbi);
   2406	}
   2407restore_opts:
   2408#ifdef CONFIG_QUOTA
   2409	F2FS_OPTION(sbi).s_jquota_fmt = org_mount_opt.s_jquota_fmt;
   2410	for (i = 0; i < MAXQUOTAS; i++) {
   2411		kfree(F2FS_OPTION(sbi).s_qf_names[i]);
   2412		F2FS_OPTION(sbi).s_qf_names[i] = org_mount_opt.s_qf_names[i];
   2413	}
   2414#endif
   2415	sbi->mount_opt = org_mount_opt;
   2416	sb->s_flags = old_sb_flags;
   2417	return err;
   2418}
   2419
   2420#ifdef CONFIG_QUOTA
   2421/* Read data from quotafile */
   2422static ssize_t f2fs_quota_read(struct super_block *sb, int type, char *data,
   2423			       size_t len, loff_t off)
   2424{
   2425	struct inode *inode = sb_dqopt(sb)->files[type];
   2426	struct address_space *mapping = inode->i_mapping;
   2427	block_t blkidx = F2FS_BYTES_TO_BLK(off);
   2428	int offset = off & (sb->s_blocksize - 1);
   2429	int tocopy;
   2430	size_t toread;
   2431	loff_t i_size = i_size_read(inode);
   2432	struct page *page;
   2433	char *kaddr;
   2434
   2435	if (off > i_size)
   2436		return 0;
   2437
   2438	if (off + len > i_size)
   2439		len = i_size - off;
   2440	toread = len;
   2441	while (toread > 0) {
   2442		tocopy = min_t(unsigned long, sb->s_blocksize - offset, toread);
   2443repeat:
   2444		page = read_cache_page_gfp(mapping, blkidx, GFP_NOFS);
   2445		if (IS_ERR(page)) {
   2446			if (PTR_ERR(page) == -ENOMEM) {
   2447				memalloc_retry_wait(GFP_NOFS);
   2448				goto repeat;
   2449			}
   2450			set_sbi_flag(F2FS_SB(sb), SBI_QUOTA_NEED_REPAIR);
   2451			return PTR_ERR(page);
   2452		}
   2453
   2454		lock_page(page);
   2455
   2456		if (unlikely(page->mapping != mapping)) {
   2457			f2fs_put_page(page, 1);
   2458			goto repeat;
   2459		}
   2460		if (unlikely(!PageUptodate(page))) {
   2461			f2fs_put_page(page, 1);
   2462			set_sbi_flag(F2FS_SB(sb), SBI_QUOTA_NEED_REPAIR);
   2463			return -EIO;
   2464		}
   2465
   2466		kaddr = kmap_atomic(page);
   2467		memcpy(data, kaddr + offset, tocopy);
   2468		kunmap_atomic(kaddr);
   2469		f2fs_put_page(page, 1);
   2470
   2471		offset = 0;
   2472		toread -= tocopy;
   2473		data += tocopy;
   2474		blkidx++;
   2475	}
   2476	return len;
   2477}
   2478
   2479/* Write to quotafile */
   2480static ssize_t f2fs_quota_write(struct super_block *sb, int type,
   2481				const char *data, size_t len, loff_t off)
   2482{
   2483	struct inode *inode = sb_dqopt(sb)->files[type];
   2484	struct address_space *mapping = inode->i_mapping;
   2485	const struct address_space_operations *a_ops = mapping->a_ops;
   2486	int offset = off & (sb->s_blocksize - 1);
   2487	size_t towrite = len;
   2488	struct page *page;
   2489	void *fsdata = NULL;
   2490	char *kaddr;
   2491	int err = 0;
   2492	int tocopy;
   2493
   2494	while (towrite > 0) {
   2495		tocopy = min_t(unsigned long, sb->s_blocksize - offset,
   2496								towrite);
   2497retry:
   2498		err = a_ops->write_begin(NULL, mapping, off, tocopy,
   2499							&page, &fsdata);
   2500		if (unlikely(err)) {
   2501			if (err == -ENOMEM) {
   2502				f2fs_io_schedule_timeout(DEFAULT_IO_TIMEOUT);
   2503				goto retry;
   2504			}
   2505			set_sbi_flag(F2FS_SB(sb), SBI_QUOTA_NEED_REPAIR);
   2506			break;
   2507		}
   2508
   2509		kaddr = kmap_atomic(page);
   2510		memcpy(kaddr + offset, data, tocopy);
   2511		kunmap_atomic(kaddr);
   2512		flush_dcache_page(page);
   2513
   2514		a_ops->write_end(NULL, mapping, off, tocopy, tocopy,
   2515						page, fsdata);
   2516		offset = 0;
   2517		towrite -= tocopy;
   2518		off += tocopy;
   2519		data += tocopy;
   2520		cond_resched();
   2521	}
   2522
   2523	if (len == towrite)
   2524		return err;
   2525	inode->i_mtime = inode->i_ctime = current_time(inode);
   2526	f2fs_mark_inode_dirty_sync(inode, false);
   2527	return len - towrite;
   2528}
   2529
   2530int f2fs_dquot_initialize(struct inode *inode)
   2531{
   2532	if (time_to_inject(F2FS_I_SB(inode), FAULT_DQUOT_INIT)) {
   2533		f2fs_show_injection_info(F2FS_I_SB(inode), FAULT_DQUOT_INIT);
   2534		return -ESRCH;
   2535	}
   2536
   2537	return dquot_initialize(inode);
   2538}
   2539
   2540static struct dquot **f2fs_get_dquots(struct inode *inode)
   2541{
   2542	return F2FS_I(inode)->i_dquot;
   2543}
   2544
   2545static qsize_t *f2fs_get_reserved_space(struct inode *inode)
   2546{
   2547	return &F2FS_I(inode)->i_reserved_quota;
   2548}
   2549
   2550static int f2fs_quota_on_mount(struct f2fs_sb_info *sbi, int type)
   2551{
   2552	if (is_set_ckpt_flags(sbi, CP_QUOTA_NEED_FSCK_FLAG)) {
   2553		f2fs_err(sbi, "quota sysfile may be corrupted, skip loading it");
   2554		return 0;
   2555	}
   2556
   2557	return dquot_quota_on_mount(sbi->sb, F2FS_OPTION(sbi).s_qf_names[type],
   2558					F2FS_OPTION(sbi).s_jquota_fmt, type);
   2559}
   2560
   2561int f2fs_enable_quota_files(struct f2fs_sb_info *sbi, bool rdonly)
   2562{
   2563	int enabled = 0;
   2564	int i, err;
   2565
   2566	if (f2fs_sb_has_quota_ino(sbi) && rdonly) {
   2567		err = f2fs_enable_quotas(sbi->sb);
   2568		if (err) {
   2569			f2fs_err(sbi, "Cannot turn on quota_ino: %d", err);
   2570			return 0;
   2571		}
   2572		return 1;
   2573	}
   2574
   2575	for (i = 0; i < MAXQUOTAS; i++) {
   2576		if (F2FS_OPTION(sbi).s_qf_names[i]) {
   2577			err = f2fs_quota_on_mount(sbi, i);
   2578			if (!err) {
   2579				enabled = 1;
   2580				continue;
   2581			}
   2582			f2fs_err(sbi, "Cannot turn on quotas: %d on %d",
   2583				 err, i);
   2584		}
   2585	}
   2586	return enabled;
   2587}
   2588
   2589static int f2fs_quota_enable(struct super_block *sb, int type, int format_id,
   2590			     unsigned int flags)
   2591{
   2592	struct inode *qf_inode;
   2593	unsigned long qf_inum;
   2594	int err;
   2595
   2596	BUG_ON(!f2fs_sb_has_quota_ino(F2FS_SB(sb)));
   2597
   2598	qf_inum = f2fs_qf_ino(sb, type);
   2599	if (!qf_inum)
   2600		return -EPERM;
   2601
   2602	qf_inode = f2fs_iget(sb, qf_inum);
   2603	if (IS_ERR(qf_inode)) {
   2604		f2fs_err(F2FS_SB(sb), "Bad quota inode %u:%lu", type, qf_inum);
   2605		return PTR_ERR(qf_inode);
   2606	}
   2607
   2608	/* Don't account quota for quota files to avoid recursion */
   2609	qf_inode->i_flags |= S_NOQUOTA;
   2610	err = dquot_load_quota_inode(qf_inode, type, format_id, flags);
   2611	iput(qf_inode);
   2612	return err;
   2613}
   2614
   2615static int f2fs_enable_quotas(struct super_block *sb)
   2616{
   2617	struct f2fs_sb_info *sbi = F2FS_SB(sb);
   2618	int type, err = 0;
   2619	unsigned long qf_inum;
   2620	bool quota_mopt[MAXQUOTAS] = {
   2621		test_opt(sbi, USRQUOTA),
   2622		test_opt(sbi, GRPQUOTA),
   2623		test_opt(sbi, PRJQUOTA),
   2624	};
   2625
   2626	if (is_set_ckpt_flags(F2FS_SB(sb), CP_QUOTA_NEED_FSCK_FLAG)) {
   2627		f2fs_err(sbi, "quota file may be corrupted, skip loading it");
   2628		return 0;
   2629	}
   2630
   2631	sb_dqopt(sb)->flags |= DQUOT_QUOTA_SYS_FILE;
   2632
   2633	for (type = 0; type < MAXQUOTAS; type++) {
   2634		qf_inum = f2fs_qf_ino(sb, type);
   2635		if (qf_inum) {
   2636			err = f2fs_quota_enable(sb, type, QFMT_VFS_V1,
   2637				DQUOT_USAGE_ENABLED |
   2638				(quota_mopt[type] ? DQUOT_LIMITS_ENABLED : 0));
   2639			if (err) {
   2640				f2fs_err(sbi, "Failed to enable quota tracking (type=%d, err=%d). Please run fsck to fix.",
   2641					 type, err);
   2642				for (type--; type >= 0; type--)
   2643					dquot_quota_off(sb, type);
   2644				set_sbi_flag(F2FS_SB(sb),
   2645						SBI_QUOTA_NEED_REPAIR);
   2646				return err;
   2647			}
   2648		}
   2649	}
   2650	return 0;
   2651}
   2652
   2653static int f2fs_quota_sync_file(struct f2fs_sb_info *sbi, int type)
   2654{
   2655	struct quota_info *dqopt = sb_dqopt(sbi->sb);
   2656	struct address_space *mapping = dqopt->files[type]->i_mapping;
   2657	int ret = 0;
   2658
   2659	ret = dquot_writeback_dquots(sbi->sb, type);
   2660	if (ret)
   2661		goto out;
   2662
   2663	ret = filemap_fdatawrite(mapping);
   2664	if (ret)
   2665		goto out;
   2666
   2667	/* if we are using journalled quota */
   2668	if (is_journalled_quota(sbi))
   2669		goto out;
   2670
   2671	ret = filemap_fdatawait(mapping);
   2672
   2673	truncate_inode_pages(&dqopt->files[type]->i_data, 0);
   2674out:
   2675	if (ret)
   2676		set_sbi_flag(sbi, SBI_QUOTA_NEED_REPAIR);
   2677	return ret;
   2678}
   2679
   2680int f2fs_quota_sync(struct super_block *sb, int type)
   2681{
   2682	struct f2fs_sb_info *sbi = F2FS_SB(sb);
   2683	struct quota_info *dqopt = sb_dqopt(sb);
   2684	int cnt;
   2685	int ret = 0;
   2686
   2687	/*
   2688	 * Now when everything is written we can discard the pagecache so
   2689	 * that userspace sees the changes.
   2690	 */
   2691	for (cnt = 0; cnt < MAXQUOTAS; cnt++) {
   2692
   2693		if (type != -1 && cnt != type)
   2694			continue;
   2695
   2696		if (!sb_has_quota_active(sb, cnt))
   2697			continue;
   2698
   2699		if (!f2fs_sb_has_quota_ino(sbi))
   2700			inode_lock(dqopt->files[cnt]);
   2701
   2702		/*
   2703		 * do_quotactl
   2704		 *  f2fs_quota_sync
   2705		 *  f2fs_down_read(quota_sem)
   2706		 *  dquot_writeback_dquots()
   2707		 *  f2fs_dquot_commit
   2708		 *			      block_operation
   2709		 *			      f2fs_down_read(quota_sem)
   2710		 */
   2711		f2fs_lock_op(sbi);
   2712		f2fs_down_read(&sbi->quota_sem);
   2713
   2714		ret = f2fs_quota_sync_file(sbi, cnt);
   2715
   2716		f2fs_up_read(&sbi->quota_sem);
   2717		f2fs_unlock_op(sbi);
   2718
   2719		if (!f2fs_sb_has_quota_ino(sbi))
   2720			inode_unlock(dqopt->files[cnt]);
   2721
   2722		if (ret)
   2723			break;
   2724	}
   2725	return ret;
   2726}
   2727
   2728static int f2fs_quota_on(struct super_block *sb, int type, int format_id,
   2729							const struct path *path)
   2730{
   2731	struct inode *inode;
   2732	int err;
   2733
   2734	/* if quota sysfile exists, deny enabling quota with specific file */
   2735	if (f2fs_sb_has_quota_ino(F2FS_SB(sb))) {
   2736		f2fs_err(F2FS_SB(sb), "quota sysfile already exists");
   2737		return -EBUSY;
   2738	}
   2739
   2740	err = f2fs_quota_sync(sb, type);
   2741	if (err)
   2742		return err;
   2743
   2744	err = dquot_quota_on(sb, type, format_id, path);
   2745	if (err)
   2746		return err;
   2747
   2748	inode = d_inode(path->dentry);
   2749
   2750	inode_lock(inode);
   2751	F2FS_I(inode)->i_flags |= F2FS_NOATIME_FL | F2FS_IMMUTABLE_FL;
   2752	f2fs_set_inode_flags(inode);
   2753	inode_unlock(inode);
   2754	f2fs_mark_inode_dirty_sync(inode, false);
   2755
   2756	return 0;
   2757}
   2758
   2759static int __f2fs_quota_off(struct super_block *sb, int type)
   2760{
   2761	struct inode *inode = sb_dqopt(sb)->files[type];
   2762	int err;
   2763
   2764	if (!inode || !igrab(inode))
   2765		return dquot_quota_off(sb, type);
   2766
   2767	err = f2fs_quota_sync(sb, type);
   2768	if (err)
   2769		goto out_put;
   2770
   2771	err = dquot_quota_off(sb, type);
   2772	if (err || f2fs_sb_has_quota_ino(F2FS_SB(sb)))
   2773		goto out_put;
   2774
   2775	inode_lock(inode);
   2776	F2FS_I(inode)->i_flags &= ~(F2FS_NOATIME_FL | F2FS_IMMUTABLE_FL);
   2777	f2fs_set_inode_flags(inode);
   2778	inode_unlock(inode);
   2779	f2fs_mark_inode_dirty_sync(inode, false);
   2780out_put:
   2781	iput(inode);
   2782	return err;
   2783}
   2784
   2785static int f2fs_quota_off(struct super_block *sb, int type)
   2786{
   2787	struct f2fs_sb_info *sbi = F2FS_SB(sb);
   2788	int err;
   2789
   2790	err = __f2fs_quota_off(sb, type);
   2791
   2792	/*
   2793	 * quotactl can shutdown journalled quota, result in inconsistence
   2794	 * between quota record and fs data by following updates, tag the
   2795	 * flag to let fsck be aware of it.
   2796	 */
   2797	if (is_journalled_quota(sbi))
   2798		set_sbi_flag(sbi, SBI_QUOTA_NEED_REPAIR);
   2799	return err;
   2800}
   2801
   2802void f2fs_quota_off_umount(struct super_block *sb)
   2803{
   2804	int type;
   2805	int err;
   2806
   2807	for (type = 0; type < MAXQUOTAS; type++) {
   2808		err = __f2fs_quota_off(sb, type);
   2809		if (err) {
   2810			int ret = dquot_quota_off(sb, type);
   2811
   2812			f2fs_err(F2FS_SB(sb), "Fail to turn off disk quota (type: %d, err: %d, ret:%d), Please run fsck to fix it.",
   2813				 type, err, ret);
   2814			set_sbi_flag(F2FS_SB(sb), SBI_QUOTA_NEED_REPAIR);
   2815		}
   2816	}
   2817	/*
   2818	 * In case of checkpoint=disable, we must flush quota blocks.
   2819	 * This can cause NULL exception for node_inode in end_io, since
   2820	 * put_super already dropped it.
   2821	 */
   2822	sync_filesystem(sb);
   2823}
   2824
   2825static void f2fs_truncate_quota_inode_pages(struct super_block *sb)
   2826{
   2827	struct quota_info *dqopt = sb_dqopt(sb);
   2828	int type;
   2829
   2830	for (type = 0; type < MAXQUOTAS; type++) {
   2831		if (!dqopt->files[type])
   2832			continue;
   2833		f2fs_inode_synced(dqopt->files[type]);
   2834	}
   2835}
   2836
   2837static int f2fs_dquot_commit(struct dquot *dquot)
   2838{
   2839	struct f2fs_sb_info *sbi = F2FS_SB(dquot->dq_sb);
   2840	int ret;
   2841
   2842	f2fs_down_read_nested(&sbi->quota_sem, SINGLE_DEPTH_NESTING);
   2843	ret = dquot_commit(dquot);
   2844	if (ret < 0)
   2845		set_sbi_flag(sbi, SBI_QUOTA_NEED_REPAIR);
   2846	f2fs_up_read(&sbi->quota_sem);
   2847	return ret;
   2848}
   2849
   2850static int f2fs_dquot_acquire(struct dquot *dquot)
   2851{
   2852	struct f2fs_sb_info *sbi = F2FS_SB(dquot->dq_sb);
   2853	int ret;
   2854
   2855	f2fs_down_read(&sbi->quota_sem);
   2856	ret = dquot_acquire(dquot);
   2857	if (ret < 0)
   2858		set_sbi_flag(sbi, SBI_QUOTA_NEED_REPAIR);
   2859	f2fs_up_read(&sbi->quota_sem);
   2860	return ret;
   2861}
   2862
   2863static int f2fs_dquot_release(struct dquot *dquot)
   2864{
   2865	struct f2fs_sb_info *sbi = F2FS_SB(dquot->dq_sb);
   2866	int ret = dquot_release(dquot);
   2867
   2868	if (ret < 0)
   2869		set_sbi_flag(sbi, SBI_QUOTA_NEED_REPAIR);
   2870	return ret;
   2871}
   2872
   2873static int f2fs_dquot_mark_dquot_dirty(struct dquot *dquot)
   2874{
   2875	struct super_block *sb = dquot->dq_sb;
   2876	struct f2fs_sb_info *sbi = F2FS_SB(sb);
   2877	int ret = dquot_mark_dquot_dirty(dquot);
   2878
   2879	/* if we are using journalled quota */
   2880	if (is_journalled_quota(sbi))
   2881		set_sbi_flag(sbi, SBI_QUOTA_NEED_FLUSH);
   2882
   2883	return ret;
   2884}
   2885
   2886static int f2fs_dquot_commit_info(struct super_block *sb, int type)
   2887{
   2888	struct f2fs_sb_info *sbi = F2FS_SB(sb);
   2889	int ret = dquot_commit_info(sb, type);
   2890
   2891	if (ret < 0)
   2892		set_sbi_flag(sbi, SBI_QUOTA_NEED_REPAIR);
   2893	return ret;
   2894}
   2895
   2896static int f2fs_get_projid(struct inode *inode, kprojid_t *projid)
   2897{
   2898	*projid = F2FS_I(inode)->i_projid;
   2899	return 0;
   2900}
   2901
   2902static const struct dquot_operations f2fs_quota_operations = {
   2903	.get_reserved_space = f2fs_get_reserved_space,
   2904	.write_dquot	= f2fs_dquot_commit,
   2905	.acquire_dquot	= f2fs_dquot_acquire,
   2906	.release_dquot	= f2fs_dquot_release,
   2907	.mark_dirty	= f2fs_dquot_mark_dquot_dirty,
   2908	.write_info	= f2fs_dquot_commit_info,
   2909	.alloc_dquot	= dquot_alloc,
   2910	.destroy_dquot	= dquot_destroy,
   2911	.get_projid	= f2fs_get_projid,
   2912	.get_next_id	= dquot_get_next_id,
   2913};
   2914
   2915static const struct quotactl_ops f2fs_quotactl_ops = {
   2916	.quota_on	= f2fs_quota_on,
   2917	.quota_off	= f2fs_quota_off,
   2918	.quota_sync	= f2fs_quota_sync,
   2919	.get_state	= dquot_get_state,
   2920	.set_info	= dquot_set_dqinfo,
   2921	.get_dqblk	= dquot_get_dqblk,
   2922	.set_dqblk	= dquot_set_dqblk,
   2923	.get_nextdqblk	= dquot_get_next_dqblk,
   2924};
   2925#else
   2926int f2fs_dquot_initialize(struct inode *inode)
   2927{
   2928	return 0;
   2929}
   2930
   2931int f2fs_quota_sync(struct super_block *sb, int type)
   2932{
   2933	return 0;
   2934}
   2935
   2936void f2fs_quota_off_umount(struct super_block *sb)
   2937{
   2938}
   2939#endif
   2940
   2941static const struct super_operations f2fs_sops = {
   2942	.alloc_inode	= f2fs_alloc_inode,
   2943	.free_inode	= f2fs_free_inode,
   2944	.drop_inode	= f2fs_drop_inode,
   2945	.write_inode	= f2fs_write_inode,
   2946	.dirty_inode	= f2fs_dirty_inode,
   2947	.show_options	= f2fs_show_options,
   2948#ifdef CONFIG_QUOTA
   2949	.quota_read	= f2fs_quota_read,
   2950	.quota_write	= f2fs_quota_write,
   2951	.get_dquots	= f2fs_get_dquots,
   2952#endif
   2953	.evict_inode	= f2fs_evict_inode,
   2954	.put_super	= f2fs_put_super,
   2955	.sync_fs	= f2fs_sync_fs,
   2956	.freeze_fs	= f2fs_freeze,
   2957	.unfreeze_fs	= f2fs_unfreeze,
   2958	.statfs		= f2fs_statfs,
   2959	.remount_fs	= f2fs_remount,
   2960};
   2961
   2962#ifdef CONFIG_FS_ENCRYPTION
   2963static int f2fs_get_context(struct inode *inode, void *ctx, size_t len)
   2964{
   2965	return f2fs_getxattr(inode, F2FS_XATTR_INDEX_ENCRYPTION,
   2966				F2FS_XATTR_NAME_ENCRYPTION_CONTEXT,
   2967				ctx, len, NULL);
   2968}
   2969
   2970static int f2fs_set_context(struct inode *inode, const void *ctx, size_t len,
   2971							void *fs_data)
   2972{
   2973	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
   2974
   2975	/*
   2976	 * Encrypting the root directory is not allowed because fsck
   2977	 * expects lost+found directory to exist and remain unencrypted
   2978	 * if LOST_FOUND feature is enabled.
   2979	 *
   2980	 */
   2981	if (f2fs_sb_has_lost_found(sbi) &&
   2982			inode->i_ino == F2FS_ROOT_INO(sbi))
   2983		return -EPERM;
   2984
   2985	return f2fs_setxattr(inode, F2FS_XATTR_INDEX_ENCRYPTION,
   2986				F2FS_XATTR_NAME_ENCRYPTION_CONTEXT,
   2987				ctx, len, fs_data, XATTR_CREATE);
   2988}
   2989
   2990static const union fscrypt_policy *f2fs_get_dummy_policy(struct super_block *sb)
   2991{
   2992	return F2FS_OPTION(F2FS_SB(sb)).dummy_enc_policy.policy;
   2993}
   2994
   2995static bool f2fs_has_stable_inodes(struct super_block *sb)
   2996{
   2997	return true;
   2998}
   2999
   3000static void f2fs_get_ino_and_lblk_bits(struct super_block *sb,
   3001				       int *ino_bits_ret, int *lblk_bits_ret)
   3002{
   3003	*ino_bits_ret = 8 * sizeof(nid_t);
   3004	*lblk_bits_ret = 8 * sizeof(block_t);
   3005}
   3006
   3007static int f2fs_get_num_devices(struct super_block *sb)
   3008{
   3009	struct f2fs_sb_info *sbi = F2FS_SB(sb);
   3010
   3011	if (f2fs_is_multi_device(sbi))
   3012		return sbi->s_ndevs;
   3013	return 1;
   3014}
   3015
   3016static void f2fs_get_devices(struct super_block *sb,
   3017			     struct request_queue **devs)
   3018{
   3019	struct f2fs_sb_info *sbi = F2FS_SB(sb);
   3020	int i;
   3021
   3022	for (i = 0; i < sbi->s_ndevs; i++)
   3023		devs[i] = bdev_get_queue(FDEV(i).bdev);
   3024}
   3025
   3026static const struct fscrypt_operations f2fs_cryptops = {
   3027	.key_prefix		= "f2fs:",
   3028	.get_context		= f2fs_get_context,
   3029	.set_context		= f2fs_set_context,
   3030	.get_dummy_policy	= f2fs_get_dummy_policy,
   3031	.empty_dir		= f2fs_empty_dir,
   3032	.has_stable_inodes	= f2fs_has_stable_inodes,
   3033	.get_ino_and_lblk_bits	= f2fs_get_ino_and_lblk_bits,
   3034	.get_num_devices	= f2fs_get_num_devices,
   3035	.get_devices		= f2fs_get_devices,
   3036};
   3037#endif
   3038
   3039static struct inode *f2fs_nfs_get_inode(struct super_block *sb,
   3040		u64 ino, u32 generation)
   3041{
   3042	struct f2fs_sb_info *sbi = F2FS_SB(sb);
   3043	struct inode *inode;
   3044
   3045	if (f2fs_check_nid_range(sbi, ino))
   3046		return ERR_PTR(-ESTALE);
   3047
   3048	/*
   3049	 * f2fs_iget isn't quite right if the inode is currently unallocated!
   3050	 * However f2fs_iget currently does appropriate checks to handle stale
   3051	 * inodes so everything is OK.
   3052	 */
   3053	inode = f2fs_iget(sb, ino);
   3054	if (IS_ERR(inode))
   3055		return ERR_CAST(inode);
   3056	if (unlikely(generation && inode->i_generation != generation)) {
   3057		/* we didn't find the right inode.. */
   3058		iput(inode);
   3059		return ERR_PTR(-ESTALE);
   3060	}
   3061	return inode;
   3062}
   3063
   3064static struct dentry *f2fs_fh_to_dentry(struct super_block *sb, struct fid *fid,
   3065		int fh_len, int fh_type)
   3066{
   3067	return generic_fh_to_dentry(sb, fid, fh_len, fh_type,
   3068				    f2fs_nfs_get_inode);
   3069}
   3070
   3071static struct dentry *f2fs_fh_to_parent(struct super_block *sb, struct fid *fid,
   3072		int fh_len, int fh_type)
   3073{
   3074	return generic_fh_to_parent(sb, fid, fh_len, fh_type,
   3075				    f2fs_nfs_get_inode);
   3076}
   3077
   3078static const struct export_operations f2fs_export_ops = {
   3079	.fh_to_dentry = f2fs_fh_to_dentry,
   3080	.fh_to_parent = f2fs_fh_to_parent,
   3081	.get_parent = f2fs_get_parent,
   3082};
   3083
   3084loff_t max_file_blocks(struct inode *inode)
   3085{
   3086	loff_t result = 0;
   3087	loff_t leaf_count;
   3088
   3089	/*
   3090	 * note: previously, result is equal to (DEF_ADDRS_PER_INODE -
   3091	 * DEFAULT_INLINE_XATTR_ADDRS), but now f2fs try to reserve more
   3092	 * space in inode.i_addr, it will be more safe to reassign
   3093	 * result as zero.
   3094	 */
   3095
   3096	if (inode && f2fs_compressed_file(inode))
   3097		leaf_count = ADDRS_PER_BLOCK(inode);
   3098	else
   3099		leaf_count = DEF_ADDRS_PER_BLOCK;
   3100
   3101	/* two direct node blocks */
   3102	result += (leaf_count * 2);
   3103
   3104	/* two indirect node blocks */
   3105	leaf_count *= NIDS_PER_BLOCK;
   3106	result += (leaf_count * 2);
   3107
   3108	/* one double indirect node block */
   3109	leaf_count *= NIDS_PER_BLOCK;
   3110	result += leaf_count;
   3111
   3112	return result;
   3113}
   3114
   3115static int __f2fs_commit_super(struct buffer_head *bh,
   3116			struct f2fs_super_block *super)
   3117{
   3118	lock_buffer(bh);
   3119	if (super)
   3120		memcpy(bh->b_data + F2FS_SUPER_OFFSET, super, sizeof(*super));
   3121	set_buffer_dirty(bh);
   3122	unlock_buffer(bh);
   3123
   3124	/* it's rare case, we can do fua all the time */
   3125	return __sync_dirty_buffer(bh, REQ_SYNC | REQ_PREFLUSH | REQ_FUA);
   3126}
   3127
   3128static inline bool sanity_check_area_boundary(struct f2fs_sb_info *sbi,
   3129					struct buffer_head *bh)
   3130{
   3131	struct f2fs_super_block *raw_super = (struct f2fs_super_block *)
   3132					(bh->b_data + F2FS_SUPER_OFFSET);
   3133	struct super_block *sb = sbi->sb;
   3134	u32 segment0_blkaddr = le32_to_cpu(raw_super->segment0_blkaddr);
   3135	u32 cp_blkaddr = le32_to_cpu(raw_super->cp_blkaddr);
   3136	u32 sit_blkaddr = le32_to_cpu(raw_super->sit_blkaddr);
   3137	u32 nat_blkaddr = le32_to_cpu(raw_super->nat_blkaddr);
   3138	u32 ssa_blkaddr = le32_to_cpu(raw_super->ssa_blkaddr);
   3139	u32 main_blkaddr = le32_to_cpu(raw_super->main_blkaddr);
   3140	u32 segment_count_ckpt = le32_to_cpu(raw_super->segment_count_ckpt);
   3141	u32 segment_count_sit = le32_to_cpu(raw_super->segment_count_sit);
   3142	u32 segment_count_nat = le32_to_cpu(raw_super->segment_count_nat);
   3143	u32 segment_count_ssa = le32_to_cpu(raw_super->segment_count_ssa);
   3144	u32 segment_count_main = le32_to_cpu(raw_super->segment_count_main);
   3145	u32 segment_count = le32_to_cpu(raw_super->segment_count);
   3146	u32 log_blocks_per_seg = le32_to_cpu(raw_super->log_blocks_per_seg);
   3147	u64 main_end_blkaddr = main_blkaddr +
   3148				(segment_count_main << log_blocks_per_seg);
   3149	u64 seg_end_blkaddr = segment0_blkaddr +
   3150				(segment_count << log_blocks_per_seg);
   3151
   3152	if (segment0_blkaddr != cp_blkaddr) {
   3153		f2fs_info(sbi, "Mismatch start address, segment0(%u) cp_blkaddr(%u)",
   3154			  segment0_blkaddr, cp_blkaddr);
   3155		return true;
   3156	}
   3157
   3158	if (cp_blkaddr + (segment_count_ckpt << log_blocks_per_seg) !=
   3159							sit_blkaddr) {
   3160		f2fs_info(sbi, "Wrong CP boundary, start(%u) end(%u) blocks(%u)",
   3161			  cp_blkaddr, sit_blkaddr,
   3162			  segment_count_ckpt << log_blocks_per_seg);
   3163		return true;
   3164	}
   3165
   3166	if (sit_blkaddr + (segment_count_sit << log_blocks_per_seg) !=
   3167							nat_blkaddr) {
   3168		f2fs_info(sbi, "Wrong SIT boundary, start(%u) end(%u) blocks(%u)",
   3169			  sit_blkaddr, nat_blkaddr,
   3170			  segment_count_sit << log_blocks_per_seg);
   3171		return true;
   3172	}
   3173
   3174	if (nat_blkaddr + (segment_count_nat << log_blocks_per_seg) !=
   3175							ssa_blkaddr) {
   3176		f2fs_info(sbi, "Wrong NAT boundary, start(%u) end(%u) blocks(%u)",
   3177			  nat_blkaddr, ssa_blkaddr,
   3178			  segment_count_nat << log_blocks_per_seg);
   3179		return true;
   3180	}
   3181
   3182	if (ssa_blkaddr + (segment_count_ssa << log_blocks_per_seg) !=
   3183							main_blkaddr) {
   3184		f2fs_info(sbi, "Wrong SSA boundary, start(%u) end(%u) blocks(%u)",
   3185			  ssa_blkaddr, main_blkaddr,
   3186			  segment_count_ssa << log_blocks_per_seg);
   3187		return true;
   3188	}
   3189
   3190	if (main_end_blkaddr > seg_end_blkaddr) {
   3191		f2fs_info(sbi, "Wrong MAIN_AREA boundary, start(%u) end(%llu) block(%u)",
   3192			  main_blkaddr, seg_end_blkaddr,
   3193			  segment_count_main << log_blocks_per_seg);
   3194		return true;
   3195	} else if (main_end_blkaddr < seg_end_blkaddr) {
   3196		int err = 0;
   3197		char *res;
   3198
   3199		/* fix in-memory information all the time */
   3200		raw_super->segment_count = cpu_to_le32((main_end_blkaddr -
   3201				segment0_blkaddr) >> log_blocks_per_seg);
   3202
   3203		if (f2fs_readonly(sb) || bdev_read_only(sb->s_bdev)) {
   3204			set_sbi_flag(sbi, SBI_NEED_SB_WRITE);
   3205			res = "internally";
   3206		} else {
   3207			err = __f2fs_commit_super(bh, NULL);
   3208			res = err ? "failed" : "done";
   3209		}
   3210		f2fs_info(sbi, "Fix alignment : %s, start(%u) end(%llu) block(%u)",
   3211			  res, main_blkaddr, seg_end_blkaddr,
   3212			  segment_count_main << log_blocks_per_seg);
   3213		if (err)
   3214			return true;
   3215	}
   3216	return false;
   3217}
   3218
   3219static int sanity_check_raw_super(struct f2fs_sb_info *sbi,
   3220				struct buffer_head *bh)
   3221{
   3222	block_t segment_count, segs_per_sec, secs_per_zone, segment_count_main;
   3223	block_t total_sections, blocks_per_seg;
   3224	struct f2fs_super_block *raw_super = (struct f2fs_super_block *)
   3225					(bh->b_data + F2FS_SUPER_OFFSET);
   3226	size_t crc_offset = 0;
   3227	__u32 crc = 0;
   3228
   3229	if (le32_to_cpu(raw_super->magic) != F2FS_SUPER_MAGIC) {
   3230		f2fs_info(sbi, "Magic Mismatch, valid(0x%x) - read(0x%x)",
   3231			  F2FS_SUPER_MAGIC, le32_to_cpu(raw_super->magic));
   3232		return -EINVAL;
   3233	}
   3234
   3235	/* Check checksum_offset and crc in superblock */
   3236	if (__F2FS_HAS_FEATURE(raw_super, F2FS_FEATURE_SB_CHKSUM)) {
   3237		crc_offset = le32_to_cpu(raw_super->checksum_offset);
   3238		if (crc_offset !=
   3239			offsetof(struct f2fs_super_block, crc)) {
   3240			f2fs_info(sbi, "Invalid SB checksum offset: %zu",
   3241				  crc_offset);
   3242			return -EFSCORRUPTED;
   3243		}
   3244		crc = le32_to_cpu(raw_super->crc);
   3245		if (!f2fs_crc_valid(sbi, crc, raw_super, crc_offset)) {
   3246			f2fs_info(sbi, "Invalid SB checksum value: %u", crc);
   3247			return -EFSCORRUPTED;
   3248		}
   3249	}
   3250
   3251	/* Currently, support only 4KB block size */
   3252	if (le32_to_cpu(raw_super->log_blocksize) != F2FS_BLKSIZE_BITS) {
   3253		f2fs_info(sbi, "Invalid log_blocksize (%u), supports only %u",
   3254			  le32_to_cpu(raw_super->log_blocksize),
   3255			  F2FS_BLKSIZE_BITS);
   3256		return -EFSCORRUPTED;
   3257	}
   3258
   3259	/* check log blocks per segment */
   3260	if (le32_to_cpu(raw_super->log_blocks_per_seg) != 9) {
   3261		f2fs_info(sbi, "Invalid log blocks per segment (%u)",
   3262			  le32_to_cpu(raw_super->log_blocks_per_seg));
   3263		return -EFSCORRUPTED;
   3264	}
   3265
   3266	/* Currently, support 512/1024/2048/4096 bytes sector size */
   3267	if (le32_to_cpu(raw_super->log_sectorsize) >
   3268				F2FS_MAX_LOG_SECTOR_SIZE ||
   3269		le32_to_cpu(raw_super->log_sectorsize) <
   3270				F2FS_MIN_LOG_SECTOR_SIZE) {
   3271		f2fs_info(sbi, "Invalid log sectorsize (%u)",
   3272			  le32_to_cpu(raw_super->log_sectorsize));
   3273		return -EFSCORRUPTED;
   3274	}
   3275	if (le32_to_cpu(raw_super->log_sectors_per_block) +
   3276		le32_to_cpu(raw_super->log_sectorsize) !=
   3277			F2FS_MAX_LOG_SECTOR_SIZE) {
   3278		f2fs_info(sbi, "Invalid log sectors per block(%u) log sectorsize(%u)",
   3279			  le32_to_cpu(raw_super->log_sectors_per_block),
   3280			  le32_to_cpu(raw_super->log_sectorsize));
   3281		return -EFSCORRUPTED;
   3282	}
   3283
   3284	segment_count = le32_to_cpu(raw_super->segment_count);
   3285	segment_count_main = le32_to_cpu(raw_super->segment_count_main);
   3286	segs_per_sec = le32_to_cpu(raw_super->segs_per_sec);
   3287	secs_per_zone = le32_to_cpu(raw_super->secs_per_zone);
   3288	total_sections = le32_to_cpu(raw_super->section_count);
   3289
   3290	/* blocks_per_seg should be 512, given the above check */
   3291	blocks_per_seg = 1 << le32_to_cpu(raw_super->log_blocks_per_seg);
   3292
   3293	if (segment_count > F2FS_MAX_SEGMENT ||
   3294				segment_count < F2FS_MIN_SEGMENTS) {
   3295		f2fs_info(sbi, "Invalid segment count (%u)", segment_count);
   3296		return -EFSCORRUPTED;
   3297	}
   3298
   3299	if (total_sections > segment_count_main || total_sections < 1 ||
   3300			segs_per_sec > segment_count || !segs_per_sec) {
   3301		f2fs_info(sbi, "Invalid segment/section count (%u, %u x %u)",
   3302			  segment_count, total_sections, segs_per_sec);
   3303		return -EFSCORRUPTED;
   3304	}
   3305
   3306	if (segment_count_main != total_sections * segs_per_sec) {
   3307		f2fs_info(sbi, "Invalid segment/section count (%u != %u * %u)",
   3308			  segment_count_main, total_sections, segs_per_sec);
   3309		return -EFSCORRUPTED;
   3310	}
   3311
   3312	if ((segment_count / segs_per_sec) < total_sections) {
   3313		f2fs_info(sbi, "Small segment_count (%u < %u * %u)",
   3314			  segment_count, segs_per_sec, total_sections);
   3315		return -EFSCORRUPTED;
   3316	}
   3317
   3318	if (segment_count > (le64_to_cpu(raw_super->block_count) >> 9)) {
   3319		f2fs_info(sbi, "Wrong segment_count / block_count (%u > %llu)",
   3320			  segment_count, le64_to_cpu(raw_super->block_count));
   3321		return -EFSCORRUPTED;
   3322	}
   3323
   3324	if (RDEV(0).path[0]) {
   3325		block_t dev_seg_count = le32_to_cpu(RDEV(0).total_segments);
   3326		int i = 1;
   3327
   3328		while (i < MAX_DEVICES && RDEV(i).path[0]) {
   3329			dev_seg_count += le32_to_cpu(RDEV(i).total_segments);
   3330			i++;
   3331		}
   3332		if (segment_count != dev_seg_count) {
   3333			f2fs_info(sbi, "Segment count (%u) mismatch with total segments from devices (%u)",
   3334					segment_count, dev_seg_count);
   3335			return -EFSCORRUPTED;
   3336		}
   3337	} else {
   3338		if (__F2FS_HAS_FEATURE(raw_super, F2FS_FEATURE_BLKZONED) &&
   3339					!bdev_is_zoned(sbi->sb->s_bdev)) {
   3340			f2fs_info(sbi, "Zoned block device path is missing");
   3341			return -EFSCORRUPTED;
   3342		}
   3343	}
   3344
   3345	if (secs_per_zone > total_sections || !secs_per_zone) {
   3346		f2fs_info(sbi, "Wrong secs_per_zone / total_sections (%u, %u)",
   3347			  secs_per_zone, total_sections);
   3348		return -EFSCORRUPTED;
   3349	}
   3350	if (le32_to_cpu(raw_super->extension_count) > F2FS_MAX_EXTENSION ||
   3351			raw_super->hot_ext_count > F2FS_MAX_EXTENSION ||
   3352			(le32_to_cpu(raw_super->extension_count) +
   3353			raw_super->hot_ext_count) > F2FS_MAX_EXTENSION) {
   3354		f2fs_info(sbi, "Corrupted extension count (%u + %u > %u)",
   3355			  le32_to_cpu(raw_super->extension_count),
   3356			  raw_super->hot_ext_count,
   3357			  F2FS_MAX_EXTENSION);
   3358		return -EFSCORRUPTED;
   3359	}
   3360
   3361	if (le32_to_cpu(raw_super->cp_payload) >=
   3362				(blocks_per_seg - F2FS_CP_PACKS -
   3363				NR_CURSEG_PERSIST_TYPE)) {
   3364		f2fs_info(sbi, "Insane cp_payload (%u >= %u)",
   3365			  le32_to_cpu(raw_super->cp_payload),
   3366			  blocks_per_seg - F2FS_CP_PACKS -
   3367			  NR_CURSEG_PERSIST_TYPE);
   3368		return -EFSCORRUPTED;
   3369	}
   3370
   3371	/* check reserved ino info */
   3372	if (le32_to_cpu(raw_super->node_ino) != 1 ||
   3373		le32_to_cpu(raw_super->meta_ino) != 2 ||
   3374		le32_to_cpu(raw_super->root_ino) != 3) {
   3375		f2fs_info(sbi, "Invalid Fs Meta Ino: node(%u) meta(%u) root(%u)",
   3376			  le32_to_cpu(raw_super->node_ino),
   3377			  le32_to_cpu(raw_super->meta_ino),
   3378			  le32_to_cpu(raw_super->root_ino));
   3379		return -EFSCORRUPTED;
   3380	}
   3381
   3382	/* check CP/SIT/NAT/SSA/MAIN_AREA area boundary */
   3383	if (sanity_check_area_boundary(sbi, bh))
   3384		return -EFSCORRUPTED;
   3385
   3386	return 0;
   3387}
   3388
   3389int f2fs_sanity_check_ckpt(struct f2fs_sb_info *sbi)
   3390{
   3391	unsigned int total, fsmeta;
   3392	struct f2fs_super_block *raw_super = F2FS_RAW_SUPER(sbi);
   3393	struct f2fs_checkpoint *ckpt = F2FS_CKPT(sbi);
   3394	unsigned int ovp_segments, reserved_segments;
   3395	unsigned int main_segs, blocks_per_seg;
   3396	unsigned int sit_segs, nat_segs;
   3397	unsigned int sit_bitmap_size, nat_bitmap_size;
   3398	unsigned int log_blocks_per_seg;
   3399	unsigned int segment_count_main;
   3400	unsigned int cp_pack_start_sum, cp_payload;
   3401	block_t user_block_count, valid_user_blocks;
   3402	block_t avail_node_count, valid_node_count;
   3403	unsigned int nat_blocks, nat_bits_bytes, nat_bits_blocks;
   3404	int i, j;
   3405
   3406	total = le32_to_cpu(raw_super->segment_count);
   3407	fsmeta = le32_to_cpu(raw_super->segment_count_ckpt);
   3408	sit_segs = le32_to_cpu(raw_super->segment_count_sit);
   3409	fsmeta += sit_segs;
   3410	nat_segs = le32_to_cpu(raw_super->segment_count_nat);
   3411	fsmeta += nat_segs;
   3412	fsmeta += le32_to_cpu(ckpt->rsvd_segment_count);
   3413	fsmeta += le32_to_cpu(raw_super->segment_count_ssa);
   3414
   3415	if (unlikely(fsmeta >= total))
   3416		return 1;
   3417
   3418	ovp_segments = le32_to_cpu(ckpt->overprov_segment_count);
   3419	reserved_segments = le32_to_cpu(ckpt->rsvd_segment_count);
   3420
   3421	if (!f2fs_sb_has_readonly(sbi) &&
   3422			unlikely(fsmeta < F2FS_MIN_META_SEGMENTS ||
   3423			ovp_segments == 0 || reserved_segments == 0)) {
   3424		f2fs_err(sbi, "Wrong layout: check mkfs.f2fs version");
   3425		return 1;
   3426	}
   3427	user_block_count = le64_to_cpu(ckpt->user_block_count);
   3428	segment_count_main = le32_to_cpu(raw_super->segment_count_main) +
   3429			(f2fs_sb_has_readonly(sbi) ? 1 : 0);
   3430	log_blocks_per_seg = le32_to_cpu(raw_super->log_blocks_per_seg);
   3431	if (!user_block_count || user_block_count >=
   3432			segment_count_main << log_blocks_per_seg) {
   3433		f2fs_err(sbi, "Wrong user_block_count: %u",
   3434			 user_block_count);
   3435		return 1;
   3436	}
   3437
   3438	valid_user_blocks = le64_to_cpu(ckpt->valid_block_count);
   3439	if (valid_user_blocks > user_block_count) {
   3440		f2fs_err(sbi, "Wrong valid_user_blocks: %u, user_block_count: %u",
   3441			 valid_user_blocks, user_block_count);
   3442		return 1;
   3443	}
   3444
   3445	valid_node_count = le32_to_cpu(ckpt->valid_node_count);
   3446	avail_node_count = sbi->total_node_count - F2FS_RESERVED_NODE_NUM;
   3447	if (valid_node_count > avail_node_count) {
   3448		f2fs_err(sbi, "Wrong valid_node_count: %u, avail_node_count: %u",
   3449			 valid_node_count, avail_node_count);
   3450		return 1;
   3451	}
   3452
   3453	main_segs = le32_to_cpu(raw_super->segment_count_main);
   3454	blocks_per_seg = sbi->blocks_per_seg;
   3455
   3456	for (i = 0; i < NR_CURSEG_NODE_TYPE; i++) {
   3457		if (le32_to_cpu(ckpt->cur_node_segno[i]) >= main_segs ||
   3458			le16_to_cpu(ckpt->cur_node_blkoff[i]) >= blocks_per_seg)
   3459			return 1;
   3460
   3461		if (f2fs_sb_has_readonly(sbi))
   3462			goto check_data;
   3463
   3464		for (j = i + 1; j < NR_CURSEG_NODE_TYPE; j++) {
   3465			if (le32_to_cpu(ckpt->cur_node_segno[i]) ==
   3466				le32_to_cpu(ckpt->cur_node_segno[j])) {
   3467				f2fs_err(sbi, "Node segment (%u, %u) has the same segno: %u",
   3468					 i, j,
   3469					 le32_to_cpu(ckpt->cur_node_segno[i]));
   3470				return 1;
   3471			}
   3472		}
   3473	}
   3474check_data:
   3475	for (i = 0; i < NR_CURSEG_DATA_TYPE; i++) {
   3476		if (le32_to_cpu(ckpt->cur_data_segno[i]) >= main_segs ||
   3477			le16_to_cpu(ckpt->cur_data_blkoff[i]) >= blocks_per_seg)
   3478			return 1;
   3479
   3480		if (f2fs_sb_has_readonly(sbi))
   3481			goto skip_cross;
   3482
   3483		for (j = i + 1; j < NR_CURSEG_DATA_TYPE; j++) {
   3484			if (le32_to_cpu(ckpt->cur_data_segno[i]) ==
   3485				le32_to_cpu(ckpt->cur_data_segno[j])) {
   3486				f2fs_err(sbi, "Data segment (%u, %u) has the same segno: %u",
   3487					 i, j,
   3488					 le32_to_cpu(ckpt->cur_data_segno[i]));
   3489				return 1;
   3490			}
   3491		}
   3492	}
   3493	for (i = 0; i < NR_CURSEG_NODE_TYPE; i++) {
   3494		for (j = 0; j < NR_CURSEG_DATA_TYPE; j++) {
   3495			if (le32_to_cpu(ckpt->cur_node_segno[i]) ==
   3496				le32_to_cpu(ckpt->cur_data_segno[j])) {
   3497				f2fs_err(sbi, "Node segment (%u) and Data segment (%u) has the same segno: %u",
   3498					 i, j,
   3499					 le32_to_cpu(ckpt->cur_node_segno[i]));
   3500				return 1;
   3501			}
   3502		}
   3503	}
   3504skip_cross:
   3505	sit_bitmap_size = le32_to_cpu(ckpt->sit_ver_bitmap_bytesize);
   3506	nat_bitmap_size = le32_to_cpu(ckpt->nat_ver_bitmap_bytesize);
   3507
   3508	if (sit_bitmap_size != ((sit_segs / 2) << log_blocks_per_seg) / 8 ||
   3509		nat_bitmap_size != ((nat_segs / 2) << log_blocks_per_seg) / 8) {
   3510		f2fs_err(sbi, "Wrong bitmap size: sit: %u, nat:%u",
   3511			 sit_bitmap_size, nat_bitmap_size);
   3512		return 1;
   3513	}
   3514
   3515	cp_pack_start_sum = __start_sum_addr(sbi);
   3516	cp_payload = __cp_payload(sbi);
   3517	if (cp_pack_start_sum < cp_payload + 1 ||
   3518		cp_pack_start_sum > blocks_per_seg - 1 -
   3519			NR_CURSEG_PERSIST_TYPE) {
   3520		f2fs_err(sbi, "Wrong cp_pack_start_sum: %u",
   3521			 cp_pack_start_sum);
   3522		return 1;
   3523	}
   3524
   3525	if (__is_set_ckpt_flags(ckpt, CP_LARGE_NAT_BITMAP_FLAG) &&
   3526		le32_to_cpu(ckpt->checksum_offset) != CP_MIN_CHKSUM_OFFSET) {
   3527		f2fs_warn(sbi, "using deprecated layout of large_nat_bitmap, "
   3528			  "please run fsck v1.13.0 or higher to repair, chksum_offset: %u, "
   3529			  "fixed with patch: \"f2fs-tools: relocate chksum_offset for large_nat_bitmap feature\"",
   3530			  le32_to_cpu(ckpt->checksum_offset));
   3531		return 1;
   3532	}
   3533
   3534	nat_blocks = nat_segs << log_blocks_per_seg;
   3535	nat_bits_bytes = nat_blocks / BITS_PER_BYTE;
   3536	nat_bits_blocks = F2FS_BLK_ALIGN((nat_bits_bytes << 1) + 8);
   3537	if (__is_set_ckpt_flags(ckpt, CP_NAT_BITS_FLAG) &&
   3538		(cp_payload + F2FS_CP_PACKS +
   3539		NR_CURSEG_PERSIST_TYPE + nat_bits_blocks >= blocks_per_seg)) {
   3540		f2fs_warn(sbi, "Insane cp_payload: %u, nat_bits_blocks: %u)",
   3541			  cp_payload, nat_bits_blocks);
   3542		return 1;
   3543	}
   3544
   3545	if (unlikely(f2fs_cp_error(sbi))) {
   3546		f2fs_err(sbi, "A bug case: need to run fsck");
   3547		return 1;
   3548	}
   3549	return 0;
   3550}
   3551
   3552static void init_sb_info(struct f2fs_sb_info *sbi)
   3553{
   3554	struct f2fs_super_block *raw_super = sbi->raw_super;
   3555	int i;
   3556
   3557	sbi->log_sectors_per_block =
   3558		le32_to_cpu(raw_super->log_sectors_per_block);
   3559	sbi->log_blocksize = le32_to_cpu(raw_super->log_blocksize);
   3560	sbi->blocksize = 1 << sbi->log_blocksize;
   3561	sbi->log_blocks_per_seg = le32_to_cpu(raw_super->log_blocks_per_seg);
   3562	sbi->blocks_per_seg = 1 << sbi->log_blocks_per_seg;
   3563	sbi->segs_per_sec = le32_to_cpu(raw_super->segs_per_sec);
   3564	sbi->secs_per_zone = le32_to_cpu(raw_super->secs_per_zone);
   3565	sbi->total_sections = le32_to_cpu(raw_super->section_count);
   3566	sbi->total_node_count =
   3567		(le32_to_cpu(raw_super->segment_count_nat) / 2)
   3568			* sbi->blocks_per_seg * NAT_ENTRY_PER_BLOCK;
   3569	F2FS_ROOT_INO(sbi) = le32_to_cpu(raw_super->root_ino);
   3570	F2FS_NODE_INO(sbi) = le32_to_cpu(raw_super->node_ino);
   3571	F2FS_META_INO(sbi) = le32_to_cpu(raw_super->meta_ino);
   3572	sbi->cur_victim_sec = NULL_SECNO;
   3573	sbi->gc_mode = GC_NORMAL;
   3574	sbi->next_victim_seg[BG_GC] = NULL_SEGNO;
   3575	sbi->next_victim_seg[FG_GC] = NULL_SEGNO;
   3576	sbi->max_victim_search = DEF_MAX_VICTIM_SEARCH;
   3577	sbi->migration_granularity = sbi->segs_per_sec;
   3578	sbi->seq_file_ra_mul = MIN_RA_MUL;
   3579	sbi->max_fragment_chunk = DEF_FRAGMENT_SIZE;
   3580	sbi->max_fragment_hole = DEF_FRAGMENT_SIZE;
   3581	spin_lock_init(&sbi->gc_urgent_high_lock);
   3582
   3583	sbi->dir_level = DEF_DIR_LEVEL;
   3584	sbi->interval_time[CP_TIME] = DEF_CP_INTERVAL;
   3585	sbi->interval_time[REQ_TIME] = DEF_IDLE_INTERVAL;
   3586	sbi->interval_time[DISCARD_TIME] = DEF_IDLE_INTERVAL;
   3587	sbi->interval_time[GC_TIME] = DEF_IDLE_INTERVAL;
   3588	sbi->interval_time[DISABLE_TIME] = DEF_DISABLE_INTERVAL;
   3589	sbi->interval_time[UMOUNT_DISCARD_TIMEOUT] =
   3590				DEF_UMOUNT_DISCARD_TIMEOUT;
   3591	clear_sbi_flag(sbi, SBI_NEED_FSCK);
   3592
   3593	for (i = 0; i < NR_COUNT_TYPE; i++)
   3594		atomic_set(&sbi->nr_pages[i], 0);
   3595
   3596	for (i = 0; i < META; i++)
   3597		atomic_set(&sbi->wb_sync_req[i], 0);
   3598
   3599	INIT_LIST_HEAD(&sbi->s_list);
   3600	mutex_init(&sbi->umount_mutex);
   3601	init_f2fs_rwsem(&sbi->io_order_lock);
   3602	spin_lock_init(&sbi->cp_lock);
   3603
   3604	sbi->dirty_device = 0;
   3605	spin_lock_init(&sbi->dev_lock);
   3606
   3607	init_f2fs_rwsem(&sbi->sb_lock);
   3608	init_f2fs_rwsem(&sbi->pin_sem);
   3609}
   3610
   3611static int init_percpu_info(struct f2fs_sb_info *sbi)
   3612{
   3613	int err;
   3614
   3615	err = percpu_counter_init(&sbi->alloc_valid_block_count, 0, GFP_KERNEL);
   3616	if (err)
   3617		return err;
   3618
   3619	err = percpu_counter_init(&sbi->rf_node_block_count, 0, GFP_KERNEL);
   3620	if (err)
   3621		goto err_valid_block;
   3622
   3623	err = percpu_counter_init(&sbi->total_valid_inode_count, 0,
   3624								GFP_KERNEL);
   3625	if (err)
   3626		goto err_node_block;
   3627	return 0;
   3628
   3629err_node_block:
   3630	percpu_counter_destroy(&sbi->rf_node_block_count);
   3631err_valid_block:
   3632	percpu_counter_destroy(&sbi->alloc_valid_block_count);
   3633	return err;
   3634}
   3635
   3636#ifdef CONFIG_BLK_DEV_ZONED
   3637
   3638struct f2fs_report_zones_args {
   3639	struct f2fs_dev_info *dev;
   3640	bool zone_cap_mismatch;
   3641};
   3642
   3643static int f2fs_report_zone_cb(struct blk_zone *zone, unsigned int idx,
   3644			      void *data)
   3645{
   3646	struct f2fs_report_zones_args *rz_args = data;
   3647
   3648	if (zone->type == BLK_ZONE_TYPE_CONVENTIONAL)
   3649		return 0;
   3650
   3651	set_bit(idx, rz_args->dev->blkz_seq);
   3652	rz_args->dev->zone_capacity_blocks[idx] = zone->capacity >>
   3653						F2FS_LOG_SECTORS_PER_BLOCK;
   3654	if (zone->len != zone->capacity && !rz_args->zone_cap_mismatch)
   3655		rz_args->zone_cap_mismatch = true;
   3656
   3657	return 0;
   3658}
   3659
   3660static int init_blkz_info(struct f2fs_sb_info *sbi, int devi)
   3661{
   3662	struct block_device *bdev = FDEV(devi).bdev;
   3663	sector_t nr_sectors = bdev_nr_sectors(bdev);
   3664	struct f2fs_report_zones_args rep_zone_arg;
   3665	u64 zone_sectors;
   3666	int ret;
   3667
   3668	if (!f2fs_sb_has_blkzoned(sbi))
   3669		return 0;
   3670
   3671	zone_sectors = bdev_zone_sectors(bdev);
   3672	if (!is_power_of_2(zone_sectors)) {
   3673		f2fs_err(sbi, "F2FS does not support non power of 2 zone sizes\n");
   3674		return -EINVAL;
   3675	}
   3676
   3677	if (sbi->blocks_per_blkz && sbi->blocks_per_blkz !=
   3678				SECTOR_TO_BLOCK(zone_sectors))
   3679		return -EINVAL;
   3680	sbi->blocks_per_blkz = SECTOR_TO_BLOCK(zone_sectors);
   3681	if (sbi->log_blocks_per_blkz && sbi->log_blocks_per_blkz !=
   3682				__ilog2_u32(sbi->blocks_per_blkz))
   3683		return -EINVAL;
   3684	sbi->log_blocks_per_blkz = __ilog2_u32(sbi->blocks_per_blkz);
   3685	FDEV(devi).nr_blkz = SECTOR_TO_BLOCK(nr_sectors) >>
   3686					sbi->log_blocks_per_blkz;
   3687	if (nr_sectors & (zone_sectors - 1))
   3688		FDEV(devi).nr_blkz++;
   3689
   3690	FDEV(devi).blkz_seq = f2fs_kvzalloc(sbi,
   3691					BITS_TO_LONGS(FDEV(devi).nr_blkz)
   3692					* sizeof(unsigned long),
   3693					GFP_KERNEL);
   3694	if (!FDEV(devi).blkz_seq)
   3695		return -ENOMEM;
   3696
   3697	/* Get block zones type and zone-capacity */
   3698	FDEV(devi).zone_capacity_blocks = f2fs_kzalloc(sbi,
   3699					FDEV(devi).nr_blkz * sizeof(block_t),
   3700					GFP_KERNEL);
   3701	if (!FDEV(devi).zone_capacity_blocks)
   3702		return -ENOMEM;
   3703
   3704	rep_zone_arg.dev = &FDEV(devi);
   3705	rep_zone_arg.zone_cap_mismatch = false;
   3706
   3707	ret = blkdev_report_zones(bdev, 0, BLK_ALL_ZONES, f2fs_report_zone_cb,
   3708				  &rep_zone_arg);
   3709	if (ret < 0)
   3710		return ret;
   3711
   3712	if (!rep_zone_arg.zone_cap_mismatch) {
   3713		kfree(FDEV(devi).zone_capacity_blocks);
   3714		FDEV(devi).zone_capacity_blocks = NULL;
   3715	}
   3716
   3717	return 0;
   3718}
   3719#endif
   3720
   3721/*
   3722 * Read f2fs raw super block.
   3723 * Because we have two copies of super block, so read both of them
   3724 * to get the first valid one. If any one of them is broken, we pass
   3725 * them recovery flag back to the caller.
   3726 */
   3727static int read_raw_super_block(struct f2fs_sb_info *sbi,
   3728			struct f2fs_super_block **raw_super,
   3729			int *valid_super_block, int *recovery)
   3730{
   3731	struct super_block *sb = sbi->sb;
   3732	int block;
   3733	struct buffer_head *bh;
   3734	struct f2fs_super_block *super;
   3735	int err = 0;
   3736
   3737	super = kzalloc(sizeof(struct f2fs_super_block), GFP_KERNEL);
   3738	if (!super)
   3739		return -ENOMEM;
   3740
   3741	for (block = 0; block < 2; block++) {
   3742		bh = sb_bread(sb, block);
   3743		if (!bh) {
   3744			f2fs_err(sbi, "Unable to read %dth superblock",
   3745				 block + 1);
   3746			err = -EIO;
   3747			*recovery = 1;
   3748			continue;
   3749		}
   3750
   3751		/* sanity checking of raw super */
   3752		err = sanity_check_raw_super(sbi, bh);
   3753		if (err) {
   3754			f2fs_err(sbi, "Can't find valid F2FS filesystem in %dth superblock",
   3755				 block + 1);
   3756			brelse(bh);
   3757			*recovery = 1;
   3758			continue;
   3759		}
   3760
   3761		if (!*raw_super) {
   3762			memcpy(super, bh->b_data + F2FS_SUPER_OFFSET,
   3763							sizeof(*super));
   3764			*valid_super_block = block;
   3765			*raw_super = super;
   3766		}
   3767		brelse(bh);
   3768	}
   3769
   3770	/* No valid superblock */
   3771	if (!*raw_super)
   3772		kfree(super);
   3773	else
   3774		err = 0;
   3775
   3776	return err;
   3777}
   3778
   3779int f2fs_commit_super(struct f2fs_sb_info *sbi, bool recover)
   3780{
   3781	struct buffer_head *bh;
   3782	__u32 crc = 0;
   3783	int err;
   3784
   3785	if ((recover && f2fs_readonly(sbi->sb)) ||
   3786				bdev_read_only(sbi->sb->s_bdev)) {
   3787		set_sbi_flag(sbi, SBI_NEED_SB_WRITE);
   3788		return -EROFS;
   3789	}
   3790
   3791	/* we should update superblock crc here */
   3792	if (!recover && f2fs_sb_has_sb_chksum(sbi)) {
   3793		crc = f2fs_crc32(sbi, F2FS_RAW_SUPER(sbi),
   3794				offsetof(struct f2fs_super_block, crc));
   3795		F2FS_RAW_SUPER(sbi)->crc = cpu_to_le32(crc);
   3796	}
   3797
   3798	/* write back-up superblock first */
   3799	bh = sb_bread(sbi->sb, sbi->valid_super_block ? 0 : 1);
   3800	if (!bh)
   3801		return -EIO;
   3802	err = __f2fs_commit_super(bh, F2FS_RAW_SUPER(sbi));
   3803	brelse(bh);
   3804
   3805	/* if we are in recovery path, skip writing valid superblock */
   3806	if (recover || err)
   3807		return err;
   3808
   3809	/* write current valid superblock */
   3810	bh = sb_bread(sbi->sb, sbi->valid_super_block);
   3811	if (!bh)
   3812		return -EIO;
   3813	err = __f2fs_commit_super(bh, F2FS_RAW_SUPER(sbi));
   3814	brelse(bh);
   3815	return err;
   3816}
   3817
   3818static int f2fs_scan_devices(struct f2fs_sb_info *sbi)
   3819{
   3820	struct f2fs_super_block *raw_super = F2FS_RAW_SUPER(sbi);
   3821	unsigned int max_devices = MAX_DEVICES;
   3822	unsigned int logical_blksize;
   3823	int i;
   3824
   3825	/* Initialize single device information */
   3826	if (!RDEV(0).path[0]) {
   3827		if (!bdev_is_zoned(sbi->sb->s_bdev))
   3828			return 0;
   3829		max_devices = 1;
   3830	}
   3831
   3832	/*
   3833	 * Initialize multiple devices information, or single
   3834	 * zoned block device information.
   3835	 */
   3836	sbi->devs = f2fs_kzalloc(sbi,
   3837				 array_size(max_devices,
   3838					    sizeof(struct f2fs_dev_info)),
   3839				 GFP_KERNEL);
   3840	if (!sbi->devs)
   3841		return -ENOMEM;
   3842
   3843	logical_blksize = bdev_logical_block_size(sbi->sb->s_bdev);
   3844	sbi->aligned_blksize = true;
   3845
   3846	for (i = 0; i < max_devices; i++) {
   3847
   3848		if (i > 0 && !RDEV(i).path[0])
   3849			break;
   3850
   3851		if (max_devices == 1) {
   3852			/* Single zoned block device mount */
   3853			FDEV(0).bdev =
   3854				blkdev_get_by_dev(sbi->sb->s_bdev->bd_dev,
   3855					sbi->sb->s_mode, sbi->sb->s_type);
   3856		} else {
   3857			/* Multi-device mount */
   3858			memcpy(FDEV(i).path, RDEV(i).path, MAX_PATH_LEN);
   3859			FDEV(i).total_segments =
   3860				le32_to_cpu(RDEV(i).total_segments);
   3861			if (i == 0) {
   3862				FDEV(i).start_blk = 0;
   3863				FDEV(i).end_blk = FDEV(i).start_blk +
   3864				    (FDEV(i).total_segments <<
   3865				    sbi->log_blocks_per_seg) - 1 +
   3866				    le32_to_cpu(raw_super->segment0_blkaddr);
   3867			} else {
   3868				FDEV(i).start_blk = FDEV(i - 1).end_blk + 1;
   3869				FDEV(i).end_blk = FDEV(i).start_blk +
   3870					(FDEV(i).total_segments <<
   3871					sbi->log_blocks_per_seg) - 1;
   3872			}
   3873			FDEV(i).bdev = blkdev_get_by_path(FDEV(i).path,
   3874					sbi->sb->s_mode, sbi->sb->s_type);
   3875		}
   3876		if (IS_ERR(FDEV(i).bdev))
   3877			return PTR_ERR(FDEV(i).bdev);
   3878
   3879		/* to release errored devices */
   3880		sbi->s_ndevs = i + 1;
   3881
   3882		if (logical_blksize != bdev_logical_block_size(FDEV(i).bdev))
   3883			sbi->aligned_blksize = false;
   3884
   3885#ifdef CONFIG_BLK_DEV_ZONED
   3886		if (bdev_zoned_model(FDEV(i).bdev) == BLK_ZONED_HM &&
   3887				!f2fs_sb_has_blkzoned(sbi)) {
   3888			f2fs_err(sbi, "Zoned block device feature not enabled");
   3889			return -EINVAL;
   3890		}
   3891		if (bdev_zoned_model(FDEV(i).bdev) != BLK_ZONED_NONE) {
   3892			if (init_blkz_info(sbi, i)) {
   3893				f2fs_err(sbi, "Failed to initialize F2FS blkzone information");
   3894				return -EINVAL;
   3895			}
   3896			if (max_devices == 1)
   3897				break;
   3898			f2fs_info(sbi, "Mount Device [%2d]: %20s, %8u, %8x - %8x (zone: %s)",
   3899				  i, FDEV(i).path,
   3900				  FDEV(i).total_segments,
   3901				  FDEV(i).start_blk, FDEV(i).end_blk,
   3902				  bdev_zoned_model(FDEV(i).bdev) == BLK_ZONED_HA ?
   3903				  "Host-aware" : "Host-managed");
   3904			continue;
   3905		}
   3906#endif
   3907		f2fs_info(sbi, "Mount Device [%2d]: %20s, %8u, %8x - %8x",
   3908			  i, FDEV(i).path,
   3909			  FDEV(i).total_segments,
   3910			  FDEV(i).start_blk, FDEV(i).end_blk);
   3911	}
   3912	f2fs_info(sbi,
   3913		  "IO Block Size: %8d KB", F2FS_IO_SIZE_KB(sbi));
   3914	return 0;
   3915}
   3916
   3917static int f2fs_setup_casefold(struct f2fs_sb_info *sbi)
   3918{
   3919#if IS_ENABLED(CONFIG_UNICODE)
   3920	if (f2fs_sb_has_casefold(sbi) && !sbi->sb->s_encoding) {
   3921		const struct f2fs_sb_encodings *encoding_info;
   3922		struct unicode_map *encoding;
   3923		__u16 encoding_flags;
   3924
   3925		encoding_info = f2fs_sb_read_encoding(sbi->raw_super);
   3926		if (!encoding_info) {
   3927			f2fs_err(sbi,
   3928				 "Encoding requested by superblock is unknown");
   3929			return -EINVAL;
   3930		}
   3931
   3932		encoding_flags = le16_to_cpu(sbi->raw_super->s_encoding_flags);
   3933		encoding = utf8_load(encoding_info->version);
   3934		if (IS_ERR(encoding)) {
   3935			f2fs_err(sbi,
   3936				 "can't mount with superblock charset: %s-%u.%u.%u "
   3937				 "not supported by the kernel. flags: 0x%x.",
   3938				 encoding_info->name,
   3939				 unicode_major(encoding_info->version),
   3940				 unicode_minor(encoding_info->version),
   3941				 unicode_rev(encoding_info->version),
   3942				 encoding_flags);
   3943			return PTR_ERR(encoding);
   3944		}
   3945		f2fs_info(sbi, "Using encoding defined by superblock: "
   3946			 "%s-%u.%u.%u with flags 0x%hx", encoding_info->name,
   3947			 unicode_major(encoding_info->version),
   3948			 unicode_minor(encoding_info->version),
   3949			 unicode_rev(encoding_info->version),
   3950			 encoding_flags);
   3951
   3952		sbi->sb->s_encoding = encoding;
   3953		sbi->sb->s_encoding_flags = encoding_flags;
   3954	}
   3955#else
   3956	if (f2fs_sb_has_casefold(sbi)) {
   3957		f2fs_err(sbi, "Filesystem with casefold feature cannot be mounted without CONFIG_UNICODE");
   3958		return -EINVAL;
   3959	}
   3960#endif
   3961	return 0;
   3962}
   3963
   3964static void f2fs_tuning_parameters(struct f2fs_sb_info *sbi)
   3965{
   3966	struct f2fs_sm_info *sm_i = SM_I(sbi);
   3967
   3968	/* adjust parameters according to the volume size */
   3969	if (sm_i->main_segments <= SMALL_VOLUME_SEGMENTS) {
   3970		F2FS_OPTION(sbi).alloc_mode = ALLOC_MODE_REUSE;
   3971		if (f2fs_block_unit_discard(sbi))
   3972			sm_i->dcc_info->discard_granularity = 1;
   3973		sm_i->ipu_policy = 1 << F2FS_IPU_FORCE |
   3974					1 << F2FS_IPU_HONOR_OPU_WRITE;
   3975	}
   3976
   3977	sbi->readdir_ra = 1;
   3978}
   3979
   3980static int f2fs_fill_super(struct super_block *sb, void *data, int silent)
   3981{
   3982	struct f2fs_sb_info *sbi;
   3983	struct f2fs_super_block *raw_super;
   3984	struct inode *root;
   3985	int err;
   3986	bool skip_recovery = false, need_fsck = false;
   3987	char *options = NULL;
   3988	int recovery, i, valid_super_block;
   3989	struct curseg_info *seg_i;
   3990	int retry_cnt = 1;
   3991
   3992try_onemore:
   3993	err = -EINVAL;
   3994	raw_super = NULL;
   3995	valid_super_block = -1;
   3996	recovery = 0;
   3997
   3998	/* allocate memory for f2fs-specific super block info */
   3999	sbi = kzalloc(sizeof(struct f2fs_sb_info), GFP_KERNEL);
   4000	if (!sbi)
   4001		return -ENOMEM;
   4002
   4003	sbi->sb = sb;
   4004
   4005	/* Load the checksum driver */
   4006	sbi->s_chksum_driver = crypto_alloc_shash("crc32", 0, 0);
   4007	if (IS_ERR(sbi->s_chksum_driver)) {
   4008		f2fs_err(sbi, "Cannot load crc32 driver.");
   4009		err = PTR_ERR(sbi->s_chksum_driver);
   4010		sbi->s_chksum_driver = NULL;
   4011		goto free_sbi;
   4012	}
   4013
   4014	/* set a block size */
   4015	if (unlikely(!sb_set_blocksize(sb, F2FS_BLKSIZE))) {
   4016		f2fs_err(sbi, "unable to set blocksize");
   4017		goto free_sbi;
   4018	}
   4019
   4020	err = read_raw_super_block(sbi, &raw_super, &valid_super_block,
   4021								&recovery);
   4022	if (err)
   4023		goto free_sbi;
   4024
   4025	sb->s_fs_info = sbi;
   4026	sbi->raw_super = raw_super;
   4027
   4028	/* precompute checksum seed for metadata */
   4029	if (f2fs_sb_has_inode_chksum(sbi))
   4030		sbi->s_chksum_seed = f2fs_chksum(sbi, ~0, raw_super->uuid,
   4031						sizeof(raw_super->uuid));
   4032
   4033	default_options(sbi);
   4034	/* parse mount options */
   4035	options = kstrdup((const char *)data, GFP_KERNEL);
   4036	if (data && !options) {
   4037		err = -ENOMEM;
   4038		goto free_sb_buf;
   4039	}
   4040
   4041	err = parse_options(sb, options, false);
   4042	if (err)
   4043		goto free_options;
   4044
   4045	sb->s_maxbytes = max_file_blocks(NULL) <<
   4046				le32_to_cpu(raw_super->log_blocksize);
   4047	sb->s_max_links = F2FS_LINK_MAX;
   4048
   4049	err = f2fs_setup_casefold(sbi);
   4050	if (err)
   4051		goto free_options;
   4052
   4053#ifdef CONFIG_QUOTA
   4054	sb->dq_op = &f2fs_quota_operations;
   4055	sb->s_qcop = &f2fs_quotactl_ops;
   4056	sb->s_quota_types = QTYPE_MASK_USR | QTYPE_MASK_GRP | QTYPE_MASK_PRJ;
   4057
   4058	if (f2fs_sb_has_quota_ino(sbi)) {
   4059		for (i = 0; i < MAXQUOTAS; i++) {
   4060			if (f2fs_qf_ino(sbi->sb, i))
   4061				sbi->nquota_files++;
   4062		}
   4063	}
   4064#endif
   4065
   4066	sb->s_op = &f2fs_sops;
   4067#ifdef CONFIG_FS_ENCRYPTION
   4068	sb->s_cop = &f2fs_cryptops;
   4069#endif
   4070#ifdef CONFIG_FS_VERITY
   4071	sb->s_vop = &f2fs_verityops;
   4072#endif
   4073	sb->s_xattr = f2fs_xattr_handlers;
   4074	sb->s_export_op = &f2fs_export_ops;
   4075	sb->s_magic = F2FS_SUPER_MAGIC;
   4076	sb->s_time_gran = 1;
   4077	sb->s_flags = (sb->s_flags & ~SB_POSIXACL) |
   4078		(test_opt(sbi, POSIX_ACL) ? SB_POSIXACL : 0);
   4079	memcpy(&sb->s_uuid, raw_super->uuid, sizeof(raw_super->uuid));
   4080	sb->s_iflags |= SB_I_CGROUPWB;
   4081
   4082	/* init f2fs-specific super block info */
   4083	sbi->valid_super_block = valid_super_block;
   4084	init_f2fs_rwsem(&sbi->gc_lock);
   4085	mutex_init(&sbi->writepages);
   4086	init_f2fs_rwsem(&sbi->cp_global_sem);
   4087	init_f2fs_rwsem(&sbi->node_write);
   4088	init_f2fs_rwsem(&sbi->node_change);
   4089
   4090	/* disallow all the data/node/meta page writes */
   4091	set_sbi_flag(sbi, SBI_POR_DOING);
   4092	spin_lock_init(&sbi->stat_lock);
   4093
   4094	err = f2fs_init_write_merge_io(sbi);
   4095	if (err)
   4096		goto free_bio_info;
   4097
   4098	init_f2fs_rwsem(&sbi->cp_rwsem);
   4099	init_f2fs_rwsem(&sbi->quota_sem);
   4100	init_waitqueue_head(&sbi->cp_wait);
   4101	init_sb_info(sbi);
   4102
   4103	err = f2fs_init_iostat(sbi);
   4104	if (err)
   4105		goto free_bio_info;
   4106
   4107	err = init_percpu_info(sbi);
   4108	if (err)
   4109		goto free_iostat;
   4110
   4111	if (F2FS_IO_ALIGNED(sbi)) {
   4112		sbi->write_io_dummy =
   4113			mempool_create_page_pool(2 * (F2FS_IO_SIZE(sbi) - 1), 0);
   4114		if (!sbi->write_io_dummy) {
   4115			err = -ENOMEM;
   4116			goto free_percpu;
   4117		}
   4118	}
   4119
   4120	/* init per sbi slab cache */
   4121	err = f2fs_init_xattr_caches(sbi);
   4122	if (err)
   4123		goto free_io_dummy;
   4124	err = f2fs_init_page_array_cache(sbi);
   4125	if (err)
   4126		goto free_xattr_cache;
   4127
   4128	/* get an inode for meta space */
   4129	sbi->meta_inode = f2fs_iget(sb, F2FS_META_INO(sbi));
   4130	if (IS_ERR(sbi->meta_inode)) {
   4131		f2fs_err(sbi, "Failed to read F2FS meta data inode");
   4132		err = PTR_ERR(sbi->meta_inode);
   4133		goto free_page_array_cache;
   4134	}
   4135
   4136	err = f2fs_get_valid_checkpoint(sbi);
   4137	if (err) {
   4138		f2fs_err(sbi, "Failed to get valid F2FS checkpoint");
   4139		goto free_meta_inode;
   4140	}
   4141
   4142	if (__is_set_ckpt_flags(F2FS_CKPT(sbi), CP_QUOTA_NEED_FSCK_FLAG))
   4143		set_sbi_flag(sbi, SBI_QUOTA_NEED_REPAIR);
   4144	if (__is_set_ckpt_flags(F2FS_CKPT(sbi), CP_DISABLED_QUICK_FLAG)) {
   4145		set_sbi_flag(sbi, SBI_CP_DISABLED_QUICK);
   4146		sbi->interval_time[DISABLE_TIME] = DEF_DISABLE_QUICK_INTERVAL;
   4147	}
   4148
   4149	if (__is_set_ckpt_flags(F2FS_CKPT(sbi), CP_FSCK_FLAG))
   4150		set_sbi_flag(sbi, SBI_NEED_FSCK);
   4151
   4152	/* Initialize device list */
   4153	err = f2fs_scan_devices(sbi);
   4154	if (err) {
   4155		f2fs_err(sbi, "Failed to find devices");
   4156		goto free_devices;
   4157	}
   4158
   4159	err = f2fs_init_post_read_wq(sbi);
   4160	if (err) {
   4161		f2fs_err(sbi, "Failed to initialize post read workqueue");
   4162		goto free_devices;
   4163	}
   4164
   4165	sbi->total_valid_node_count =
   4166				le32_to_cpu(sbi->ckpt->valid_node_count);
   4167	percpu_counter_set(&sbi->total_valid_inode_count,
   4168				le32_to_cpu(sbi->ckpt->valid_inode_count));
   4169	sbi->user_block_count = le64_to_cpu(sbi->ckpt->user_block_count);
   4170	sbi->total_valid_block_count =
   4171				le64_to_cpu(sbi->ckpt->valid_block_count);
   4172	sbi->last_valid_block_count = sbi->total_valid_block_count;
   4173	sbi->reserved_blocks = 0;
   4174	sbi->current_reserved_blocks = 0;
   4175	limit_reserve_root(sbi);
   4176	adjust_unusable_cap_perc(sbi);
   4177
   4178	for (i = 0; i < NR_INODE_TYPE; i++) {
   4179		INIT_LIST_HEAD(&sbi->inode_list[i]);
   4180		spin_lock_init(&sbi->inode_lock[i]);
   4181	}
   4182	mutex_init(&sbi->flush_lock);
   4183
   4184	f2fs_init_extent_cache_info(sbi);
   4185
   4186	f2fs_init_ino_entry_info(sbi);
   4187
   4188	f2fs_init_fsync_node_info(sbi);
   4189
   4190	/* setup checkpoint request control and start checkpoint issue thread */
   4191	f2fs_init_ckpt_req_control(sbi);
   4192	if (!f2fs_readonly(sb) && !test_opt(sbi, DISABLE_CHECKPOINT) &&
   4193			test_opt(sbi, MERGE_CHECKPOINT)) {
   4194		err = f2fs_start_ckpt_thread(sbi);
   4195		if (err) {
   4196			f2fs_err(sbi,
   4197			    "Failed to start F2FS issue_checkpoint_thread (%d)",
   4198			    err);
   4199			goto stop_ckpt_thread;
   4200		}
   4201	}
   4202
   4203	/* setup f2fs internal modules */
   4204	err = f2fs_build_segment_manager(sbi);
   4205	if (err) {
   4206		f2fs_err(sbi, "Failed to initialize F2FS segment manager (%d)",
   4207			 err);
   4208		goto free_sm;
   4209	}
   4210	err = f2fs_build_node_manager(sbi);
   4211	if (err) {
   4212		f2fs_err(sbi, "Failed to initialize F2FS node manager (%d)",
   4213			 err);
   4214		goto free_nm;
   4215	}
   4216
   4217	err = adjust_reserved_segment(sbi);
   4218	if (err)
   4219		goto free_nm;
   4220
   4221	/* For write statistics */
   4222	sbi->sectors_written_start = f2fs_get_sectors_written(sbi);
   4223
   4224	/* Read accumulated write IO statistics if exists */
   4225	seg_i = CURSEG_I(sbi, CURSEG_HOT_NODE);
   4226	if (__exist_node_summaries(sbi))
   4227		sbi->kbytes_written =
   4228			le64_to_cpu(seg_i->journal->info.kbytes_written);
   4229
   4230	f2fs_build_gc_manager(sbi);
   4231
   4232	err = f2fs_build_stats(sbi);
   4233	if (err)
   4234		goto free_nm;
   4235
   4236	/* get an inode for node space */
   4237	sbi->node_inode = f2fs_iget(sb, F2FS_NODE_INO(sbi));
   4238	if (IS_ERR(sbi->node_inode)) {
   4239		f2fs_err(sbi, "Failed to read node inode");
   4240		err = PTR_ERR(sbi->node_inode);
   4241		goto free_stats;
   4242	}
   4243
   4244	/* read root inode and dentry */
   4245	root = f2fs_iget(sb, F2FS_ROOT_INO(sbi));
   4246	if (IS_ERR(root)) {
   4247		f2fs_err(sbi, "Failed to read root inode");
   4248		err = PTR_ERR(root);
   4249		goto free_node_inode;
   4250	}
   4251	if (!S_ISDIR(root->i_mode) || !root->i_blocks ||
   4252			!root->i_size || !root->i_nlink) {
   4253		iput(root);
   4254		err = -EINVAL;
   4255		goto free_node_inode;
   4256	}
   4257
   4258	sb->s_root = d_make_root(root); /* allocate root dentry */
   4259	if (!sb->s_root) {
   4260		err = -ENOMEM;
   4261		goto free_node_inode;
   4262	}
   4263
   4264	err = f2fs_init_compress_inode(sbi);
   4265	if (err)
   4266		goto free_root_inode;
   4267
   4268	err = f2fs_register_sysfs(sbi);
   4269	if (err)
   4270		goto free_compress_inode;
   4271
   4272#ifdef CONFIG_QUOTA
   4273	/* Enable quota usage during mount */
   4274	if (f2fs_sb_has_quota_ino(sbi) && !f2fs_readonly(sb)) {
   4275		err = f2fs_enable_quotas(sb);
   4276		if (err)
   4277			f2fs_err(sbi, "Cannot turn on quotas: error %d", err);
   4278	}
   4279#endif
   4280	/* if there are any orphan inodes, free them */
   4281	err = f2fs_recover_orphan_inodes(sbi);
   4282	if (err)
   4283		goto free_meta;
   4284
   4285	if (unlikely(is_set_ckpt_flags(sbi, CP_DISABLED_FLAG)))
   4286		goto reset_checkpoint;
   4287
   4288	/* recover fsynced data */
   4289	if (!test_opt(sbi, DISABLE_ROLL_FORWARD) &&
   4290			!test_opt(sbi, NORECOVERY)) {
   4291		/*
   4292		 * mount should be failed, when device has readonly mode, and
   4293		 * previous checkpoint was not done by clean system shutdown.
   4294		 */
   4295		if (f2fs_hw_is_readonly(sbi)) {
   4296			if (!is_set_ckpt_flags(sbi, CP_UMOUNT_FLAG)) {
   4297				err = f2fs_recover_fsync_data(sbi, true);
   4298				if (err > 0) {
   4299					err = -EROFS;
   4300					f2fs_err(sbi, "Need to recover fsync data, but "
   4301						"write access unavailable, please try "
   4302						"mount w/ disable_roll_forward or norecovery");
   4303				}
   4304				if (err < 0)
   4305					goto free_meta;
   4306			}
   4307			f2fs_info(sbi, "write access unavailable, skipping recovery");
   4308			goto reset_checkpoint;
   4309		}
   4310
   4311		if (need_fsck)
   4312			set_sbi_flag(sbi, SBI_NEED_FSCK);
   4313
   4314		if (skip_recovery)
   4315			goto reset_checkpoint;
   4316
   4317		err = f2fs_recover_fsync_data(sbi, false);
   4318		if (err < 0) {
   4319			if (err != -ENOMEM)
   4320				skip_recovery = true;
   4321			need_fsck = true;
   4322			f2fs_err(sbi, "Cannot recover all fsync data errno=%d",
   4323				 err);
   4324			goto free_meta;
   4325		}
   4326	} else {
   4327		err = f2fs_recover_fsync_data(sbi, true);
   4328
   4329		if (!f2fs_readonly(sb) && err > 0) {
   4330			err = -EINVAL;
   4331			f2fs_err(sbi, "Need to recover fsync data");
   4332			goto free_meta;
   4333		}
   4334	}
   4335
   4336	/*
   4337	 * If the f2fs is not readonly and fsync data recovery succeeds,
   4338	 * check zoned block devices' write pointer consistency.
   4339	 */
   4340	if (!err && !f2fs_readonly(sb) && f2fs_sb_has_blkzoned(sbi)) {
   4341		err = f2fs_check_write_pointer(sbi);
   4342		if (err)
   4343			goto free_meta;
   4344	}
   4345
   4346reset_checkpoint:
   4347	f2fs_init_inmem_curseg(sbi);
   4348
   4349	/* f2fs_recover_fsync_data() cleared this already */
   4350	clear_sbi_flag(sbi, SBI_POR_DOING);
   4351
   4352	if (test_opt(sbi, DISABLE_CHECKPOINT)) {
   4353		err = f2fs_disable_checkpoint(sbi);
   4354		if (err)
   4355			goto sync_free_meta;
   4356	} else if (is_set_ckpt_flags(sbi, CP_DISABLED_FLAG)) {
   4357		f2fs_enable_checkpoint(sbi);
   4358	}
   4359
   4360	/*
   4361	 * If filesystem is not mounted as read-only then
   4362	 * do start the gc_thread.
   4363	 */
   4364	if ((F2FS_OPTION(sbi).bggc_mode != BGGC_MODE_OFF ||
   4365		test_opt(sbi, GC_MERGE)) && !f2fs_readonly(sb)) {
   4366		/* After POR, we can run background GC thread.*/
   4367		err = f2fs_start_gc_thread(sbi);
   4368		if (err)
   4369			goto sync_free_meta;
   4370	}
   4371	kvfree(options);
   4372
   4373	/* recover broken superblock */
   4374	if (recovery) {
   4375		err = f2fs_commit_super(sbi, true);
   4376		f2fs_info(sbi, "Try to recover %dth superblock, ret: %d",
   4377			  sbi->valid_super_block ? 1 : 2, err);
   4378	}
   4379
   4380	f2fs_join_shrinker(sbi);
   4381
   4382	f2fs_tuning_parameters(sbi);
   4383
   4384	f2fs_notice(sbi, "Mounted with checkpoint version = %llx",
   4385		    cur_cp_version(F2FS_CKPT(sbi)));
   4386	f2fs_update_time(sbi, CP_TIME);
   4387	f2fs_update_time(sbi, REQ_TIME);
   4388	clear_sbi_flag(sbi, SBI_CP_DISABLED_QUICK);
   4389	return 0;
   4390
   4391sync_free_meta:
   4392	/* safe to flush all the data */
   4393	sync_filesystem(sbi->sb);
   4394	retry_cnt = 0;
   4395
   4396free_meta:
   4397#ifdef CONFIG_QUOTA
   4398	f2fs_truncate_quota_inode_pages(sb);
   4399	if (f2fs_sb_has_quota_ino(sbi) && !f2fs_readonly(sb))
   4400		f2fs_quota_off_umount(sbi->sb);
   4401#endif
   4402	/*
   4403	 * Some dirty meta pages can be produced by f2fs_recover_orphan_inodes()
   4404	 * failed by EIO. Then, iput(node_inode) can trigger balance_fs_bg()
   4405	 * followed by f2fs_write_checkpoint() through f2fs_write_node_pages(), which
   4406	 * falls into an infinite loop in f2fs_sync_meta_pages().
   4407	 */
   4408	truncate_inode_pages_final(META_MAPPING(sbi));
   4409	/* evict some inodes being cached by GC */
   4410	evict_inodes(sb);
   4411	f2fs_unregister_sysfs(sbi);
   4412free_compress_inode:
   4413	f2fs_destroy_compress_inode(sbi);
   4414free_root_inode:
   4415	dput(sb->s_root);
   4416	sb->s_root = NULL;
   4417free_node_inode:
   4418	f2fs_release_ino_entry(sbi, true);
   4419	truncate_inode_pages_final(NODE_MAPPING(sbi));
   4420	iput(sbi->node_inode);
   4421	sbi->node_inode = NULL;
   4422free_stats:
   4423	f2fs_destroy_stats(sbi);
   4424free_nm:
   4425	/* stop discard thread before destroying node manager */
   4426	f2fs_stop_discard_thread(sbi);
   4427	f2fs_destroy_node_manager(sbi);
   4428free_sm:
   4429	f2fs_destroy_segment_manager(sbi);
   4430	f2fs_destroy_post_read_wq(sbi);
   4431stop_ckpt_thread:
   4432	f2fs_stop_ckpt_thread(sbi);
   4433free_devices:
   4434	destroy_device_list(sbi);
   4435	kvfree(sbi->ckpt);
   4436free_meta_inode:
   4437	make_bad_inode(sbi->meta_inode);
   4438	iput(sbi->meta_inode);
   4439	sbi->meta_inode = NULL;
   4440free_page_array_cache:
   4441	f2fs_destroy_page_array_cache(sbi);
   4442free_xattr_cache:
   4443	f2fs_destroy_xattr_caches(sbi);
   4444free_io_dummy:
   4445	mempool_destroy(sbi->write_io_dummy);
   4446free_percpu:
   4447	destroy_percpu_info(sbi);
   4448free_iostat:
   4449	f2fs_destroy_iostat(sbi);
   4450free_bio_info:
   4451	for (i = 0; i < NR_PAGE_TYPE; i++)
   4452		kvfree(sbi->write_io[i]);
   4453
   4454#if IS_ENABLED(CONFIG_UNICODE)
   4455	utf8_unload(sb->s_encoding);
   4456	sb->s_encoding = NULL;
   4457#endif
   4458free_options:
   4459#ifdef CONFIG_QUOTA
   4460	for (i = 0; i < MAXQUOTAS; i++)
   4461		kfree(F2FS_OPTION(sbi).s_qf_names[i]);
   4462#endif
   4463	fscrypt_free_dummy_policy(&F2FS_OPTION(sbi).dummy_enc_policy);
   4464	kvfree(options);
   4465free_sb_buf:
   4466	kfree(raw_super);
   4467free_sbi:
   4468	if (sbi->s_chksum_driver)
   4469		crypto_free_shash(sbi->s_chksum_driver);
   4470	kfree(sbi);
   4471
   4472	/* give only one another chance */
   4473	if (retry_cnt > 0 && skip_recovery) {
   4474		retry_cnt--;
   4475		shrink_dcache_sb(sb);
   4476		goto try_onemore;
   4477	}
   4478	return err;
   4479}
   4480
   4481static struct dentry *f2fs_mount(struct file_system_type *fs_type, int flags,
   4482			const char *dev_name, void *data)
   4483{
   4484	return mount_bdev(fs_type, flags, dev_name, data, f2fs_fill_super);
   4485}
   4486
   4487static void kill_f2fs_super(struct super_block *sb)
   4488{
   4489	if (sb->s_root) {
   4490		struct f2fs_sb_info *sbi = F2FS_SB(sb);
   4491
   4492		set_sbi_flag(sbi, SBI_IS_CLOSE);
   4493		f2fs_stop_gc_thread(sbi);
   4494		f2fs_stop_discard_thread(sbi);
   4495
   4496#ifdef CONFIG_F2FS_FS_COMPRESSION
   4497		/*
   4498		 * latter evict_inode() can bypass checking and invalidating
   4499		 * compress inode cache.
   4500		 */
   4501		if (test_opt(sbi, COMPRESS_CACHE))
   4502			truncate_inode_pages_final(COMPRESS_MAPPING(sbi));
   4503#endif
   4504
   4505		if (is_sbi_flag_set(sbi, SBI_IS_DIRTY) ||
   4506				!is_set_ckpt_flags(sbi, CP_UMOUNT_FLAG)) {
   4507			struct cp_control cpc = {
   4508				.reason = CP_UMOUNT,
   4509			};
   4510			f2fs_write_checkpoint(sbi, &cpc);
   4511		}
   4512
   4513		if (is_sbi_flag_set(sbi, SBI_IS_RECOVERED) && f2fs_readonly(sb))
   4514			sb->s_flags &= ~SB_RDONLY;
   4515	}
   4516	kill_block_super(sb);
   4517}
   4518
   4519static struct file_system_type f2fs_fs_type = {
   4520	.owner		= THIS_MODULE,
   4521	.name		= "f2fs",
   4522	.mount		= f2fs_mount,
   4523	.kill_sb	= kill_f2fs_super,
   4524	.fs_flags	= FS_REQUIRES_DEV | FS_ALLOW_IDMAP,
   4525};
   4526MODULE_ALIAS_FS("f2fs");
   4527
   4528static int __init init_inodecache(void)
   4529{
   4530	f2fs_inode_cachep = kmem_cache_create("f2fs_inode_cache",
   4531			sizeof(struct f2fs_inode_info), 0,
   4532			SLAB_RECLAIM_ACCOUNT|SLAB_ACCOUNT, NULL);
   4533	if (!f2fs_inode_cachep)
   4534		return -ENOMEM;
   4535	return 0;
   4536}
   4537
   4538static void destroy_inodecache(void)
   4539{
   4540	/*
   4541	 * Make sure all delayed rcu free inodes are flushed before we
   4542	 * destroy cache.
   4543	 */
   4544	rcu_barrier();
   4545	kmem_cache_destroy(f2fs_inode_cachep);
   4546}
   4547
   4548static int __init init_f2fs_fs(void)
   4549{
   4550	int err;
   4551
   4552	if (PAGE_SIZE != F2FS_BLKSIZE) {
   4553		printk("F2FS not supported on PAGE_SIZE(%lu) != %d\n",
   4554				PAGE_SIZE, F2FS_BLKSIZE);
   4555		return -EINVAL;
   4556	}
   4557
   4558	err = init_inodecache();
   4559	if (err)
   4560		goto fail;
   4561	err = f2fs_create_node_manager_caches();
   4562	if (err)
   4563		goto free_inodecache;
   4564	err = f2fs_create_segment_manager_caches();
   4565	if (err)
   4566		goto free_node_manager_caches;
   4567	err = f2fs_create_checkpoint_caches();
   4568	if (err)
   4569		goto free_segment_manager_caches;
   4570	err = f2fs_create_recovery_cache();
   4571	if (err)
   4572		goto free_checkpoint_caches;
   4573	err = f2fs_create_extent_cache();
   4574	if (err)
   4575		goto free_recovery_cache;
   4576	err = f2fs_create_garbage_collection_cache();
   4577	if (err)
   4578		goto free_extent_cache;
   4579	err = f2fs_init_sysfs();
   4580	if (err)
   4581		goto free_garbage_collection_cache;
   4582	err = register_shrinker(&f2fs_shrinker_info);
   4583	if (err)
   4584		goto free_sysfs;
   4585	err = register_filesystem(&f2fs_fs_type);
   4586	if (err)
   4587		goto free_shrinker;
   4588	f2fs_create_root_stats();
   4589	err = f2fs_init_post_read_processing();
   4590	if (err)
   4591		goto free_root_stats;
   4592	err = f2fs_init_iostat_processing();
   4593	if (err)
   4594		goto free_post_read;
   4595	err = f2fs_init_bio_entry_cache();
   4596	if (err)
   4597		goto free_iostat;
   4598	err = f2fs_init_bioset();
   4599	if (err)
   4600		goto free_bio_enrty_cache;
   4601	err = f2fs_init_compress_mempool();
   4602	if (err)
   4603		goto free_bioset;
   4604	err = f2fs_init_compress_cache();
   4605	if (err)
   4606		goto free_compress_mempool;
   4607	err = f2fs_create_casefold_cache();
   4608	if (err)
   4609		goto free_compress_cache;
   4610	return 0;
   4611free_compress_cache:
   4612	f2fs_destroy_compress_cache();
   4613free_compress_mempool:
   4614	f2fs_destroy_compress_mempool();
   4615free_bioset:
   4616	f2fs_destroy_bioset();
   4617free_bio_enrty_cache:
   4618	f2fs_destroy_bio_entry_cache();
   4619free_iostat:
   4620	f2fs_destroy_iostat_processing();
   4621free_post_read:
   4622	f2fs_destroy_post_read_processing();
   4623free_root_stats:
   4624	f2fs_destroy_root_stats();
   4625	unregister_filesystem(&f2fs_fs_type);
   4626free_shrinker:
   4627	unregister_shrinker(&f2fs_shrinker_info);
   4628free_sysfs:
   4629	f2fs_exit_sysfs();
   4630free_garbage_collection_cache:
   4631	f2fs_destroy_garbage_collection_cache();
   4632free_extent_cache:
   4633	f2fs_destroy_extent_cache();
   4634free_recovery_cache:
   4635	f2fs_destroy_recovery_cache();
   4636free_checkpoint_caches:
   4637	f2fs_destroy_checkpoint_caches();
   4638free_segment_manager_caches:
   4639	f2fs_destroy_segment_manager_caches();
   4640free_node_manager_caches:
   4641	f2fs_destroy_node_manager_caches();
   4642free_inodecache:
   4643	destroy_inodecache();
   4644fail:
   4645	return err;
   4646}
   4647
   4648static void __exit exit_f2fs_fs(void)
   4649{
   4650	f2fs_destroy_casefold_cache();
   4651	f2fs_destroy_compress_cache();
   4652	f2fs_destroy_compress_mempool();
   4653	f2fs_destroy_bioset();
   4654	f2fs_destroy_bio_entry_cache();
   4655	f2fs_destroy_iostat_processing();
   4656	f2fs_destroy_post_read_processing();
   4657	f2fs_destroy_root_stats();
   4658	unregister_filesystem(&f2fs_fs_type);
   4659	unregister_shrinker(&f2fs_shrinker_info);
   4660	f2fs_exit_sysfs();
   4661	f2fs_destroy_garbage_collection_cache();
   4662	f2fs_destroy_extent_cache();
   4663	f2fs_destroy_recovery_cache();
   4664	f2fs_destroy_checkpoint_caches();
   4665	f2fs_destroy_segment_manager_caches();
   4666	f2fs_destroy_node_manager_caches();
   4667	destroy_inodecache();
   4668}
   4669
   4670module_init(init_f2fs_fs)
   4671module_exit(exit_f2fs_fs)
   4672
   4673MODULE_AUTHOR("Samsung Electronics's Praesto Team");
   4674MODULE_DESCRIPTION("Flash Friendly File System");
   4675MODULE_LICENSE("GPL");
   4676MODULE_SOFTDEP("pre: crc32");
   4677