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