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