linux/fs/f2fs/super.c
<<
>>
Prefs
   1/*
   2 * fs/f2fs/super.c
   3 *
   4 * Copyright (c) 2012 Samsung Electronics Co., Ltd.
   5 *             http://www.samsung.com/
   6 *
   7 * This program is free software; you can redistribute it and/or modify
   8 * it under the terms of the GNU General Public License version 2 as
   9 * published by the Free Software Foundation.
  10 */
  11#include <linux/module.h>
  12#include <linux/init.h>
  13#include <linux/fs.h>
  14#include <linux/statfs.h>
  15#include <linux/buffer_head.h>
  16#include <linux/backing-dev.h>
  17#include <linux/kthread.h>
  18#include <linux/parser.h>
  19#include <linux/mount.h>
  20#include <linux/seq_file.h>
  21#include <linux/proc_fs.h>
  22#include <linux/random.h>
  23#include <linux/exportfs.h>
  24#include <linux/blkdev.h>
  25#include <linux/quotaops.h>
  26#include <linux/f2fs_fs.h>
  27#include <linux/sysfs.h>
  28#include <linux/quota.h>
  29
  30#include "f2fs.h"
  31#include "node.h"
  32#include "segment.h"
  33#include "xattr.h"
  34#include "gc.h"
  35#include "trace.h"
  36
  37#define CREATE_TRACE_POINTS
  38#include <trace/events/f2fs.h>
  39
  40static struct kmem_cache *f2fs_inode_cachep;
  41
  42#ifdef CONFIG_F2FS_FAULT_INJECTION
  43
  44char *fault_name[FAULT_MAX] = {
  45        [FAULT_KMALLOC]         = "kmalloc",
  46        [FAULT_KVMALLOC]        = "kvmalloc",
  47        [FAULT_PAGE_ALLOC]      = "page alloc",
  48        [FAULT_PAGE_GET]        = "page get",
  49        [FAULT_ALLOC_BIO]       = "alloc bio",
  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_IO]              = "IO error",
  57        [FAULT_CHECKPOINT]      = "checkpoint error",
  58};
  59
  60static void f2fs_build_fault_attr(struct f2fs_sb_info *sbi,
  61                                                unsigned int rate)
  62{
  63        struct f2fs_fault_info *ffi = &F2FS_OPTION(sbi).fault_info;
  64
  65        if (rate) {
  66                atomic_set(&ffi->inject_ops, 0);
  67                ffi->inject_rate = rate;
  68                ffi->inject_type = (1 << FAULT_MAX) - 1;
  69        } else {
  70                memset(ffi, 0, sizeof(struct f2fs_fault_info));
  71        }
  72}
  73#endif
  74
  75/* f2fs-wide shrinker description */
  76static struct shrinker f2fs_shrinker_info = {
  77        .scan_objects = f2fs_shrink_scan,
  78        .count_objects = f2fs_shrink_count,
  79        .seeks = DEFAULT_SEEKS,
  80};
  81
  82enum {
  83        Opt_gc_background,
  84        Opt_disable_roll_forward,
  85        Opt_norecovery,
  86        Opt_discard,
  87        Opt_nodiscard,
  88        Opt_noheap,
  89        Opt_heap,
  90        Opt_user_xattr,
  91        Opt_nouser_xattr,
  92        Opt_acl,
  93        Opt_noacl,
  94        Opt_active_logs,
  95        Opt_disable_ext_identify,
  96        Opt_inline_xattr,
  97        Opt_noinline_xattr,
  98        Opt_inline_xattr_size,
  99        Opt_inline_data,
 100        Opt_inline_dentry,
 101        Opt_noinline_dentry,
 102        Opt_flush_merge,
 103        Opt_noflush_merge,
 104        Opt_nobarrier,
 105        Opt_fastboot,
 106        Opt_extent_cache,
 107        Opt_noextent_cache,
 108        Opt_noinline_data,
 109        Opt_data_flush,
 110        Opt_reserve_root,
 111        Opt_resgid,
 112        Opt_resuid,
 113        Opt_mode,
 114        Opt_io_size_bits,
 115        Opt_fault_injection,
 116        Opt_lazytime,
 117        Opt_nolazytime,
 118        Opt_quota,
 119        Opt_noquota,
 120        Opt_usrquota,
 121        Opt_grpquota,
 122        Opt_prjquota,
 123        Opt_usrjquota,
 124        Opt_grpjquota,
 125        Opt_prjjquota,
 126        Opt_offusrjquota,
 127        Opt_offgrpjquota,
 128        Opt_offprjjquota,
 129        Opt_jqfmt_vfsold,
 130        Opt_jqfmt_vfsv0,
 131        Opt_jqfmt_vfsv1,
 132        Opt_whint,
 133        Opt_alloc,
 134        Opt_fsync,
 135        Opt_test_dummy_encryption,
 136        Opt_err,
 137};
 138
 139static match_table_t f2fs_tokens = {
 140        {Opt_gc_background, "background_gc=%s"},
 141        {Opt_disable_roll_forward, "disable_roll_forward"},
 142        {Opt_norecovery, "norecovery"},
 143        {Opt_discard, "discard"},
 144        {Opt_nodiscard, "nodiscard"},
 145        {Opt_noheap, "no_heap"},
 146        {Opt_heap, "heap"},
 147        {Opt_user_xattr, "user_xattr"},
 148        {Opt_nouser_xattr, "nouser_xattr"},
 149        {Opt_acl, "acl"},
 150        {Opt_noacl, "noacl"},
 151        {Opt_active_logs, "active_logs=%u"},
 152        {Opt_disable_ext_identify, "disable_ext_identify"},
 153        {Opt_inline_xattr, "inline_xattr"},
 154        {Opt_noinline_xattr, "noinline_xattr"},
 155        {Opt_inline_xattr_size, "inline_xattr_size=%u"},
 156        {Opt_inline_data, "inline_data"},
 157        {Opt_inline_dentry, "inline_dentry"},
 158        {Opt_noinline_dentry, "noinline_dentry"},
 159        {Opt_flush_merge, "flush_merge"},
 160        {Opt_noflush_merge, "noflush_merge"},
 161        {Opt_nobarrier, "nobarrier"},
 162        {Opt_fastboot, "fastboot"},
 163        {Opt_extent_cache, "extent_cache"},
 164        {Opt_noextent_cache, "noextent_cache"},
 165        {Opt_noinline_data, "noinline_data"},
 166        {Opt_data_flush, "data_flush"},
 167        {Opt_reserve_root, "reserve_root=%u"},
 168        {Opt_resgid, "resgid=%u"},
 169        {Opt_resuid, "resuid=%u"},
 170        {Opt_mode, "mode=%s"},
 171        {Opt_io_size_bits, "io_bits=%u"},
 172        {Opt_fault_injection, "fault_injection=%u"},
 173        {Opt_lazytime, "lazytime"},
 174        {Opt_nolazytime, "nolazytime"},
 175        {Opt_quota, "quota"},
 176        {Opt_noquota, "noquota"},
 177        {Opt_usrquota, "usrquota"},
 178        {Opt_grpquota, "grpquota"},
 179        {Opt_prjquota, "prjquota"},
 180        {Opt_usrjquota, "usrjquota=%s"},
 181        {Opt_grpjquota, "grpjquota=%s"},
 182        {Opt_prjjquota, "prjjquota=%s"},
 183        {Opt_offusrjquota, "usrjquota="},
 184        {Opt_offgrpjquota, "grpjquota="},
 185        {Opt_offprjjquota, "prjjquota="},
 186        {Opt_jqfmt_vfsold, "jqfmt=vfsold"},
 187        {Opt_jqfmt_vfsv0, "jqfmt=vfsv0"},
 188        {Opt_jqfmt_vfsv1, "jqfmt=vfsv1"},
 189        {Opt_whint, "whint_mode=%s"},
 190        {Opt_alloc, "alloc_mode=%s"},
 191        {Opt_fsync, "fsync_mode=%s"},
 192        {Opt_test_dummy_encryption, "test_dummy_encryption"},
 193        {Opt_err, NULL},
 194};
 195
 196void f2fs_msg(struct super_block *sb, const char *level, const char *fmt, ...)
 197{
 198        struct va_format vaf;
 199        va_list args;
 200
 201        va_start(args, fmt);
 202        vaf.fmt = fmt;
 203        vaf.va = &args;
 204        printk_ratelimited("%sF2FS-fs (%s): %pV\n", level, sb->s_id, &vaf);
 205        va_end(args);
 206}
 207
 208static inline void limit_reserve_root(struct f2fs_sb_info *sbi)
 209{
 210        block_t limit = (sbi->user_block_count << 1) / 1000;
 211
 212        /* limit is 0.2% */
 213        if (test_opt(sbi, RESERVE_ROOT) &&
 214                        F2FS_OPTION(sbi).root_reserved_blocks > limit) {
 215                F2FS_OPTION(sbi).root_reserved_blocks = limit;
 216                f2fs_msg(sbi->sb, KERN_INFO,
 217                        "Reduce reserved blocks for root = %u",
 218                        F2FS_OPTION(sbi).root_reserved_blocks);
 219        }
 220        if (!test_opt(sbi, RESERVE_ROOT) &&
 221                (!uid_eq(F2FS_OPTION(sbi).s_resuid,
 222                                make_kuid(&init_user_ns, F2FS_DEF_RESUID)) ||
 223                !gid_eq(F2FS_OPTION(sbi).s_resgid,
 224                                make_kgid(&init_user_ns, F2FS_DEF_RESGID))))
 225                f2fs_msg(sbi->sb, KERN_INFO,
 226                        "Ignore s_resuid=%u, s_resgid=%u w/o reserve_root",
 227                                from_kuid_munged(&init_user_ns,
 228                                        F2FS_OPTION(sbi).s_resuid),
 229                                from_kgid_munged(&init_user_ns,
 230                                        F2FS_OPTION(sbi).s_resgid));
 231}
 232
 233static void init_once(void *foo)
 234{
 235        struct f2fs_inode_info *fi = (struct f2fs_inode_info *) foo;
 236
 237        inode_init_once(&fi->vfs_inode);
 238}
 239
 240#ifdef CONFIG_QUOTA
 241static const char * const quotatypes[] = INITQFNAMES;
 242#define QTYPE2NAME(t) (quotatypes[t])
 243static int f2fs_set_qf_name(struct super_block *sb, int qtype,
 244                                                        substring_t *args)
 245{
 246        struct f2fs_sb_info *sbi = F2FS_SB(sb);
 247        char *qname;
 248        int ret = -EINVAL;
 249
 250        if (sb_any_quota_loaded(sb) && !F2FS_OPTION(sbi).s_qf_names[qtype]) {
 251                f2fs_msg(sb, KERN_ERR,
 252                        "Cannot change journaled "
 253                        "quota options when quota turned on");
 254                return -EINVAL;
 255        }
 256        if (f2fs_sb_has_quota_ino(sb)) {
 257                f2fs_msg(sb, KERN_INFO,
 258                        "QUOTA feature is enabled, so ignore qf_name");
 259                return 0;
 260        }
 261
 262        qname = match_strdup(args);
 263        if (!qname) {
 264                f2fs_msg(sb, KERN_ERR,
 265                        "Not enough memory for storing quotafile name");
 266                return -EINVAL;
 267        }
 268        if (F2FS_OPTION(sbi).s_qf_names[qtype]) {
 269                if (strcmp(F2FS_OPTION(sbi).s_qf_names[qtype], qname) == 0)
 270                        ret = 0;
 271                else
 272                        f2fs_msg(sb, KERN_ERR,
 273                                 "%s quota file already specified",
 274                                 QTYPE2NAME(qtype));
 275                goto errout;
 276        }
 277        if (strchr(qname, '/')) {
 278                f2fs_msg(sb, KERN_ERR,
 279                        "quotafile must be on filesystem root");
 280                goto errout;
 281        }
 282        F2FS_OPTION(sbi).s_qf_names[qtype] = qname;
 283        set_opt(sbi, QUOTA);
 284        return 0;
 285errout:
 286        kfree(qname);
 287        return ret;
 288}
 289
 290static int f2fs_clear_qf_name(struct super_block *sb, int qtype)
 291{
 292        struct f2fs_sb_info *sbi = F2FS_SB(sb);
 293
 294        if (sb_any_quota_loaded(sb) && F2FS_OPTION(sbi).s_qf_names[qtype]) {
 295                f2fs_msg(sb, KERN_ERR, "Cannot change journaled quota options"
 296                        " when quota turned on");
 297                return -EINVAL;
 298        }
 299        kfree(F2FS_OPTION(sbi).s_qf_names[qtype]);
 300        F2FS_OPTION(sbi).s_qf_names[qtype] = NULL;
 301        return 0;
 302}
 303
 304static int f2fs_check_quota_options(struct f2fs_sb_info *sbi)
 305{
 306        /*
 307         * We do the test below only for project quotas. 'usrquota' and
 308         * 'grpquota' mount options are allowed even without quota feature
 309         * to support legacy quotas in quota files.
 310         */
 311        if (test_opt(sbi, PRJQUOTA) && !f2fs_sb_has_project_quota(sbi->sb)) {
 312                f2fs_msg(sbi->sb, KERN_ERR, "Project quota feature not enabled. "
 313                         "Cannot enable project quota enforcement.");
 314                return -1;
 315        }
 316        if (F2FS_OPTION(sbi).s_qf_names[USRQUOTA] ||
 317                        F2FS_OPTION(sbi).s_qf_names[GRPQUOTA] ||
 318                        F2FS_OPTION(sbi).s_qf_names[PRJQUOTA]) {
 319                if (test_opt(sbi, USRQUOTA) &&
 320                                F2FS_OPTION(sbi).s_qf_names[USRQUOTA])
 321                        clear_opt(sbi, USRQUOTA);
 322
 323                if (test_opt(sbi, GRPQUOTA) &&
 324                                F2FS_OPTION(sbi).s_qf_names[GRPQUOTA])
 325                        clear_opt(sbi, GRPQUOTA);
 326
 327                if (test_opt(sbi, PRJQUOTA) &&
 328                                F2FS_OPTION(sbi).s_qf_names[PRJQUOTA])
 329                        clear_opt(sbi, PRJQUOTA);
 330
 331                if (test_opt(sbi, GRPQUOTA) || test_opt(sbi, USRQUOTA) ||
 332                                test_opt(sbi, PRJQUOTA)) {
 333                        f2fs_msg(sbi->sb, KERN_ERR, "old and new quota "
 334                                        "format mixing");
 335                        return -1;
 336                }
 337
 338                if (!F2FS_OPTION(sbi).s_jquota_fmt) {
 339                        f2fs_msg(sbi->sb, KERN_ERR, "journaled quota format "
 340                                        "not specified");
 341                        return -1;
 342                }
 343        }
 344
 345        if (f2fs_sb_has_quota_ino(sbi->sb) && F2FS_OPTION(sbi).s_jquota_fmt) {
 346                f2fs_msg(sbi->sb, KERN_INFO,
 347                        "QUOTA feature is enabled, so ignore jquota_fmt");
 348                F2FS_OPTION(sbi).s_jquota_fmt = 0;
 349        }
 350        if (f2fs_sb_has_quota_ino(sbi->sb) && f2fs_readonly(sbi->sb)) {
 351                f2fs_msg(sbi->sb, KERN_INFO,
 352                         "Filesystem with quota feature cannot be mounted RDWR "
 353                         "without CONFIG_QUOTA");
 354                return -1;
 355        }
 356        return 0;
 357}
 358#endif
 359
 360static int parse_options(struct super_block *sb, char *options)
 361{
 362        struct f2fs_sb_info *sbi = F2FS_SB(sb);
 363        struct request_queue *q;
 364        substring_t args[MAX_OPT_ARGS];
 365        char *p, *name;
 366        int arg = 0;
 367        kuid_t uid;
 368        kgid_t gid;
 369#ifdef CONFIG_QUOTA
 370        int ret;
 371#endif
 372
 373        if (!options)
 374                return 0;
 375
 376        while ((p = strsep(&options, ",")) != NULL) {
 377                int token;
 378                if (!*p)
 379                        continue;
 380                /*
 381                 * Initialize args struct so we know whether arg was
 382                 * found; some options take optional arguments.
 383                 */
 384                args[0].to = args[0].from = NULL;
 385                token = match_token(p, f2fs_tokens, args);
 386
 387                switch (token) {
 388                case Opt_gc_background:
 389                        name = match_strdup(&args[0]);
 390
 391                        if (!name)
 392                                return -ENOMEM;
 393                        if (strlen(name) == 2 && !strncmp(name, "on", 2)) {
 394                                set_opt(sbi, BG_GC);
 395                                clear_opt(sbi, FORCE_FG_GC);
 396                        } else if (strlen(name) == 3 && !strncmp(name, "off", 3)) {
 397                                clear_opt(sbi, BG_GC);
 398                                clear_opt(sbi, FORCE_FG_GC);
 399                        } else if (strlen(name) == 4 && !strncmp(name, "sync", 4)) {
 400                                set_opt(sbi, BG_GC);
 401                                set_opt(sbi, FORCE_FG_GC);
 402                        } else {
 403                                kfree(name);
 404                                return -EINVAL;
 405                        }
 406                        kfree(name);
 407                        break;
 408                case Opt_disable_roll_forward:
 409                        set_opt(sbi, DISABLE_ROLL_FORWARD);
 410                        break;
 411                case Opt_norecovery:
 412                        /* this option mounts f2fs with ro */
 413                        set_opt(sbi, DISABLE_ROLL_FORWARD);
 414                        if (!f2fs_readonly(sb))
 415                                return -EINVAL;
 416                        break;
 417                case Opt_discard:
 418                        q = bdev_get_queue(sb->s_bdev);
 419                        if (blk_queue_discard(q)) {
 420                                set_opt(sbi, DISCARD);
 421                        } else if (!f2fs_sb_has_blkzoned(sb)) {
 422                                f2fs_msg(sb, KERN_WARNING,
 423                                        "mounting with \"discard\" option, but "
 424                                        "the device does not support discard");
 425                        }
 426                        break;
 427                case Opt_nodiscard:
 428                        if (f2fs_sb_has_blkzoned(sb)) {
 429                                f2fs_msg(sb, KERN_WARNING,
 430                                        "discard is required for zoned block devices");
 431                                return -EINVAL;
 432                        }
 433                        clear_opt(sbi, DISCARD);
 434                        break;
 435                case Opt_noheap:
 436                        set_opt(sbi, NOHEAP);
 437                        break;
 438                case Opt_heap:
 439                        clear_opt(sbi, NOHEAP);
 440                        break;
 441#ifdef CONFIG_F2FS_FS_XATTR
 442                case Opt_user_xattr:
 443                        set_opt(sbi, XATTR_USER);
 444                        break;
 445                case Opt_nouser_xattr:
 446                        clear_opt(sbi, XATTR_USER);
 447                        break;
 448                case Opt_inline_xattr:
 449                        set_opt(sbi, INLINE_XATTR);
 450                        break;
 451                case Opt_noinline_xattr:
 452                        clear_opt(sbi, INLINE_XATTR);
 453                        break;
 454                case Opt_inline_xattr_size:
 455                        if (args->from && match_int(args, &arg))
 456                                return -EINVAL;
 457                        set_opt(sbi, INLINE_XATTR_SIZE);
 458                        F2FS_OPTION(sbi).inline_xattr_size = arg;
 459                        break;
 460#else
 461                case Opt_user_xattr:
 462                        f2fs_msg(sb, KERN_INFO,
 463                                "user_xattr options not supported");
 464                        break;
 465                case Opt_nouser_xattr:
 466                        f2fs_msg(sb, KERN_INFO,
 467                                "nouser_xattr options not supported");
 468                        break;
 469                case Opt_inline_xattr:
 470                        f2fs_msg(sb, KERN_INFO,
 471                                "inline_xattr options not supported");
 472                        break;
 473                case Opt_noinline_xattr:
 474                        f2fs_msg(sb, KERN_INFO,
 475                                "noinline_xattr options not supported");
 476                        break;
 477#endif
 478#ifdef CONFIG_F2FS_FS_POSIX_ACL
 479                case Opt_acl:
 480                        set_opt(sbi, POSIX_ACL);
 481                        break;
 482                case Opt_noacl:
 483                        clear_opt(sbi, POSIX_ACL);
 484                        break;
 485#else
 486                case Opt_acl:
 487                        f2fs_msg(sb, KERN_INFO, "acl options not supported");
 488                        break;
 489                case Opt_noacl:
 490                        f2fs_msg(sb, KERN_INFO, "noacl options not supported");
 491                        break;
 492#endif
 493                case Opt_active_logs:
 494                        if (args->from && match_int(args, &arg))
 495                                return -EINVAL;
 496                        if (arg != 2 && arg != 4 && arg != NR_CURSEG_TYPE)
 497                                return -EINVAL;
 498                        F2FS_OPTION(sbi).active_logs = arg;
 499                        break;
 500                case Opt_disable_ext_identify:
 501                        set_opt(sbi, DISABLE_EXT_IDENTIFY);
 502                        break;
 503                case Opt_inline_data:
 504                        set_opt(sbi, INLINE_DATA);
 505                        break;
 506                case Opt_inline_dentry:
 507                        set_opt(sbi, INLINE_DENTRY);
 508                        break;
 509                case Opt_noinline_dentry:
 510                        clear_opt(sbi, INLINE_DENTRY);
 511                        break;
 512                case Opt_flush_merge:
 513                        set_opt(sbi, FLUSH_MERGE);
 514                        break;
 515                case Opt_noflush_merge:
 516                        clear_opt(sbi, FLUSH_MERGE);
 517                        break;
 518                case Opt_nobarrier:
 519                        set_opt(sbi, NOBARRIER);
 520                        break;
 521                case Opt_fastboot:
 522                        set_opt(sbi, FASTBOOT);
 523                        break;
 524                case Opt_extent_cache:
 525                        set_opt(sbi, EXTENT_CACHE);
 526                        break;
 527                case Opt_noextent_cache:
 528                        clear_opt(sbi, EXTENT_CACHE);
 529                        break;
 530                case Opt_noinline_data:
 531                        clear_opt(sbi, INLINE_DATA);
 532                        break;
 533                case Opt_data_flush:
 534                        set_opt(sbi, DATA_FLUSH);
 535                        break;
 536                case Opt_reserve_root:
 537                        if (args->from && match_int(args, &arg))
 538                                return -EINVAL;
 539                        if (test_opt(sbi, RESERVE_ROOT)) {
 540                                f2fs_msg(sb, KERN_INFO,
 541                                        "Preserve previous reserve_root=%u",
 542                                        F2FS_OPTION(sbi).root_reserved_blocks);
 543                        } else {
 544                                F2FS_OPTION(sbi).root_reserved_blocks = arg;
 545                                set_opt(sbi, RESERVE_ROOT);
 546                        }
 547                        break;
 548                case Opt_resuid:
 549                        if (args->from && match_int(args, &arg))
 550                                return -EINVAL;
 551                        uid = make_kuid(current_user_ns(), arg);
 552                        if (!uid_valid(uid)) {
 553                                f2fs_msg(sb, KERN_ERR,
 554                                        "Invalid uid value %d", arg);
 555                                return -EINVAL;
 556                        }
 557                        F2FS_OPTION(sbi).s_resuid = uid;
 558                        break;
 559                case Opt_resgid:
 560                        if (args->from && match_int(args, &arg))
 561                                return -EINVAL;
 562                        gid = make_kgid(current_user_ns(), arg);
 563                        if (!gid_valid(gid)) {
 564                                f2fs_msg(sb, KERN_ERR,
 565                                        "Invalid gid value %d", arg);
 566                                return -EINVAL;
 567                        }
 568                        F2FS_OPTION(sbi).s_resgid = gid;
 569                        break;
 570                case Opt_mode:
 571                        name = match_strdup(&args[0]);
 572
 573                        if (!name)
 574                                return -ENOMEM;
 575                        if (strlen(name) == 8 &&
 576                                        !strncmp(name, "adaptive", 8)) {
 577                                if (f2fs_sb_has_blkzoned(sb)) {
 578                                        f2fs_msg(sb, KERN_WARNING,
 579                                                 "adaptive mode is not allowed with "
 580                                                 "zoned block device feature");
 581                                        kfree(name);
 582                                        return -EINVAL;
 583                                }
 584                                set_opt_mode(sbi, F2FS_MOUNT_ADAPTIVE);
 585                        } else if (strlen(name) == 3 &&
 586                                        !strncmp(name, "lfs", 3)) {
 587                                set_opt_mode(sbi, F2FS_MOUNT_LFS);
 588                        } else {
 589                                kfree(name);
 590                                return -EINVAL;
 591                        }
 592                        kfree(name);
 593                        break;
 594                case Opt_io_size_bits:
 595                        if (args->from && match_int(args, &arg))
 596                                return -EINVAL;
 597                        if (arg > __ilog2_u32(BIO_MAX_PAGES)) {
 598                                f2fs_msg(sb, KERN_WARNING,
 599                                        "Not support %d, larger than %d",
 600                                        1 << arg, BIO_MAX_PAGES);
 601                                return -EINVAL;
 602                        }
 603                        F2FS_OPTION(sbi).write_io_size_bits = arg;
 604                        break;
 605                case Opt_fault_injection:
 606                        if (args->from && match_int(args, &arg))
 607                                return -EINVAL;
 608#ifdef CONFIG_F2FS_FAULT_INJECTION
 609                        f2fs_build_fault_attr(sbi, arg);
 610                        set_opt(sbi, FAULT_INJECTION);
 611#else
 612                        f2fs_msg(sb, KERN_INFO,
 613                                "FAULT_INJECTION was not selected");
 614#endif
 615                        break;
 616                case Opt_lazytime:
 617                        sb->s_flags |= SB_LAZYTIME;
 618                        break;
 619                case Opt_nolazytime:
 620                        sb->s_flags &= ~SB_LAZYTIME;
 621                        break;
 622#ifdef CONFIG_QUOTA
 623                case Opt_quota:
 624                case Opt_usrquota:
 625                        set_opt(sbi, USRQUOTA);
 626                        break;
 627                case Opt_grpquota:
 628                        set_opt(sbi, GRPQUOTA);
 629                        break;
 630                case Opt_prjquota:
 631                        set_opt(sbi, PRJQUOTA);
 632                        break;
 633                case Opt_usrjquota:
 634                        ret = f2fs_set_qf_name(sb, USRQUOTA, &args[0]);
 635                        if (ret)
 636                                return ret;
 637                        break;
 638                case Opt_grpjquota:
 639                        ret = f2fs_set_qf_name(sb, GRPQUOTA, &args[0]);
 640                        if (ret)
 641                                return ret;
 642                        break;
 643                case Opt_prjjquota:
 644                        ret = f2fs_set_qf_name(sb, PRJQUOTA, &args[0]);
 645                        if (ret)
 646                                return ret;
 647                        break;
 648                case Opt_offusrjquota:
 649                        ret = f2fs_clear_qf_name(sb, USRQUOTA);
 650                        if (ret)
 651                                return ret;
 652                        break;
 653                case Opt_offgrpjquota:
 654                        ret = f2fs_clear_qf_name(sb, GRPQUOTA);
 655                        if (ret)
 656                                return ret;
 657                        break;
 658                case Opt_offprjjquota:
 659                        ret = f2fs_clear_qf_name(sb, PRJQUOTA);
 660                        if (ret)
 661                                return ret;
 662                        break;
 663                case Opt_jqfmt_vfsold:
 664                        F2FS_OPTION(sbi).s_jquota_fmt = QFMT_VFS_OLD;
 665                        break;
 666                case Opt_jqfmt_vfsv0:
 667                        F2FS_OPTION(sbi).s_jquota_fmt = QFMT_VFS_V0;
 668                        break;
 669                case Opt_jqfmt_vfsv1:
 670                        F2FS_OPTION(sbi).s_jquota_fmt = QFMT_VFS_V1;
 671                        break;
 672                case Opt_noquota:
 673                        clear_opt(sbi, QUOTA);
 674                        clear_opt(sbi, USRQUOTA);
 675                        clear_opt(sbi, GRPQUOTA);
 676                        clear_opt(sbi, PRJQUOTA);
 677                        break;
 678#else
 679                case Opt_quota:
 680                case Opt_usrquota:
 681                case Opt_grpquota:
 682                case Opt_prjquota:
 683                case Opt_usrjquota:
 684                case Opt_grpjquota:
 685                case Opt_prjjquota:
 686                case Opt_offusrjquota:
 687                case Opt_offgrpjquota:
 688                case Opt_offprjjquota:
 689                case Opt_jqfmt_vfsold:
 690                case Opt_jqfmt_vfsv0:
 691                case Opt_jqfmt_vfsv1:
 692                case Opt_noquota:
 693                        f2fs_msg(sb, KERN_INFO,
 694                                        "quota operations not supported");
 695                        break;
 696#endif
 697                case Opt_whint:
 698                        name = match_strdup(&args[0]);
 699                        if (!name)
 700                                return -ENOMEM;
 701                        if (strlen(name) == 10 &&
 702                                        !strncmp(name, "user-based", 10)) {
 703                                F2FS_OPTION(sbi).whint_mode = WHINT_MODE_USER;
 704                        } else if (strlen(name) == 3 &&
 705                                        !strncmp(name, "off", 3)) {
 706                                F2FS_OPTION(sbi).whint_mode = WHINT_MODE_OFF;
 707                        } else if (strlen(name) == 8 &&
 708                                        !strncmp(name, "fs-based", 8)) {
 709                                F2FS_OPTION(sbi).whint_mode = WHINT_MODE_FS;
 710                        } else {
 711                                kfree(name);
 712                                return -EINVAL;
 713                        }
 714                        kfree(name);
 715                        break;
 716                case Opt_alloc:
 717                        name = match_strdup(&args[0]);
 718                        if (!name)
 719                                return -ENOMEM;
 720
 721                        if (strlen(name) == 7 &&
 722                                        !strncmp(name, "default", 7)) {
 723                                F2FS_OPTION(sbi).alloc_mode = ALLOC_MODE_DEFAULT;
 724                        } else if (strlen(name) == 5 &&
 725                                        !strncmp(name, "reuse", 5)) {
 726                                F2FS_OPTION(sbi).alloc_mode = ALLOC_MODE_REUSE;
 727                        } else {
 728                                kfree(name);
 729                                return -EINVAL;
 730                        }
 731                        kfree(name);
 732                        break;
 733                case Opt_fsync:
 734                        name = match_strdup(&args[0]);
 735                        if (!name)
 736                                return -ENOMEM;
 737                        if (strlen(name) == 5 &&
 738                                        !strncmp(name, "posix", 5)) {
 739                                F2FS_OPTION(sbi).fsync_mode = FSYNC_MODE_POSIX;
 740                        } else if (strlen(name) == 6 &&
 741                                        !strncmp(name, "strict", 6)) {
 742                                F2FS_OPTION(sbi).fsync_mode = FSYNC_MODE_STRICT;
 743                        } else {
 744                                kfree(name);
 745                                return -EINVAL;
 746                        }
 747                        kfree(name);
 748                        break;
 749                case Opt_test_dummy_encryption:
 750#ifdef CONFIG_F2FS_FS_ENCRYPTION
 751                        if (!f2fs_sb_has_encrypt(sb)) {
 752                                f2fs_msg(sb, KERN_ERR, "Encrypt feature is off");
 753                                return -EINVAL;
 754                        }
 755
 756                        F2FS_OPTION(sbi).test_dummy_encryption = true;
 757                        f2fs_msg(sb, KERN_INFO,
 758                                        "Test dummy encryption mode enabled");
 759#else
 760                        f2fs_msg(sb, KERN_INFO,
 761                                        "Test dummy encryption mount option ignored");
 762#endif
 763                        break;
 764                default:
 765                        f2fs_msg(sb, KERN_ERR,
 766                                "Unrecognized mount option \"%s\" or missing value",
 767                                p);
 768                        return -EINVAL;
 769                }
 770        }
 771#ifdef CONFIG_QUOTA
 772        if (f2fs_check_quota_options(sbi))
 773                return -EINVAL;
 774#endif
 775
 776        if (F2FS_IO_SIZE_BITS(sbi) && !test_opt(sbi, LFS)) {
 777                f2fs_msg(sb, KERN_ERR,
 778                                "Should set mode=lfs with %uKB-sized IO",
 779                                F2FS_IO_SIZE_KB(sbi));
 780                return -EINVAL;
 781        }
 782
 783        if (test_opt(sbi, INLINE_XATTR_SIZE)) {
 784                if (!f2fs_sb_has_extra_attr(sb) ||
 785                        !f2fs_sb_has_flexible_inline_xattr(sb)) {
 786                        f2fs_msg(sb, KERN_ERR,
 787                                        "extra_attr or flexible_inline_xattr "
 788                                        "feature is off");
 789                        return -EINVAL;
 790                }
 791                if (!test_opt(sbi, INLINE_XATTR)) {
 792                        f2fs_msg(sb, KERN_ERR,
 793                                        "inline_xattr_size option should be "
 794                                        "set with inline_xattr option");
 795                        return -EINVAL;
 796                }
 797                if (!F2FS_OPTION(sbi).inline_xattr_size ||
 798                        F2FS_OPTION(sbi).inline_xattr_size >=
 799                                        DEF_ADDRS_PER_INODE -
 800                                        F2FS_TOTAL_EXTRA_ATTR_SIZE -
 801                                        DEF_INLINE_RESERVED_SIZE -
 802                                        DEF_MIN_INLINE_SIZE) {
 803                        f2fs_msg(sb, KERN_ERR,
 804                                        "inline xattr size is out of range");
 805                        return -EINVAL;
 806                }
 807        }
 808
 809        /* Not pass down write hints if the number of active logs is lesser
 810         * than NR_CURSEG_TYPE.
 811         */
 812        if (F2FS_OPTION(sbi).active_logs != NR_CURSEG_TYPE)
 813                F2FS_OPTION(sbi).whint_mode = WHINT_MODE_OFF;
 814        return 0;
 815}
 816
 817static struct inode *f2fs_alloc_inode(struct super_block *sb)
 818{
 819        struct f2fs_inode_info *fi;
 820
 821        fi = kmem_cache_alloc(f2fs_inode_cachep, GFP_F2FS_ZERO);
 822        if (!fi)
 823                return NULL;
 824
 825        init_once((void *) fi);
 826
 827        /* Initialize f2fs-specific inode info */
 828        atomic_set(&fi->dirty_pages, 0);
 829        fi->i_current_depth = 1;
 830        init_rwsem(&fi->i_sem);
 831        INIT_LIST_HEAD(&fi->dirty_list);
 832        INIT_LIST_HEAD(&fi->gdirty_list);
 833        INIT_LIST_HEAD(&fi->inmem_ilist);
 834        INIT_LIST_HEAD(&fi->inmem_pages);
 835        mutex_init(&fi->inmem_lock);
 836        init_rwsem(&fi->dio_rwsem[READ]);
 837        init_rwsem(&fi->dio_rwsem[WRITE]);
 838        init_rwsem(&fi->i_mmap_sem);
 839        init_rwsem(&fi->i_xattr_sem);
 840
 841        /* Will be used by directory only */
 842        fi->i_dir_level = F2FS_SB(sb)->dir_level;
 843
 844        return &fi->vfs_inode;
 845}
 846
 847static int f2fs_drop_inode(struct inode *inode)
 848{
 849        int ret;
 850        /*
 851         * This is to avoid a deadlock condition like below.
 852         * writeback_single_inode(inode)
 853         *  - f2fs_write_data_page
 854         *    - f2fs_gc -> iput -> evict
 855         *       - inode_wait_for_writeback(inode)
 856         */
 857        if ((!inode_unhashed(inode) && inode->i_state & I_SYNC)) {
 858                if (!inode->i_nlink && !is_bad_inode(inode)) {
 859                        /* to avoid evict_inode call simultaneously */
 860                        atomic_inc(&inode->i_count);
 861                        spin_unlock(&inode->i_lock);
 862
 863                        /* some remained atomic pages should discarded */
 864                        if (f2fs_is_atomic_file(inode))
 865                                drop_inmem_pages(inode);
 866
 867                        /* should remain fi->extent_tree for writepage */
 868                        f2fs_destroy_extent_node(inode);
 869
 870                        sb_start_intwrite(inode->i_sb);
 871                        f2fs_i_size_write(inode, 0);
 872
 873                        if (F2FS_HAS_BLOCKS(inode))
 874                                f2fs_truncate(inode);
 875
 876                        sb_end_intwrite(inode->i_sb);
 877
 878                        spin_lock(&inode->i_lock);
 879                        atomic_dec(&inode->i_count);
 880                }
 881                trace_f2fs_drop_inode(inode, 0);
 882                return 0;
 883        }
 884        ret = generic_drop_inode(inode);
 885        trace_f2fs_drop_inode(inode, ret);
 886        return ret;
 887}
 888
 889int f2fs_inode_dirtied(struct inode *inode, bool sync)
 890{
 891        struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
 892        int ret = 0;
 893
 894        spin_lock(&sbi->inode_lock[DIRTY_META]);
 895        if (is_inode_flag_set(inode, FI_DIRTY_INODE)) {
 896                ret = 1;
 897        } else {
 898                set_inode_flag(inode, FI_DIRTY_INODE);
 899                stat_inc_dirty_inode(sbi, DIRTY_META);
 900        }
 901        if (sync && list_empty(&F2FS_I(inode)->gdirty_list)) {
 902                list_add_tail(&F2FS_I(inode)->gdirty_list,
 903                                &sbi->inode_list[DIRTY_META]);
 904                inc_page_count(sbi, F2FS_DIRTY_IMETA);
 905        }
 906        spin_unlock(&sbi->inode_lock[DIRTY_META]);
 907        return ret;
 908}
 909
 910void f2fs_inode_synced(struct inode *inode)
 911{
 912        struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
 913
 914        spin_lock(&sbi->inode_lock[DIRTY_META]);
 915        if (!is_inode_flag_set(inode, FI_DIRTY_INODE)) {
 916                spin_unlock(&sbi->inode_lock[DIRTY_META]);
 917                return;
 918        }
 919        if (!list_empty(&F2FS_I(inode)->gdirty_list)) {
 920                list_del_init(&F2FS_I(inode)->gdirty_list);
 921                dec_page_count(sbi, F2FS_DIRTY_IMETA);
 922        }
 923        clear_inode_flag(inode, FI_DIRTY_INODE);
 924        clear_inode_flag(inode, FI_AUTO_RECOVER);
 925        stat_dec_dirty_inode(F2FS_I_SB(inode), DIRTY_META);
 926        spin_unlock(&sbi->inode_lock[DIRTY_META]);
 927}
 928
 929/*
 930 * f2fs_dirty_inode() is called from __mark_inode_dirty()
 931 *
 932 * We should call set_dirty_inode to write the dirty inode through write_inode.
 933 */
 934static void f2fs_dirty_inode(struct inode *inode, int flags)
 935{
 936        struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
 937
 938        if (inode->i_ino == F2FS_NODE_INO(sbi) ||
 939                        inode->i_ino == F2FS_META_INO(sbi))
 940                return;
 941
 942        if (flags == I_DIRTY_TIME)
 943                return;
 944
 945        if (is_inode_flag_set(inode, FI_AUTO_RECOVER))
 946                clear_inode_flag(inode, FI_AUTO_RECOVER);
 947
 948        f2fs_inode_dirtied(inode, false);
 949}
 950
 951static void f2fs_i_callback(struct rcu_head *head)
 952{
 953        struct inode *inode = container_of(head, struct inode, i_rcu);
 954        kmem_cache_free(f2fs_inode_cachep, F2FS_I(inode));
 955}
 956
 957static void f2fs_destroy_inode(struct inode *inode)
 958{
 959        call_rcu(&inode->i_rcu, f2fs_i_callback);
 960}
 961
 962static void destroy_percpu_info(struct f2fs_sb_info *sbi)
 963{
 964        percpu_counter_destroy(&sbi->alloc_valid_block_count);
 965        percpu_counter_destroy(&sbi->total_valid_inode_count);
 966}
 967
 968static void destroy_device_list(struct f2fs_sb_info *sbi)
 969{
 970        int i;
 971
 972        for (i = 0; i < sbi->s_ndevs; i++) {
 973                blkdev_put(FDEV(i).bdev, FMODE_EXCL);
 974#ifdef CONFIG_BLK_DEV_ZONED
 975                kfree(FDEV(i).blkz_type);
 976#endif
 977        }
 978        kfree(sbi->devs);
 979}
 980
 981static void f2fs_put_super(struct super_block *sb)
 982{
 983        struct f2fs_sb_info *sbi = F2FS_SB(sb);
 984        int i;
 985        bool dropped;
 986
 987        f2fs_quota_off_umount(sb);
 988
 989        /* prevent remaining shrinker jobs */
 990        mutex_lock(&sbi->umount_mutex);
 991
 992        /*
 993         * We don't need to do checkpoint when superblock is clean.
 994         * But, the previous checkpoint was not done by umount, it needs to do
 995         * clean checkpoint again.
 996         */
 997        if (is_sbi_flag_set(sbi, SBI_IS_DIRTY) ||
 998                        !is_set_ckpt_flags(sbi, CP_UMOUNT_FLAG)) {
 999                struct cp_control cpc = {
1000                        .reason = CP_UMOUNT,
1001                };
1002                write_checkpoint(sbi, &cpc);
1003        }
1004
1005        /* be sure to wait for any on-going discard commands */
1006        dropped = f2fs_wait_discard_bios(sbi);
1007
1008        if (f2fs_discard_en(sbi) && !sbi->discard_blks && !dropped) {
1009                struct cp_control cpc = {
1010                        .reason = CP_UMOUNT | CP_TRIMMED,
1011                };
1012                write_checkpoint(sbi, &cpc);
1013        }
1014
1015        /* write_checkpoint can update stat informaion */
1016        f2fs_destroy_stats(sbi);
1017
1018        /*
1019         * normally superblock is clean, so we need to release this.
1020         * In addition, EIO will skip do checkpoint, we need this as well.
1021         */
1022        release_ino_entry(sbi, true);
1023
1024        f2fs_leave_shrinker(sbi);
1025        mutex_unlock(&sbi->umount_mutex);
1026
1027        /* our cp_error case, we can wait for any writeback page */
1028        f2fs_flush_merged_writes(sbi);
1029
1030        iput(sbi->node_inode);
1031        iput(sbi->meta_inode);
1032
1033        /* destroy f2fs internal modules */
1034        destroy_node_manager(sbi);
1035        destroy_segment_manager(sbi);
1036
1037        kfree(sbi->ckpt);
1038
1039        f2fs_unregister_sysfs(sbi);
1040
1041        sb->s_fs_info = NULL;
1042        if (sbi->s_chksum_driver)
1043                crypto_free_shash(sbi->s_chksum_driver);
1044        kfree(sbi->raw_super);
1045
1046        destroy_device_list(sbi);
1047        mempool_destroy(sbi->write_io_dummy);
1048#ifdef CONFIG_QUOTA
1049        for (i = 0; i < MAXQUOTAS; i++)
1050                kfree(F2FS_OPTION(sbi).s_qf_names[i]);
1051#endif
1052        destroy_percpu_info(sbi);
1053        for (i = 0; i < NR_PAGE_TYPE; i++)
1054                kfree(sbi->write_io[i]);
1055        kfree(sbi);
1056}
1057
1058int f2fs_sync_fs(struct super_block *sb, int sync)
1059{
1060        struct f2fs_sb_info *sbi = F2FS_SB(sb);
1061        int err = 0;
1062
1063        if (unlikely(f2fs_cp_error(sbi)))
1064                return 0;
1065
1066        trace_f2fs_sync_fs(sb, sync);
1067
1068        if (unlikely(is_sbi_flag_set(sbi, SBI_POR_DOING)))
1069                return -EAGAIN;
1070
1071        if (sync) {
1072                struct cp_control cpc;
1073
1074                cpc.reason = __get_cp_reason(sbi);
1075
1076                mutex_lock(&sbi->gc_mutex);
1077                err = write_checkpoint(sbi, &cpc);
1078                mutex_unlock(&sbi->gc_mutex);
1079        }
1080        f2fs_trace_ios(NULL, 1);
1081
1082        return err;
1083}
1084
1085static int f2fs_freeze(struct super_block *sb)
1086{
1087        if (f2fs_readonly(sb))
1088                return 0;
1089
1090        /* IO error happened before */
1091        if (unlikely(f2fs_cp_error(F2FS_SB(sb))))
1092                return -EIO;
1093
1094        /* must be clean, since sync_filesystem() was already called */
1095        if (is_sbi_flag_set(F2FS_SB(sb), SBI_IS_DIRTY))
1096                return -EINVAL;
1097        return 0;
1098}
1099
1100static int f2fs_unfreeze(struct super_block *sb)
1101{
1102        return 0;
1103}
1104
1105#ifdef CONFIG_QUOTA
1106static int f2fs_statfs_project(struct super_block *sb,
1107                                kprojid_t projid, struct kstatfs *buf)
1108{
1109        struct kqid qid;
1110        struct dquot *dquot;
1111        u64 limit;
1112        u64 curblock;
1113
1114        qid = make_kqid_projid(projid);
1115        dquot = dqget(sb, qid);
1116        if (IS_ERR(dquot))
1117                return PTR_ERR(dquot);
1118        spin_lock(&dq_data_lock);
1119
1120        limit = (dquot->dq_dqb.dqb_bsoftlimit ?
1121                 dquot->dq_dqb.dqb_bsoftlimit :
1122                 dquot->dq_dqb.dqb_bhardlimit) >> sb->s_blocksize_bits;
1123        if (limit && buf->f_blocks > limit) {
1124                curblock = dquot->dq_dqb.dqb_curspace >> sb->s_blocksize_bits;
1125                buf->f_blocks = limit;
1126                buf->f_bfree = buf->f_bavail =
1127                        (buf->f_blocks > curblock) ?
1128                         (buf->f_blocks - curblock) : 0;
1129        }
1130
1131        limit = dquot->dq_dqb.dqb_isoftlimit ?
1132                dquot->dq_dqb.dqb_isoftlimit :
1133                dquot->dq_dqb.dqb_ihardlimit;
1134        if (limit && buf->f_files > limit) {
1135                buf->f_files = limit;
1136                buf->f_ffree =
1137                        (buf->f_files > dquot->dq_dqb.dqb_curinodes) ?
1138                         (buf->f_files - dquot->dq_dqb.dqb_curinodes) : 0;
1139        }
1140
1141        spin_unlock(&dq_data_lock);
1142        dqput(dquot);
1143        return 0;
1144}
1145#endif
1146
1147static int f2fs_statfs(struct dentry *dentry, struct kstatfs *buf)
1148{
1149        struct super_block *sb = dentry->d_sb;
1150        struct f2fs_sb_info *sbi = F2FS_SB(sb);
1151        u64 id = huge_encode_dev(sb->s_bdev->bd_dev);
1152        block_t total_count, user_block_count, start_count;
1153        u64 avail_node_count;
1154
1155        total_count = le64_to_cpu(sbi->raw_super->block_count);
1156        user_block_count = sbi->user_block_count;
1157        start_count = le32_to_cpu(sbi->raw_super->segment0_blkaddr);
1158        buf->f_type = F2FS_SUPER_MAGIC;
1159        buf->f_bsize = sbi->blocksize;
1160
1161        buf->f_blocks = total_count - start_count;
1162        buf->f_bfree = user_block_count - valid_user_blocks(sbi) -
1163                                                sbi->current_reserved_blocks;
1164        if (buf->f_bfree > F2FS_OPTION(sbi).root_reserved_blocks)
1165                buf->f_bavail = buf->f_bfree -
1166                                F2FS_OPTION(sbi).root_reserved_blocks;
1167        else
1168                buf->f_bavail = 0;
1169
1170        avail_node_count = sbi->total_node_count - sbi->nquota_files -
1171                                                F2FS_RESERVED_NODE_NUM;
1172
1173        if (avail_node_count > user_block_count) {
1174                buf->f_files = user_block_count;
1175                buf->f_ffree = buf->f_bavail;
1176        } else {
1177                buf->f_files = avail_node_count;
1178                buf->f_ffree = min(avail_node_count - valid_node_count(sbi),
1179                                        buf->f_bavail);
1180        }
1181
1182        buf->f_namelen = F2FS_NAME_LEN;
1183        buf->f_fsid.val[0] = (u32)id;
1184        buf->f_fsid.val[1] = (u32)(id >> 32);
1185
1186#ifdef CONFIG_QUOTA
1187        if (is_inode_flag_set(dentry->d_inode, FI_PROJ_INHERIT) &&
1188                        sb_has_quota_limits_enabled(sb, PRJQUOTA)) {
1189                f2fs_statfs_project(sb, F2FS_I(dentry->d_inode)->i_projid, buf);
1190        }
1191#endif
1192        return 0;
1193}
1194
1195static inline void f2fs_show_quota_options(struct seq_file *seq,
1196                                           struct super_block *sb)
1197{
1198#ifdef CONFIG_QUOTA
1199        struct f2fs_sb_info *sbi = F2FS_SB(sb);
1200
1201        if (F2FS_OPTION(sbi).s_jquota_fmt) {
1202                char *fmtname = "";
1203
1204                switch (F2FS_OPTION(sbi).s_jquota_fmt) {
1205                case QFMT_VFS_OLD:
1206                        fmtname = "vfsold";
1207                        break;
1208                case QFMT_VFS_V0:
1209                        fmtname = "vfsv0";
1210                        break;
1211                case QFMT_VFS_V1:
1212                        fmtname = "vfsv1";
1213                        break;
1214                }
1215                seq_printf(seq, ",jqfmt=%s", fmtname);
1216        }
1217
1218        if (F2FS_OPTION(sbi).s_qf_names[USRQUOTA])
1219                seq_show_option(seq, "usrjquota",
1220                        F2FS_OPTION(sbi).s_qf_names[USRQUOTA]);
1221
1222        if (F2FS_OPTION(sbi).s_qf_names[GRPQUOTA])
1223                seq_show_option(seq, "grpjquota",
1224                        F2FS_OPTION(sbi).s_qf_names[GRPQUOTA]);
1225
1226        if (F2FS_OPTION(sbi).s_qf_names[PRJQUOTA])
1227                seq_show_option(seq, "prjjquota",
1228                        F2FS_OPTION(sbi).s_qf_names[PRJQUOTA]);
1229#endif
1230}
1231
1232static int f2fs_show_options(struct seq_file *seq, struct dentry *root)
1233{
1234        struct f2fs_sb_info *sbi = F2FS_SB(root->d_sb);
1235
1236        if (!f2fs_readonly(sbi->sb) && test_opt(sbi, BG_GC)) {
1237                if (test_opt(sbi, FORCE_FG_GC))
1238                        seq_printf(seq, ",background_gc=%s", "sync");
1239                else
1240                        seq_printf(seq, ",background_gc=%s", "on");
1241        } else {
1242                seq_printf(seq, ",background_gc=%s", "off");
1243        }
1244        if (test_opt(sbi, DISABLE_ROLL_FORWARD))
1245                seq_puts(seq, ",disable_roll_forward");
1246        if (test_opt(sbi, DISCARD))
1247                seq_puts(seq, ",discard");
1248        if (test_opt(sbi, NOHEAP))
1249                seq_puts(seq, ",no_heap");
1250        else
1251                seq_puts(seq, ",heap");
1252#ifdef CONFIG_F2FS_FS_XATTR
1253        if (test_opt(sbi, XATTR_USER))
1254                seq_puts(seq, ",user_xattr");
1255        else
1256                seq_puts(seq, ",nouser_xattr");
1257        if (test_opt(sbi, INLINE_XATTR))
1258                seq_puts(seq, ",inline_xattr");
1259        else
1260                seq_puts(seq, ",noinline_xattr");
1261        if (test_opt(sbi, INLINE_XATTR_SIZE))
1262                seq_printf(seq, ",inline_xattr_size=%u",
1263                                        F2FS_OPTION(sbi).inline_xattr_size);
1264#endif
1265#ifdef CONFIG_F2FS_FS_POSIX_ACL
1266        if (test_opt(sbi, POSIX_ACL))
1267                seq_puts(seq, ",acl");
1268        else
1269                seq_puts(seq, ",noacl");
1270#endif
1271        if (test_opt(sbi, DISABLE_EXT_IDENTIFY))
1272                seq_puts(seq, ",disable_ext_identify");
1273        if (test_opt(sbi, INLINE_DATA))
1274                seq_puts(seq, ",inline_data");
1275        else
1276                seq_puts(seq, ",noinline_data");
1277        if (test_opt(sbi, INLINE_DENTRY))
1278                seq_puts(seq, ",inline_dentry");
1279        else
1280                seq_puts(seq, ",noinline_dentry");
1281        if (!f2fs_readonly(sbi->sb) && test_opt(sbi, FLUSH_MERGE))
1282                seq_puts(seq, ",flush_merge");
1283        if (test_opt(sbi, NOBARRIER))
1284                seq_puts(seq, ",nobarrier");
1285        if (test_opt(sbi, FASTBOOT))
1286                seq_puts(seq, ",fastboot");
1287        if (test_opt(sbi, EXTENT_CACHE))
1288                seq_puts(seq, ",extent_cache");
1289        else
1290                seq_puts(seq, ",noextent_cache");
1291        if (test_opt(sbi, DATA_FLUSH))
1292                seq_puts(seq, ",data_flush");
1293
1294        seq_puts(seq, ",mode=");
1295        if (test_opt(sbi, ADAPTIVE))
1296                seq_puts(seq, "adaptive");
1297        else if (test_opt(sbi, LFS))
1298                seq_puts(seq, "lfs");
1299        seq_printf(seq, ",active_logs=%u", F2FS_OPTION(sbi).active_logs);
1300        if (test_opt(sbi, RESERVE_ROOT))
1301                seq_printf(seq, ",reserve_root=%u,resuid=%u,resgid=%u",
1302                                F2FS_OPTION(sbi).root_reserved_blocks,
1303                                from_kuid_munged(&init_user_ns,
1304                                        F2FS_OPTION(sbi).s_resuid),
1305                                from_kgid_munged(&init_user_ns,
1306                                        F2FS_OPTION(sbi).s_resgid));
1307        if (F2FS_IO_SIZE_BITS(sbi))
1308                seq_printf(seq, ",io_size=%uKB", F2FS_IO_SIZE_KB(sbi));
1309#ifdef CONFIG_F2FS_FAULT_INJECTION
1310        if (test_opt(sbi, FAULT_INJECTION))
1311                seq_printf(seq, ",fault_injection=%u",
1312                                F2FS_OPTION(sbi).fault_info.inject_rate);
1313#endif
1314#ifdef CONFIG_QUOTA
1315        if (test_opt(sbi, QUOTA))
1316                seq_puts(seq, ",quota");
1317        if (test_opt(sbi, USRQUOTA))
1318                seq_puts(seq, ",usrquota");
1319        if (test_opt(sbi, GRPQUOTA))
1320                seq_puts(seq, ",grpquota");
1321        if (test_opt(sbi, PRJQUOTA))
1322                seq_puts(seq, ",prjquota");
1323#endif
1324        f2fs_show_quota_options(seq, sbi->sb);
1325        if (F2FS_OPTION(sbi).whint_mode == WHINT_MODE_USER)
1326                seq_printf(seq, ",whint_mode=%s", "user-based");
1327        else if (F2FS_OPTION(sbi).whint_mode == WHINT_MODE_FS)
1328                seq_printf(seq, ",whint_mode=%s", "fs-based");
1329#ifdef CONFIG_F2FS_FS_ENCRYPTION
1330        if (F2FS_OPTION(sbi).test_dummy_encryption)
1331                seq_puts(seq, ",test_dummy_encryption");
1332#endif
1333
1334        if (F2FS_OPTION(sbi).alloc_mode == ALLOC_MODE_DEFAULT)
1335                seq_printf(seq, ",alloc_mode=%s", "default");
1336        else if (F2FS_OPTION(sbi).alloc_mode == ALLOC_MODE_REUSE)
1337                seq_printf(seq, ",alloc_mode=%s", "reuse");
1338
1339        if (F2FS_OPTION(sbi).fsync_mode == FSYNC_MODE_POSIX)
1340                seq_printf(seq, ",fsync_mode=%s", "posix");
1341        else if (F2FS_OPTION(sbi).fsync_mode == FSYNC_MODE_STRICT)
1342                seq_printf(seq, ",fsync_mode=%s", "strict");
1343        return 0;
1344}
1345
1346static void default_options(struct f2fs_sb_info *sbi)
1347{
1348        /* init some FS parameters */
1349        F2FS_OPTION(sbi).active_logs = NR_CURSEG_TYPE;
1350        F2FS_OPTION(sbi).inline_xattr_size = DEFAULT_INLINE_XATTR_ADDRS;
1351        F2FS_OPTION(sbi).whint_mode = WHINT_MODE_OFF;
1352        F2FS_OPTION(sbi).alloc_mode = ALLOC_MODE_DEFAULT;
1353        F2FS_OPTION(sbi).fsync_mode = FSYNC_MODE_POSIX;
1354        F2FS_OPTION(sbi).test_dummy_encryption = false;
1355        sbi->readdir_ra = 1;
1356
1357        set_opt(sbi, BG_GC);
1358        set_opt(sbi, INLINE_XATTR);
1359        set_opt(sbi, INLINE_DATA);
1360        set_opt(sbi, INLINE_DENTRY);
1361        set_opt(sbi, EXTENT_CACHE);
1362        set_opt(sbi, NOHEAP);
1363        sbi->sb->s_flags |= SB_LAZYTIME;
1364        set_opt(sbi, FLUSH_MERGE);
1365        if (f2fs_sb_has_blkzoned(sbi->sb)) {
1366                set_opt_mode(sbi, F2FS_MOUNT_LFS);
1367                set_opt(sbi, DISCARD);
1368        } else {
1369                set_opt_mode(sbi, F2FS_MOUNT_ADAPTIVE);
1370        }
1371
1372#ifdef CONFIG_F2FS_FS_XATTR
1373        set_opt(sbi, XATTR_USER);
1374#endif
1375#ifdef CONFIG_F2FS_FS_POSIX_ACL
1376        set_opt(sbi, POSIX_ACL);
1377#endif
1378
1379#ifdef CONFIG_F2FS_FAULT_INJECTION
1380        f2fs_build_fault_attr(sbi, 0);
1381#endif
1382}
1383
1384#ifdef CONFIG_QUOTA
1385static int f2fs_enable_quotas(struct super_block *sb);
1386#endif
1387static int f2fs_remount(struct super_block *sb, int *flags, char *data)
1388{
1389        struct f2fs_sb_info *sbi = F2FS_SB(sb);
1390        struct f2fs_mount_info org_mount_opt;
1391        unsigned long old_sb_flags;
1392        int err;
1393        bool need_restart_gc = false;
1394        bool need_stop_gc = false;
1395        bool no_extent_cache = !test_opt(sbi, EXTENT_CACHE);
1396#ifdef CONFIG_QUOTA
1397        int i, j;
1398#endif
1399
1400        /*
1401         * Save the old mount options in case we
1402         * need to restore them.
1403         */
1404        org_mount_opt = sbi->mount_opt;
1405        old_sb_flags = sb->s_flags;
1406
1407#ifdef CONFIG_QUOTA
1408        org_mount_opt.s_jquota_fmt = F2FS_OPTION(sbi).s_jquota_fmt;
1409        for (i = 0; i < MAXQUOTAS; i++) {
1410                if (F2FS_OPTION(sbi).s_qf_names[i]) {
1411                        org_mount_opt.s_qf_names[i] =
1412                                kstrdup(F2FS_OPTION(sbi).s_qf_names[i],
1413                                GFP_KERNEL);
1414                        if (!org_mount_opt.s_qf_names[i]) {
1415                                for (j = 0; j < i; j++)
1416                                        kfree(org_mount_opt.s_qf_names[j]);
1417                                return -ENOMEM;
1418                        }
1419                } else {
1420                        org_mount_opt.s_qf_names[i] = NULL;
1421                }
1422        }
1423#endif
1424
1425        /* recover superblocks we couldn't write due to previous RO mount */
1426        if (!(*flags & SB_RDONLY) && is_sbi_flag_set(sbi, SBI_NEED_SB_WRITE)) {
1427                err = f2fs_commit_super(sbi, false);
1428                f2fs_msg(sb, KERN_INFO,
1429                        "Try to recover all the superblocks, ret: %d", err);
1430                if (!err)
1431                        clear_sbi_flag(sbi, SBI_NEED_SB_WRITE);
1432        }
1433
1434        default_options(sbi);
1435
1436        /* parse mount options */
1437        err = parse_options(sb, data);
1438        if (err)
1439                goto restore_opts;
1440
1441        /*
1442         * Previous and new state of filesystem is RO,
1443         * so skip checking GC and FLUSH_MERGE conditions.
1444         */
1445        if (f2fs_readonly(sb) && (*flags & SB_RDONLY))
1446                goto skip;
1447
1448#ifdef CONFIG_QUOTA
1449        if (!f2fs_readonly(sb) && (*flags & SB_RDONLY)) {
1450                err = dquot_suspend(sb, -1);
1451                if (err < 0)
1452                        goto restore_opts;
1453        } else if (f2fs_readonly(sb) && !(*flags & MS_RDONLY)) {
1454                /* dquot_resume needs RW */
1455                sb->s_flags &= ~SB_RDONLY;
1456                if (sb_any_quota_suspended(sb)) {
1457                        dquot_resume(sb, -1);
1458                } else if (f2fs_sb_has_quota_ino(sb)) {
1459                        err = f2fs_enable_quotas(sb);
1460                        if (err)
1461                                goto restore_opts;
1462                }
1463        }
1464#endif
1465        /* disallow enable/disable extent_cache dynamically */
1466        if (no_extent_cache == !!test_opt(sbi, EXTENT_CACHE)) {
1467                err = -EINVAL;
1468                f2fs_msg(sbi->sb, KERN_WARNING,
1469                                "switch extent_cache option is not allowed");
1470                goto restore_opts;
1471        }
1472
1473        /*
1474         * We stop the GC thread if FS is mounted as RO
1475         * or if background_gc = off is passed in mount
1476         * option. Also sync the filesystem.
1477         */
1478        if ((*flags & SB_RDONLY) || !test_opt(sbi, BG_GC)) {
1479                if (sbi->gc_thread) {
1480                        stop_gc_thread(sbi);
1481                        need_restart_gc = true;
1482                }
1483        } else if (!sbi->gc_thread) {
1484                err = start_gc_thread(sbi);
1485                if (err)
1486                        goto restore_opts;
1487                need_stop_gc = true;
1488        }
1489
1490        if (*flags & SB_RDONLY ||
1491                F2FS_OPTION(sbi).whint_mode != org_mount_opt.whint_mode) {
1492                writeback_inodes_sb(sb, WB_REASON_SYNC);
1493                sync_inodes_sb(sb);
1494
1495                set_sbi_flag(sbi, SBI_IS_DIRTY);
1496                set_sbi_flag(sbi, SBI_IS_CLOSE);
1497                f2fs_sync_fs(sb, 1);
1498                clear_sbi_flag(sbi, SBI_IS_CLOSE);
1499        }
1500
1501        /*
1502         * We stop issue flush thread if FS is mounted as RO
1503         * or if flush_merge is not passed in mount option.
1504         */
1505        if ((*flags & SB_RDONLY) || !test_opt(sbi, FLUSH_MERGE)) {
1506                clear_opt(sbi, FLUSH_MERGE);
1507                destroy_flush_cmd_control(sbi, false);
1508        } else {
1509                err = create_flush_cmd_control(sbi);
1510                if (err)
1511                        goto restore_gc;
1512        }
1513skip:
1514#ifdef CONFIG_QUOTA
1515        /* Release old quota file names */
1516        for (i = 0; i < MAXQUOTAS; i++)
1517                kfree(org_mount_opt.s_qf_names[i]);
1518#endif
1519        /* Update the POSIXACL Flag */
1520        sb->s_flags = (sb->s_flags & ~SB_POSIXACL) |
1521                (test_opt(sbi, POSIX_ACL) ? SB_POSIXACL : 0);
1522
1523        limit_reserve_root(sbi);
1524        return 0;
1525restore_gc:
1526        if (need_restart_gc) {
1527                if (start_gc_thread(sbi))
1528                        f2fs_msg(sbi->sb, KERN_WARNING,
1529                                "background gc thread has stopped");
1530        } else if (need_stop_gc) {
1531                stop_gc_thread(sbi);
1532        }
1533restore_opts:
1534#ifdef CONFIG_QUOTA
1535        F2FS_OPTION(sbi).s_jquota_fmt = org_mount_opt.s_jquota_fmt;
1536        for (i = 0; i < MAXQUOTAS; i++) {
1537                kfree(F2FS_OPTION(sbi).s_qf_names[i]);
1538                F2FS_OPTION(sbi).s_qf_names[i] = org_mount_opt.s_qf_names[i];
1539        }
1540#endif
1541        sbi->mount_opt = org_mount_opt;
1542        sb->s_flags = old_sb_flags;
1543        return err;
1544}
1545
1546#ifdef CONFIG_QUOTA
1547/* Read data from quotafile */
1548static ssize_t f2fs_quota_read(struct super_block *sb, int type, char *data,
1549                               size_t len, loff_t off)
1550{
1551        struct inode *inode = sb_dqopt(sb)->files[type];
1552        struct address_space *mapping = inode->i_mapping;
1553        block_t blkidx = F2FS_BYTES_TO_BLK(off);
1554        int offset = off & (sb->s_blocksize - 1);
1555        int tocopy;
1556        size_t toread;
1557        loff_t i_size = i_size_read(inode);
1558        struct page *page;
1559        char *kaddr;
1560
1561        if (off > i_size)
1562                return 0;
1563
1564        if (off + len > i_size)
1565                len = i_size - off;
1566        toread = len;
1567        while (toread > 0) {
1568                tocopy = min_t(unsigned long, sb->s_blocksize - offset, toread);
1569repeat:
1570                page = read_cache_page_gfp(mapping, blkidx, GFP_NOFS);
1571                if (IS_ERR(page)) {
1572                        if (PTR_ERR(page) == -ENOMEM) {
1573                                congestion_wait(BLK_RW_ASYNC, HZ/50);
1574                                goto repeat;
1575                        }
1576                        return PTR_ERR(page);
1577                }
1578
1579                lock_page(page);
1580
1581                if (unlikely(page->mapping != mapping)) {
1582                        f2fs_put_page(page, 1);
1583                        goto repeat;
1584                }
1585                if (unlikely(!PageUptodate(page))) {
1586                        f2fs_put_page(page, 1);
1587                        return -EIO;
1588                }
1589
1590                kaddr = kmap_atomic(page);
1591                memcpy(data, kaddr + offset, tocopy);
1592                kunmap_atomic(kaddr);
1593                f2fs_put_page(page, 1);
1594
1595                offset = 0;
1596                toread -= tocopy;
1597                data += tocopy;
1598                blkidx++;
1599        }
1600        return len;
1601}
1602
1603/* Write to quotafile */
1604static ssize_t f2fs_quota_write(struct super_block *sb, int type,
1605                                const char *data, size_t len, loff_t off)
1606{
1607        struct inode *inode = sb_dqopt(sb)->files[type];
1608        struct address_space *mapping = inode->i_mapping;
1609        const struct address_space_operations *a_ops = mapping->a_ops;
1610        int offset = off & (sb->s_blocksize - 1);
1611        size_t towrite = len;
1612        struct page *page;
1613        char *kaddr;
1614        int err = 0;
1615        int tocopy;
1616
1617        while (towrite > 0) {
1618                tocopy = min_t(unsigned long, sb->s_blocksize - offset,
1619                                                                towrite);
1620retry:
1621                err = a_ops->write_begin(NULL, mapping, off, tocopy, 0,
1622                                                        &page, NULL);
1623                if (unlikely(err)) {
1624                        if (err == -ENOMEM) {
1625                                congestion_wait(BLK_RW_ASYNC, HZ/50);
1626                                goto retry;
1627                        }
1628                        break;
1629                }
1630
1631                kaddr = kmap_atomic(page);
1632                memcpy(kaddr + offset, data, tocopy);
1633                kunmap_atomic(kaddr);
1634                flush_dcache_page(page);
1635
1636                a_ops->write_end(NULL, mapping, off, tocopy, tocopy,
1637                                                page, NULL);
1638                offset = 0;
1639                towrite -= tocopy;
1640                off += tocopy;
1641                data += tocopy;
1642                cond_resched();
1643        }
1644
1645        if (len == towrite)
1646                return err;
1647        inode->i_mtime = inode->i_ctime = current_time(inode);
1648        f2fs_mark_inode_dirty_sync(inode, false);
1649        return len - towrite;
1650}
1651
1652static struct dquot **f2fs_get_dquots(struct inode *inode)
1653{
1654        return F2FS_I(inode)->i_dquot;
1655}
1656
1657static qsize_t *f2fs_get_reserved_space(struct inode *inode)
1658{
1659        return &F2FS_I(inode)->i_reserved_quota;
1660}
1661
1662static int f2fs_quota_on_mount(struct f2fs_sb_info *sbi, int type)
1663{
1664        return dquot_quota_on_mount(sbi->sb, F2FS_OPTION(sbi).s_qf_names[type],
1665                                        F2FS_OPTION(sbi).s_jquota_fmt, type);
1666}
1667
1668int f2fs_enable_quota_files(struct f2fs_sb_info *sbi, bool rdonly)
1669{
1670        int enabled = 0;
1671        int i, err;
1672
1673        if (f2fs_sb_has_quota_ino(sbi->sb) && rdonly) {
1674                err = f2fs_enable_quotas(sbi->sb);
1675                if (err) {
1676                        f2fs_msg(sbi->sb, KERN_ERR,
1677                                        "Cannot turn on quota_ino: %d", err);
1678                        return 0;
1679                }
1680                return 1;
1681        }
1682
1683        for (i = 0; i < MAXQUOTAS; i++) {
1684                if (F2FS_OPTION(sbi).s_qf_names[i]) {
1685                        err = f2fs_quota_on_mount(sbi, i);
1686                        if (!err) {
1687                                enabled = 1;
1688                                continue;
1689                        }
1690                        f2fs_msg(sbi->sb, KERN_ERR,
1691                                "Cannot turn on quotas: %d on %d", err, i);
1692                }
1693        }
1694        return enabled;
1695}
1696
1697static int f2fs_quota_enable(struct super_block *sb, int type, int format_id,
1698                             unsigned int flags)
1699{
1700        struct inode *qf_inode;
1701        unsigned long qf_inum;
1702        int err;
1703
1704        BUG_ON(!f2fs_sb_has_quota_ino(sb));
1705
1706        qf_inum = f2fs_qf_ino(sb, type);
1707        if (!qf_inum)
1708                return -EPERM;
1709
1710        qf_inode = f2fs_iget(sb, qf_inum);
1711        if (IS_ERR(qf_inode)) {
1712                f2fs_msg(sb, KERN_ERR,
1713                        "Bad quota inode %u:%lu", type, qf_inum);
1714                return PTR_ERR(qf_inode);
1715        }
1716
1717        /* Don't account quota for quota files to avoid recursion */
1718        qf_inode->i_flags |= S_NOQUOTA;
1719        err = dquot_enable(qf_inode, type, format_id, flags);
1720        iput(qf_inode);
1721        return err;
1722}
1723
1724static int f2fs_enable_quotas(struct super_block *sb)
1725{
1726        int type, err = 0;
1727        unsigned long qf_inum;
1728        bool quota_mopt[MAXQUOTAS] = {
1729                test_opt(F2FS_SB(sb), USRQUOTA),
1730                test_opt(F2FS_SB(sb), GRPQUOTA),
1731                test_opt(F2FS_SB(sb), PRJQUOTA),
1732        };
1733
1734        sb_dqopt(sb)->flags |= DQUOT_QUOTA_SYS_FILE | DQUOT_NOLIST_DIRTY;
1735        for (type = 0; type < MAXQUOTAS; type++) {
1736                qf_inum = f2fs_qf_ino(sb, type);
1737                if (qf_inum) {
1738                        err = f2fs_quota_enable(sb, type, QFMT_VFS_V1,
1739                                DQUOT_USAGE_ENABLED |
1740                                (quota_mopt[type] ? DQUOT_LIMITS_ENABLED : 0));
1741                        if (err) {
1742                                f2fs_msg(sb, KERN_ERR,
1743                                        "Failed to enable quota tracking "
1744                                        "(type=%d, err=%d). Please run "
1745                                        "fsck to fix.", type, err);
1746                                for (type--; type >= 0; type--)
1747                                        dquot_quota_off(sb, type);
1748                                return err;
1749                        }
1750                }
1751        }
1752        return 0;
1753}
1754
1755static int f2fs_quota_sync(struct super_block *sb, int type)
1756{
1757        struct quota_info *dqopt = sb_dqopt(sb);
1758        int cnt;
1759        int ret;
1760
1761        ret = dquot_writeback_dquots(sb, type);
1762        if (ret)
1763                return ret;
1764
1765        /*
1766         * Now when everything is written we can discard the pagecache so
1767         * that userspace sees the changes.
1768         */
1769        for (cnt = 0; cnt < MAXQUOTAS; cnt++) {
1770                if (type != -1 && cnt != type)
1771                        continue;
1772                if (!sb_has_quota_active(sb, cnt))
1773                        continue;
1774
1775                ret = filemap_write_and_wait(dqopt->files[cnt]->i_mapping);
1776                if (ret)
1777                        return ret;
1778
1779                inode_lock(dqopt->files[cnt]);
1780                truncate_inode_pages(&dqopt->files[cnt]->i_data, 0);
1781                inode_unlock(dqopt->files[cnt]);
1782        }
1783        return 0;
1784}
1785
1786static int f2fs_quota_on(struct super_block *sb, int type, int format_id,
1787                                                        const struct path *path)
1788{
1789        struct inode *inode;
1790        int err;
1791
1792        err = f2fs_quota_sync(sb, type);
1793        if (err)
1794                return err;
1795
1796        err = dquot_quota_on(sb, type, format_id, path);
1797        if (err)
1798                return err;
1799
1800        inode = d_inode(path->dentry);
1801
1802        inode_lock(inode);
1803        F2FS_I(inode)->i_flags |= FS_NOATIME_FL | FS_IMMUTABLE_FL;
1804        inode_set_flags(inode, S_NOATIME | S_IMMUTABLE,
1805                                        S_NOATIME | S_IMMUTABLE);
1806        inode_unlock(inode);
1807        f2fs_mark_inode_dirty_sync(inode, false);
1808
1809        return 0;
1810}
1811
1812static int f2fs_quota_off(struct super_block *sb, int type)
1813{
1814        struct inode *inode = sb_dqopt(sb)->files[type];
1815        int err;
1816
1817        if (!inode || !igrab(inode))
1818                return dquot_quota_off(sb, type);
1819
1820        f2fs_quota_sync(sb, type);
1821
1822        err = dquot_quota_off(sb, type);
1823        if (err || f2fs_sb_has_quota_ino(sb))
1824                goto out_put;
1825
1826        inode_lock(inode);
1827        F2FS_I(inode)->i_flags &= ~(FS_NOATIME_FL | FS_IMMUTABLE_FL);
1828        inode_set_flags(inode, 0, S_NOATIME | S_IMMUTABLE);
1829        inode_unlock(inode);
1830        f2fs_mark_inode_dirty_sync(inode, false);
1831out_put:
1832        iput(inode);
1833        return err;
1834}
1835
1836void f2fs_quota_off_umount(struct super_block *sb)
1837{
1838        int type;
1839
1840        for (type = 0; type < MAXQUOTAS; type++)
1841                f2fs_quota_off(sb, type);
1842}
1843
1844static int f2fs_get_projid(struct inode *inode, kprojid_t *projid)
1845{
1846        *projid = F2FS_I(inode)->i_projid;
1847        return 0;
1848}
1849
1850static const struct dquot_operations f2fs_quota_operations = {
1851        .get_reserved_space = f2fs_get_reserved_space,
1852        .write_dquot    = dquot_commit,
1853        .acquire_dquot  = dquot_acquire,
1854        .release_dquot  = dquot_release,
1855        .mark_dirty     = dquot_mark_dquot_dirty,
1856        .write_info     = dquot_commit_info,
1857        .alloc_dquot    = dquot_alloc,
1858        .destroy_dquot  = dquot_destroy,
1859        .get_projid     = f2fs_get_projid,
1860        .get_next_id    = dquot_get_next_id,
1861};
1862
1863static const struct quotactl_ops f2fs_quotactl_ops = {
1864        .quota_on       = f2fs_quota_on,
1865        .quota_off      = f2fs_quota_off,
1866        .quota_sync     = f2fs_quota_sync,
1867        .get_state      = dquot_get_state,
1868        .set_info       = dquot_set_dqinfo,
1869        .get_dqblk      = dquot_get_dqblk,
1870        .set_dqblk      = dquot_set_dqblk,
1871        .get_nextdqblk  = dquot_get_next_dqblk,
1872};
1873#else
1874void f2fs_quota_off_umount(struct super_block *sb)
1875{
1876}
1877#endif
1878
1879static const struct super_operations f2fs_sops = {
1880        .alloc_inode    = f2fs_alloc_inode,
1881        .drop_inode     = f2fs_drop_inode,
1882        .destroy_inode  = f2fs_destroy_inode,
1883        .write_inode    = f2fs_write_inode,
1884        .dirty_inode    = f2fs_dirty_inode,
1885        .show_options   = f2fs_show_options,
1886#ifdef CONFIG_QUOTA
1887        .quota_read     = f2fs_quota_read,
1888        .quota_write    = f2fs_quota_write,
1889        .get_dquots     = f2fs_get_dquots,
1890#endif
1891        .evict_inode    = f2fs_evict_inode,
1892        .put_super      = f2fs_put_super,
1893        .sync_fs        = f2fs_sync_fs,
1894        .freeze_fs      = f2fs_freeze,
1895        .unfreeze_fs    = f2fs_unfreeze,
1896        .statfs         = f2fs_statfs,
1897        .remount_fs     = f2fs_remount,
1898};
1899
1900#ifdef CONFIG_F2FS_FS_ENCRYPTION
1901static int f2fs_get_context(struct inode *inode, void *ctx, size_t len)
1902{
1903        return f2fs_getxattr(inode, F2FS_XATTR_INDEX_ENCRYPTION,
1904                                F2FS_XATTR_NAME_ENCRYPTION_CONTEXT,
1905                                ctx, len, NULL);
1906}
1907
1908static int f2fs_set_context(struct inode *inode, const void *ctx, size_t len,
1909                                                        void *fs_data)
1910{
1911        struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
1912
1913        /*
1914         * Encrypting the root directory is not allowed because fsck
1915         * expects lost+found directory to exist and remain unencrypted
1916         * if LOST_FOUND feature is enabled.
1917         *
1918         */
1919        if (f2fs_sb_has_lost_found(sbi->sb) &&
1920                        inode->i_ino == F2FS_ROOT_INO(sbi))
1921                return -EPERM;
1922
1923        return f2fs_setxattr(inode, F2FS_XATTR_INDEX_ENCRYPTION,
1924                                F2FS_XATTR_NAME_ENCRYPTION_CONTEXT,
1925                                ctx, len, fs_data, XATTR_CREATE);
1926}
1927
1928static bool f2fs_dummy_context(struct inode *inode)
1929{
1930        return DUMMY_ENCRYPTION_ENABLED(F2FS_I_SB(inode));
1931}
1932
1933static unsigned f2fs_max_namelen(struct inode *inode)
1934{
1935        return S_ISLNK(inode->i_mode) ?
1936                        inode->i_sb->s_blocksize : F2FS_NAME_LEN;
1937}
1938
1939static const struct fscrypt_operations f2fs_cryptops = {
1940        .key_prefix     = "f2fs:",
1941        .get_context    = f2fs_get_context,
1942        .set_context    = f2fs_set_context,
1943        .dummy_context  = f2fs_dummy_context,
1944        .empty_dir      = f2fs_empty_dir,
1945        .max_namelen    = f2fs_max_namelen,
1946};
1947#endif
1948
1949static struct inode *f2fs_nfs_get_inode(struct super_block *sb,
1950                u64 ino, u32 generation)
1951{
1952        struct f2fs_sb_info *sbi = F2FS_SB(sb);
1953        struct inode *inode;
1954
1955        if (check_nid_range(sbi, ino))
1956                return ERR_PTR(-ESTALE);
1957
1958        /*
1959         * f2fs_iget isn't quite right if the inode is currently unallocated!
1960         * However f2fs_iget currently does appropriate checks to handle stale
1961         * inodes so everything is OK.
1962         */
1963        inode = f2fs_iget(sb, ino);
1964        if (IS_ERR(inode))
1965                return ERR_CAST(inode);
1966        if (unlikely(generation && inode->i_generation != generation)) {
1967                /* we didn't find the right inode.. */
1968                iput(inode);
1969                return ERR_PTR(-ESTALE);
1970        }
1971        return inode;
1972}
1973
1974static struct dentry *f2fs_fh_to_dentry(struct super_block *sb, struct fid *fid,
1975                int fh_len, int fh_type)
1976{
1977        return generic_fh_to_dentry(sb, fid, fh_len, fh_type,
1978                                    f2fs_nfs_get_inode);
1979}
1980
1981static struct dentry *f2fs_fh_to_parent(struct super_block *sb, struct fid *fid,
1982                int fh_len, int fh_type)
1983{
1984        return generic_fh_to_parent(sb, fid, fh_len, fh_type,
1985                                    f2fs_nfs_get_inode);
1986}
1987
1988static const struct export_operations f2fs_export_ops = {
1989        .fh_to_dentry = f2fs_fh_to_dentry,
1990        .fh_to_parent = f2fs_fh_to_parent,
1991        .get_parent = f2fs_get_parent,
1992};
1993
1994static loff_t max_file_blocks(void)
1995{
1996        loff_t result = 0;
1997        loff_t leaf_count = ADDRS_PER_BLOCK;
1998
1999        /*
2000         * note: previously, result is equal to (DEF_ADDRS_PER_INODE -
2001         * DEFAULT_INLINE_XATTR_ADDRS), but now f2fs try to reserve more
2002         * space in inode.i_addr, it will be more safe to reassign
2003         * result as zero.
2004         */
2005
2006        /* two direct node blocks */
2007        result += (leaf_count * 2);
2008
2009        /* two indirect node blocks */
2010        leaf_count *= NIDS_PER_BLOCK;
2011        result += (leaf_count * 2);
2012
2013        /* one double indirect node block */
2014        leaf_count *= NIDS_PER_BLOCK;
2015        result += leaf_count;
2016
2017        return result;
2018}
2019
2020static int __f2fs_commit_super(struct buffer_head *bh,
2021                        struct f2fs_super_block *super)
2022{
2023        lock_buffer(bh);
2024        if (super)
2025                memcpy(bh->b_data + F2FS_SUPER_OFFSET, super, sizeof(*super));
2026        set_buffer_dirty(bh);
2027        unlock_buffer(bh);
2028
2029        /* it's rare case, we can do fua all the time */
2030        return __sync_dirty_buffer(bh, REQ_SYNC | REQ_PREFLUSH | REQ_FUA);
2031}
2032
2033static inline bool sanity_check_area_boundary(struct f2fs_sb_info *sbi,
2034                                        struct buffer_head *bh)
2035{
2036        struct f2fs_super_block *raw_super = (struct f2fs_super_block *)
2037                                        (bh->b_data + F2FS_SUPER_OFFSET);
2038        struct super_block *sb = sbi->sb;
2039        u32 segment0_blkaddr = le32_to_cpu(raw_super->segment0_blkaddr);
2040        u32 cp_blkaddr = le32_to_cpu(raw_super->cp_blkaddr);
2041        u32 sit_blkaddr = le32_to_cpu(raw_super->sit_blkaddr);
2042        u32 nat_blkaddr = le32_to_cpu(raw_super->nat_blkaddr);
2043        u32 ssa_blkaddr = le32_to_cpu(raw_super->ssa_blkaddr);
2044        u32 main_blkaddr = le32_to_cpu(raw_super->main_blkaddr);
2045        u32 segment_count_ckpt = le32_to_cpu(raw_super->segment_count_ckpt);
2046        u32 segment_count_sit = le32_to_cpu(raw_super->segment_count_sit);
2047        u32 segment_count_nat = le32_to_cpu(raw_super->segment_count_nat);
2048        u32 segment_count_ssa = le32_to_cpu(raw_super->segment_count_ssa);
2049        u32 segment_count_main = le32_to_cpu(raw_super->segment_count_main);
2050        u32 segment_count = le32_to_cpu(raw_super->segment_count);
2051        u32 log_blocks_per_seg = le32_to_cpu(raw_super->log_blocks_per_seg);
2052        u64 main_end_blkaddr = main_blkaddr +
2053                                (segment_count_main << log_blocks_per_seg);
2054        u64 seg_end_blkaddr = segment0_blkaddr +
2055                                (segment_count << log_blocks_per_seg);
2056
2057        if (segment0_blkaddr != cp_blkaddr) {
2058                f2fs_msg(sb, KERN_INFO,
2059                        "Mismatch start address, segment0(%u) cp_blkaddr(%u)",
2060                        segment0_blkaddr, cp_blkaddr);
2061                return true;
2062        }
2063
2064        if (cp_blkaddr + (segment_count_ckpt << log_blocks_per_seg) !=
2065                                                        sit_blkaddr) {
2066                f2fs_msg(sb, KERN_INFO,
2067                        "Wrong CP boundary, start(%u) end(%u) blocks(%u)",
2068                        cp_blkaddr, sit_blkaddr,
2069                        segment_count_ckpt << log_blocks_per_seg);
2070                return true;
2071        }
2072
2073        if (sit_blkaddr + (segment_count_sit << log_blocks_per_seg) !=
2074                                                        nat_blkaddr) {
2075                f2fs_msg(sb, KERN_INFO,
2076                        "Wrong SIT boundary, start(%u) end(%u) blocks(%u)",
2077                        sit_blkaddr, nat_blkaddr,
2078                        segment_count_sit << log_blocks_per_seg);
2079                return true;
2080        }
2081
2082        if (nat_blkaddr + (segment_count_nat << log_blocks_per_seg) !=
2083                                                        ssa_blkaddr) {
2084                f2fs_msg(sb, KERN_INFO,
2085                        "Wrong NAT boundary, start(%u) end(%u) blocks(%u)",
2086                        nat_blkaddr, ssa_blkaddr,
2087                        segment_count_nat << log_blocks_per_seg);
2088                return true;
2089        }
2090
2091        if (ssa_blkaddr + (segment_count_ssa << log_blocks_per_seg) !=
2092                                                        main_blkaddr) {
2093                f2fs_msg(sb, KERN_INFO,
2094                        "Wrong SSA boundary, start(%u) end(%u) blocks(%u)",
2095                        ssa_blkaddr, main_blkaddr,
2096                        segment_count_ssa << log_blocks_per_seg);
2097                return true;
2098        }
2099
2100        if (main_end_blkaddr > seg_end_blkaddr) {
2101                f2fs_msg(sb, KERN_INFO,
2102                        "Wrong MAIN_AREA boundary, start(%u) end(%u) block(%u)",
2103                        main_blkaddr,
2104                        segment0_blkaddr +
2105                                (segment_count << log_blocks_per_seg),
2106                        segment_count_main << log_blocks_per_seg);
2107                return true;
2108        } else if (main_end_blkaddr < seg_end_blkaddr) {
2109                int err = 0;
2110                char *res;
2111
2112                /* fix in-memory information all the time */
2113                raw_super->segment_count = cpu_to_le32((main_end_blkaddr -
2114                                segment0_blkaddr) >> log_blocks_per_seg);
2115
2116                if (f2fs_readonly(sb) || bdev_read_only(sb->s_bdev)) {
2117                        set_sbi_flag(sbi, SBI_NEED_SB_WRITE);
2118                        res = "internally";
2119                } else {
2120                        err = __f2fs_commit_super(bh, NULL);
2121                        res = err ? "failed" : "done";
2122                }
2123                f2fs_msg(sb, KERN_INFO,
2124                        "Fix alignment : %s, start(%u) end(%u) block(%u)",
2125                        res, main_blkaddr,
2126                        segment0_blkaddr +
2127                                (segment_count << log_blocks_per_seg),
2128                        segment_count_main << log_blocks_per_seg);
2129                if (err)
2130                        return true;
2131        }
2132        return false;
2133}
2134
2135static int sanity_check_raw_super(struct f2fs_sb_info *sbi,
2136                                struct buffer_head *bh)
2137{
2138        struct f2fs_super_block *raw_super = (struct f2fs_super_block *)
2139                                        (bh->b_data + F2FS_SUPER_OFFSET);
2140        struct super_block *sb = sbi->sb;
2141        unsigned int blocksize;
2142
2143        if (F2FS_SUPER_MAGIC != le32_to_cpu(raw_super->magic)) {
2144                f2fs_msg(sb, KERN_INFO,
2145                        "Magic Mismatch, valid(0x%x) - read(0x%x)",
2146                        F2FS_SUPER_MAGIC, le32_to_cpu(raw_super->magic));
2147                return 1;
2148        }
2149
2150        /* Currently, support only 4KB page cache size */
2151        if (F2FS_BLKSIZE != PAGE_SIZE) {
2152                f2fs_msg(sb, KERN_INFO,
2153                        "Invalid page_cache_size (%lu), supports only 4KB\n",
2154                        PAGE_SIZE);
2155                return 1;
2156        }
2157
2158        /* Currently, support only 4KB block size */
2159        blocksize = 1 << le32_to_cpu(raw_super->log_blocksize);
2160        if (blocksize != F2FS_BLKSIZE) {
2161                f2fs_msg(sb, KERN_INFO,
2162                        "Invalid blocksize (%u), supports only 4KB\n",
2163                        blocksize);
2164                return 1;
2165        }
2166
2167        /* check log blocks per segment */
2168        if (le32_to_cpu(raw_super->log_blocks_per_seg) != 9) {
2169                f2fs_msg(sb, KERN_INFO,
2170                        "Invalid log blocks per segment (%u)\n",
2171                        le32_to_cpu(raw_super->log_blocks_per_seg));
2172                return 1;
2173        }
2174
2175        /* Currently, support 512/1024/2048/4096 bytes sector size */
2176        if (le32_to_cpu(raw_super->log_sectorsize) >
2177                                F2FS_MAX_LOG_SECTOR_SIZE ||
2178                le32_to_cpu(raw_super->log_sectorsize) <
2179                                F2FS_MIN_LOG_SECTOR_SIZE) {
2180                f2fs_msg(sb, KERN_INFO, "Invalid log sectorsize (%u)",
2181                        le32_to_cpu(raw_super->log_sectorsize));
2182                return 1;
2183        }
2184        if (le32_to_cpu(raw_super->log_sectors_per_block) +
2185                le32_to_cpu(raw_super->log_sectorsize) !=
2186                        F2FS_MAX_LOG_SECTOR_SIZE) {
2187                f2fs_msg(sb, KERN_INFO,
2188                        "Invalid log sectors per block(%u) log sectorsize(%u)",
2189                        le32_to_cpu(raw_super->log_sectors_per_block),
2190                        le32_to_cpu(raw_super->log_sectorsize));
2191                return 1;
2192        }
2193
2194        /* check reserved ino info */
2195        if (le32_to_cpu(raw_super->node_ino) != 1 ||
2196                le32_to_cpu(raw_super->meta_ino) != 2 ||
2197                le32_to_cpu(raw_super->root_ino) != 3) {
2198                f2fs_msg(sb, KERN_INFO,
2199                        "Invalid Fs Meta Ino: node(%u) meta(%u) root(%u)",
2200                        le32_to_cpu(raw_super->node_ino),
2201                        le32_to_cpu(raw_super->meta_ino),
2202                        le32_to_cpu(raw_super->root_ino));
2203                return 1;
2204        }
2205
2206        if (le32_to_cpu(raw_super->segment_count) > F2FS_MAX_SEGMENT) {
2207                f2fs_msg(sb, KERN_INFO,
2208                        "Invalid segment count (%u)",
2209                        le32_to_cpu(raw_super->segment_count));
2210                return 1;
2211        }
2212
2213        /* check CP/SIT/NAT/SSA/MAIN_AREA area boundary */
2214        if (sanity_check_area_boundary(sbi, bh))
2215                return 1;
2216
2217        return 0;
2218}
2219
2220int sanity_check_ckpt(struct f2fs_sb_info *sbi)
2221{
2222        unsigned int total, fsmeta;
2223        struct f2fs_super_block *raw_super = F2FS_RAW_SUPER(sbi);
2224        struct f2fs_checkpoint *ckpt = F2FS_CKPT(sbi);
2225        unsigned int ovp_segments, reserved_segments;
2226        unsigned int main_segs, blocks_per_seg;
2227        int i;
2228
2229        total = le32_to_cpu(raw_super->segment_count);
2230        fsmeta = le32_to_cpu(raw_super->segment_count_ckpt);
2231        fsmeta += le32_to_cpu(raw_super->segment_count_sit);
2232        fsmeta += le32_to_cpu(raw_super->segment_count_nat);
2233        fsmeta += le32_to_cpu(ckpt->rsvd_segment_count);
2234        fsmeta += le32_to_cpu(raw_super->segment_count_ssa);
2235
2236        if (unlikely(fsmeta >= total))
2237                return 1;
2238
2239        ovp_segments = le32_to_cpu(ckpt->overprov_segment_count);
2240        reserved_segments = le32_to_cpu(ckpt->rsvd_segment_count);
2241
2242        if (unlikely(fsmeta < F2FS_MIN_SEGMENTS ||
2243                        ovp_segments == 0 || reserved_segments == 0)) {
2244                f2fs_msg(sbi->sb, KERN_ERR,
2245                        "Wrong layout: check mkfs.f2fs version");
2246                return 1;
2247        }
2248
2249        main_segs = le32_to_cpu(raw_super->segment_count_main);
2250        blocks_per_seg = sbi->blocks_per_seg;
2251
2252        for (i = 0; i < NR_CURSEG_NODE_TYPE; i++) {
2253                if (le32_to_cpu(ckpt->cur_node_segno[i]) >= main_segs ||
2254                        le16_to_cpu(ckpt->cur_node_blkoff[i]) >= blocks_per_seg)
2255                        return 1;
2256        }
2257        for (i = 0; i < NR_CURSEG_DATA_TYPE; i++) {
2258                if (le32_to_cpu(ckpt->cur_data_segno[i]) >= main_segs ||
2259                        le16_to_cpu(ckpt->cur_data_blkoff[i]) >= blocks_per_seg)
2260                        return 1;
2261        }
2262
2263        if (unlikely(f2fs_cp_error(sbi))) {
2264                f2fs_msg(sbi->sb, KERN_ERR, "A bug case: need to run fsck");
2265                return 1;
2266        }
2267        return 0;
2268}
2269
2270static void init_sb_info(struct f2fs_sb_info *sbi)
2271{
2272        struct f2fs_super_block *raw_super = sbi->raw_super;
2273        int i, j;
2274
2275        sbi->log_sectors_per_block =
2276                le32_to_cpu(raw_super->log_sectors_per_block);
2277        sbi->log_blocksize = le32_to_cpu(raw_super->log_blocksize);
2278        sbi->blocksize = 1 << sbi->log_blocksize;
2279        sbi->log_blocks_per_seg = le32_to_cpu(raw_super->log_blocks_per_seg);
2280        sbi->blocks_per_seg = 1 << sbi->log_blocks_per_seg;
2281        sbi->segs_per_sec = le32_to_cpu(raw_super->segs_per_sec);
2282        sbi->secs_per_zone = le32_to_cpu(raw_super->secs_per_zone);
2283        sbi->total_sections = le32_to_cpu(raw_super->section_count);
2284        sbi->total_node_count =
2285                (le32_to_cpu(raw_super->segment_count_nat) / 2)
2286                        * sbi->blocks_per_seg * NAT_ENTRY_PER_BLOCK;
2287        sbi->root_ino_num = le32_to_cpu(raw_super->root_ino);
2288        sbi->node_ino_num = le32_to_cpu(raw_super->node_ino);
2289        sbi->meta_ino_num = le32_to_cpu(raw_super->meta_ino);
2290        sbi->cur_victim_sec = NULL_SECNO;
2291        sbi->max_victim_search = DEF_MAX_VICTIM_SEARCH;
2292
2293        sbi->dir_level = DEF_DIR_LEVEL;
2294        sbi->interval_time[CP_TIME] = DEF_CP_INTERVAL;
2295        sbi->interval_time[REQ_TIME] = DEF_IDLE_INTERVAL;
2296        clear_sbi_flag(sbi, SBI_NEED_FSCK);
2297
2298        for (i = 0; i < NR_COUNT_TYPE; i++)
2299                atomic_set(&sbi->nr_pages[i], 0);
2300
2301        atomic_set(&sbi->wb_sync_req, 0);
2302
2303        INIT_LIST_HEAD(&sbi->s_list);
2304        mutex_init(&sbi->umount_mutex);
2305        for (i = 0; i < NR_PAGE_TYPE - 1; i++)
2306                for (j = HOT; j < NR_TEMP_TYPE; j++)
2307                        mutex_init(&sbi->wio_mutex[i][j]);
2308        spin_lock_init(&sbi->cp_lock);
2309
2310        sbi->dirty_device = 0;
2311        spin_lock_init(&sbi->dev_lock);
2312
2313        init_rwsem(&sbi->sb_lock);
2314}
2315
2316static int init_percpu_info(struct f2fs_sb_info *sbi)
2317{
2318        int err;
2319
2320        err = percpu_counter_init(&sbi->alloc_valid_block_count, 0, GFP_KERNEL);
2321        if (err)
2322                return err;
2323
2324        return percpu_counter_init(&sbi->total_valid_inode_count, 0,
2325                                                                GFP_KERNEL);
2326}
2327
2328#ifdef CONFIG_BLK_DEV_ZONED
2329static int init_blkz_info(struct f2fs_sb_info *sbi, int devi)
2330{
2331        struct block_device *bdev = FDEV(devi).bdev;
2332        sector_t nr_sectors = bdev->bd_part->nr_sects;
2333        sector_t sector = 0;
2334        struct blk_zone *zones;
2335        unsigned int i, nr_zones;
2336        unsigned int n = 0;
2337        int err = -EIO;
2338
2339        if (!f2fs_sb_has_blkzoned(sbi->sb))
2340                return 0;
2341
2342        if (sbi->blocks_per_blkz && sbi->blocks_per_blkz !=
2343                                SECTOR_TO_BLOCK(bdev_zone_sectors(bdev)))
2344                return -EINVAL;
2345        sbi->blocks_per_blkz = SECTOR_TO_BLOCK(bdev_zone_sectors(bdev));
2346        if (sbi->log_blocks_per_blkz && sbi->log_blocks_per_blkz !=
2347                                __ilog2_u32(sbi->blocks_per_blkz))
2348                return -EINVAL;
2349        sbi->log_blocks_per_blkz = __ilog2_u32(sbi->blocks_per_blkz);
2350        FDEV(devi).nr_blkz = SECTOR_TO_BLOCK(nr_sectors) >>
2351                                        sbi->log_blocks_per_blkz;
2352        if (nr_sectors & (bdev_zone_sectors(bdev) - 1))
2353                FDEV(devi).nr_blkz++;
2354
2355        FDEV(devi).blkz_type = f2fs_kmalloc(sbi, FDEV(devi).nr_blkz,
2356                                                                GFP_KERNEL);
2357        if (!FDEV(devi).blkz_type)
2358                return -ENOMEM;
2359
2360#define F2FS_REPORT_NR_ZONES   4096
2361
2362        zones = f2fs_kzalloc(sbi, sizeof(struct blk_zone) *
2363                                F2FS_REPORT_NR_ZONES, GFP_KERNEL);
2364        if (!zones)
2365                return -ENOMEM;
2366
2367        /* Get block zones type */
2368        while (zones && sector < nr_sectors) {
2369
2370                nr_zones = F2FS_REPORT_NR_ZONES;
2371                err = blkdev_report_zones(bdev, sector,
2372                                          zones, &nr_zones,
2373                                          GFP_KERNEL);
2374                if (err)
2375                        break;
2376                if (!nr_zones) {
2377                        err = -EIO;
2378                        break;
2379                }
2380
2381                for (i = 0; i < nr_zones; i++) {
2382                        FDEV(devi).blkz_type[n] = zones[i].type;
2383                        sector += zones[i].len;
2384                        n++;
2385                }
2386        }
2387
2388        kfree(zones);
2389
2390        return err;
2391}
2392#endif
2393
2394/*
2395 * Read f2fs raw super block.
2396 * Because we have two copies of super block, so read both of them
2397 * to get the first valid one. If any one of them is broken, we pass
2398 * them recovery flag back to the caller.
2399 */
2400static int read_raw_super_block(struct f2fs_sb_info *sbi,
2401                        struct f2fs_super_block **raw_super,
2402                        int *valid_super_block, int *recovery)
2403{
2404        struct super_block *sb = sbi->sb;
2405        int block;
2406        struct buffer_head *bh;
2407        struct f2fs_super_block *super;
2408        int err = 0;
2409
2410        super = kzalloc(sizeof(struct f2fs_super_block), GFP_KERNEL);
2411        if (!super)
2412                return -ENOMEM;
2413
2414        for (block = 0; block < 2; block++) {
2415                bh = sb_bread(sb, block);
2416                if (!bh) {
2417                        f2fs_msg(sb, KERN_ERR, "Unable to read %dth superblock",
2418                                block + 1);
2419                        err = -EIO;
2420                        continue;
2421                }
2422
2423                /* sanity checking of raw super */
2424                if (sanity_check_raw_super(sbi, bh)) {
2425                        f2fs_msg(sb, KERN_ERR,
2426                                "Can't find valid F2FS filesystem in %dth superblock",
2427                                block + 1);
2428                        err = -EINVAL;
2429                        brelse(bh);
2430                        continue;
2431                }
2432
2433                if (!*raw_super) {
2434                        memcpy(super, bh->b_data + F2FS_SUPER_OFFSET,
2435                                                        sizeof(*super));
2436                        *valid_super_block = block;
2437                        *raw_super = super;
2438                }
2439                brelse(bh);
2440        }
2441
2442        /* Fail to read any one of the superblocks*/
2443        if (err < 0)
2444                *recovery = 1;
2445
2446        /* No valid superblock */
2447        if (!*raw_super)
2448                kfree(super);
2449        else
2450                err = 0;
2451
2452        return err;
2453}
2454
2455int f2fs_commit_super(struct f2fs_sb_info *sbi, bool recover)
2456{
2457        struct buffer_head *bh;
2458        int err;
2459
2460        if ((recover && f2fs_readonly(sbi->sb)) ||
2461                                bdev_read_only(sbi->sb->s_bdev)) {
2462                set_sbi_flag(sbi, SBI_NEED_SB_WRITE);
2463                return -EROFS;
2464        }
2465
2466        /* write back-up superblock first */
2467        bh = sb_bread(sbi->sb, sbi->valid_super_block ? 0 : 1);
2468        if (!bh)
2469                return -EIO;
2470        err = __f2fs_commit_super(bh, F2FS_RAW_SUPER(sbi));
2471        brelse(bh);
2472
2473        /* if we are in recovery path, skip writing valid superblock */
2474        if (recover || err)
2475                return err;
2476
2477        /* write current valid superblock */
2478        bh = sb_bread(sbi->sb, sbi->valid_super_block);
2479        if (!bh)
2480                return -EIO;
2481        err = __f2fs_commit_super(bh, F2FS_RAW_SUPER(sbi));
2482        brelse(bh);
2483        return err;
2484}
2485
2486static int f2fs_scan_devices(struct f2fs_sb_info *sbi)
2487{
2488        struct f2fs_super_block *raw_super = F2FS_RAW_SUPER(sbi);
2489        unsigned int max_devices = MAX_DEVICES;
2490        int i;
2491
2492        /* Initialize single device information */
2493        if (!RDEV(0).path[0]) {
2494                if (!bdev_is_zoned(sbi->sb->s_bdev))
2495                        return 0;
2496                max_devices = 1;
2497        }
2498
2499        /*
2500         * Initialize multiple devices information, or single
2501         * zoned block device information.
2502         */
2503        sbi->devs = f2fs_kzalloc(sbi, sizeof(struct f2fs_dev_info) *
2504                                                max_devices, GFP_KERNEL);
2505        if (!sbi->devs)
2506                return -ENOMEM;
2507
2508        for (i = 0; i < max_devices; i++) {
2509
2510                if (i > 0 && !RDEV(i).path[0])
2511                        break;
2512
2513                if (max_devices == 1) {
2514                        /* Single zoned block device mount */
2515                        FDEV(0).bdev =
2516                                blkdev_get_by_dev(sbi->sb->s_bdev->bd_dev,
2517                                        sbi->sb->s_mode, sbi->sb->s_type);
2518                } else {
2519                        /* Multi-device mount */
2520                        memcpy(FDEV(i).path, RDEV(i).path, MAX_PATH_LEN);
2521                        FDEV(i).total_segments =
2522                                le32_to_cpu(RDEV(i).total_segments);
2523                        if (i == 0) {
2524                                FDEV(i).start_blk = 0;
2525                                FDEV(i).end_blk = FDEV(i).start_blk +
2526                                    (FDEV(i).total_segments <<
2527                                    sbi->log_blocks_per_seg) - 1 +
2528                                    le32_to_cpu(raw_super->segment0_blkaddr);
2529                        } else {
2530                                FDEV(i).start_blk = FDEV(i - 1).end_blk + 1;
2531                                FDEV(i).end_blk = FDEV(i).start_blk +
2532                                        (FDEV(i).total_segments <<
2533                                        sbi->log_blocks_per_seg) - 1;
2534                        }
2535                        FDEV(i).bdev = blkdev_get_by_path(FDEV(i).path,
2536                                        sbi->sb->s_mode, sbi->sb->s_type);
2537                }
2538                if (IS_ERR(FDEV(i).bdev))
2539                        return PTR_ERR(FDEV(i).bdev);
2540
2541                /* to release errored devices */
2542                sbi->s_ndevs = i + 1;
2543
2544#ifdef CONFIG_BLK_DEV_ZONED
2545                if (bdev_zoned_model(FDEV(i).bdev) == BLK_ZONED_HM &&
2546                                !f2fs_sb_has_blkzoned(sbi->sb)) {
2547                        f2fs_msg(sbi->sb, KERN_ERR,
2548                                "Zoned block device feature not enabled\n");
2549                        return -EINVAL;
2550                }
2551                if (bdev_zoned_model(FDEV(i).bdev) != BLK_ZONED_NONE) {
2552                        if (init_blkz_info(sbi, i)) {
2553                                f2fs_msg(sbi->sb, KERN_ERR,
2554                                        "Failed to initialize F2FS blkzone information");
2555                                return -EINVAL;
2556                        }
2557                        if (max_devices == 1)
2558                                break;
2559                        f2fs_msg(sbi->sb, KERN_INFO,
2560                                "Mount Device [%2d]: %20s, %8u, %8x - %8x (zone: %s)",
2561                                i, FDEV(i).path,
2562                                FDEV(i).total_segments,
2563                                FDEV(i).start_blk, FDEV(i).end_blk,
2564                                bdev_zoned_model(FDEV(i).bdev) == BLK_ZONED_HA ?
2565                                "Host-aware" : "Host-managed");
2566                        continue;
2567                }
2568#endif
2569                f2fs_msg(sbi->sb, KERN_INFO,
2570                        "Mount Device [%2d]: %20s, %8u, %8x - %8x",
2571                                i, FDEV(i).path,
2572                                FDEV(i).total_segments,
2573                                FDEV(i).start_blk, FDEV(i).end_blk);
2574        }
2575        f2fs_msg(sbi->sb, KERN_INFO,
2576                        "IO Block Size: %8d KB", F2FS_IO_SIZE_KB(sbi));
2577        return 0;
2578}
2579
2580static void f2fs_tuning_parameters(struct f2fs_sb_info *sbi)
2581{
2582        struct f2fs_sm_info *sm_i = SM_I(sbi);
2583
2584        /* adjust parameters according to the volume size */
2585        if (sm_i->main_segments <= SMALL_VOLUME_SEGMENTS) {
2586                F2FS_OPTION(sbi).alloc_mode = ALLOC_MODE_REUSE;
2587                sm_i->dcc_info->discard_granularity = 1;
2588                sm_i->ipu_policy = 1 << F2FS_IPU_FORCE;
2589        }
2590}
2591
2592static int f2fs_fill_super(struct super_block *sb, void *data, int silent)
2593{
2594        struct f2fs_sb_info *sbi;
2595        struct f2fs_super_block *raw_super;
2596        struct inode *root;
2597        int err;
2598        bool retry = true, need_fsck = false;
2599        char *options = NULL;
2600        int recovery, i, valid_super_block;
2601        struct curseg_info *seg_i;
2602
2603try_onemore:
2604        err = -EINVAL;
2605        raw_super = NULL;
2606        valid_super_block = -1;
2607        recovery = 0;
2608
2609        /* allocate memory for f2fs-specific super block info */
2610        sbi = kzalloc(sizeof(struct f2fs_sb_info), GFP_KERNEL);
2611        if (!sbi)
2612                return -ENOMEM;
2613
2614        sbi->sb = sb;
2615
2616        /* Load the checksum driver */
2617        sbi->s_chksum_driver = crypto_alloc_shash("crc32", 0, 0);
2618        if (IS_ERR(sbi->s_chksum_driver)) {
2619                f2fs_msg(sb, KERN_ERR, "Cannot load crc32 driver.");
2620                err = PTR_ERR(sbi->s_chksum_driver);
2621                sbi->s_chksum_driver = NULL;
2622                goto free_sbi;
2623        }
2624
2625        /* set a block size */
2626        if (unlikely(!sb_set_blocksize(sb, F2FS_BLKSIZE))) {
2627                f2fs_msg(sb, KERN_ERR, "unable to set blocksize");
2628                goto free_sbi;
2629        }
2630
2631        err = read_raw_super_block(sbi, &raw_super, &valid_super_block,
2632                                                                &recovery);
2633        if (err)
2634                goto free_sbi;
2635
2636        sb->s_fs_info = sbi;
2637        sbi->raw_super = raw_super;
2638
2639        F2FS_OPTION(sbi).s_resuid = make_kuid(&init_user_ns, F2FS_DEF_RESUID);
2640        F2FS_OPTION(sbi).s_resgid = make_kgid(&init_user_ns, F2FS_DEF_RESGID);
2641
2642        /* precompute checksum seed for metadata */
2643        if (f2fs_sb_has_inode_chksum(sb))
2644                sbi->s_chksum_seed = f2fs_chksum(sbi, ~0, raw_super->uuid,
2645                                                sizeof(raw_super->uuid));
2646
2647        /*
2648         * The BLKZONED feature indicates that the drive was formatted with
2649         * zone alignment optimization. This is optional for host-aware
2650         * devices, but mandatory for host-managed zoned block devices.
2651         */
2652#ifndef CONFIG_BLK_DEV_ZONED
2653        if (f2fs_sb_has_blkzoned(sb)) {
2654                f2fs_msg(sb, KERN_ERR,
2655                         "Zoned block device support is not enabled\n");
2656                err = -EOPNOTSUPP;
2657                goto free_sb_buf;
2658        }
2659#endif
2660        default_options(sbi);
2661        /* parse mount options */
2662        options = kstrdup((const char *)data, GFP_KERNEL);
2663        if (data && !options) {
2664                err = -ENOMEM;
2665                goto free_sb_buf;
2666        }
2667
2668        err = parse_options(sb, options);
2669        if (err)
2670                goto free_options;
2671
2672        sbi->max_file_blocks = max_file_blocks();
2673        sb->s_maxbytes = sbi->max_file_blocks <<
2674                                le32_to_cpu(raw_super->log_blocksize);
2675        sb->s_max_links = F2FS_LINK_MAX;
2676        get_random_bytes(&sbi->s_next_generation, sizeof(u32));
2677
2678#ifdef CONFIG_QUOTA
2679        sb->dq_op = &f2fs_quota_operations;
2680        if (f2fs_sb_has_quota_ino(sb))
2681                sb->s_qcop = &dquot_quotactl_sysfile_ops;
2682        else
2683                sb->s_qcop = &f2fs_quotactl_ops;
2684        sb->s_quota_types = QTYPE_MASK_USR | QTYPE_MASK_GRP | QTYPE_MASK_PRJ;
2685
2686        if (f2fs_sb_has_quota_ino(sbi->sb)) {
2687                for (i = 0; i < MAXQUOTAS; i++) {
2688                        if (f2fs_qf_ino(sbi->sb, i))
2689                                sbi->nquota_files++;
2690                }
2691        }
2692#endif
2693
2694        sb->s_op = &f2fs_sops;
2695#ifdef CONFIG_F2FS_FS_ENCRYPTION
2696        sb->s_cop = &f2fs_cryptops;
2697#endif
2698        sb->s_xattr = f2fs_xattr_handlers;
2699        sb->s_export_op = &f2fs_export_ops;
2700        sb->s_magic = F2FS_SUPER_MAGIC;
2701        sb->s_time_gran = 1;
2702        sb->s_flags = (sb->s_flags & ~SB_POSIXACL) |
2703                (test_opt(sbi, POSIX_ACL) ? SB_POSIXACL : 0);
2704        memcpy(&sb->s_uuid, raw_super->uuid, sizeof(raw_super->uuid));
2705        sb->s_iflags |= SB_I_CGROUPWB;
2706
2707        /* init f2fs-specific super block info */
2708        sbi->valid_super_block = valid_super_block;
2709        mutex_init(&sbi->gc_mutex);
2710        mutex_init(&sbi->cp_mutex);
2711        init_rwsem(&sbi->node_write);
2712        init_rwsem(&sbi->node_change);
2713
2714        /* disallow all the data/node/meta page writes */
2715        set_sbi_flag(sbi, SBI_POR_DOING);
2716        spin_lock_init(&sbi->stat_lock);
2717
2718        /* init iostat info */
2719        spin_lock_init(&sbi->iostat_lock);
2720        sbi->iostat_enable = false;
2721
2722        for (i = 0; i < NR_PAGE_TYPE; i++) {
2723                int n = (i == META) ? 1: NR_TEMP_TYPE;
2724                int j;
2725
2726                sbi->write_io[i] = f2fs_kmalloc(sbi,
2727                                        n * sizeof(struct f2fs_bio_info),
2728                                        GFP_KERNEL);
2729                if (!sbi->write_io[i]) {
2730                        err = -ENOMEM;
2731                        goto free_options;
2732                }
2733
2734                for (j = HOT; j < n; j++) {
2735                        init_rwsem(&sbi->write_io[i][j].io_rwsem);
2736                        sbi->write_io[i][j].sbi = sbi;
2737                        sbi->write_io[i][j].bio = NULL;
2738                        spin_lock_init(&sbi->write_io[i][j].io_lock);
2739                        INIT_LIST_HEAD(&sbi->write_io[i][j].io_list);
2740                }
2741        }
2742
2743        init_rwsem(&sbi->cp_rwsem);
2744        init_waitqueue_head(&sbi->cp_wait);
2745        init_sb_info(sbi);
2746
2747        err = init_percpu_info(sbi);
2748        if (err)
2749                goto free_bio_info;
2750
2751        if (F2FS_IO_SIZE(sbi) > 1) {
2752                sbi->write_io_dummy =
2753                        mempool_create_page_pool(2 * (F2FS_IO_SIZE(sbi) - 1), 0);
2754                if (!sbi->write_io_dummy) {
2755                        err = -ENOMEM;
2756                        goto free_percpu;
2757                }
2758        }
2759
2760        /* get an inode for meta space */
2761        sbi->meta_inode = f2fs_iget(sb, F2FS_META_INO(sbi));
2762        if (IS_ERR(sbi->meta_inode)) {
2763                f2fs_msg(sb, KERN_ERR, "Failed to read F2FS meta data inode");
2764                err = PTR_ERR(sbi->meta_inode);
2765                goto free_io_dummy;
2766        }
2767
2768        err = get_valid_checkpoint(sbi);
2769        if (err) {
2770                f2fs_msg(sb, KERN_ERR, "Failed to get valid F2FS checkpoint");
2771                goto free_meta_inode;
2772        }
2773
2774        /* Initialize device list */
2775        err = f2fs_scan_devices(sbi);
2776        if (err) {
2777                f2fs_msg(sb, KERN_ERR, "Failed to find devices");
2778                goto free_devices;
2779        }
2780
2781        sbi->total_valid_node_count =
2782                                le32_to_cpu(sbi->ckpt->valid_node_count);
2783        percpu_counter_set(&sbi->total_valid_inode_count,
2784                                le32_to_cpu(sbi->ckpt->valid_inode_count));
2785        sbi->user_block_count = le64_to_cpu(sbi->ckpt->user_block_count);
2786        sbi->total_valid_block_count =
2787                                le64_to_cpu(sbi->ckpt->valid_block_count);
2788        sbi->last_valid_block_count = sbi->total_valid_block_count;
2789        sbi->reserved_blocks = 0;
2790        sbi->current_reserved_blocks = 0;
2791        limit_reserve_root(sbi);
2792
2793        for (i = 0; i < NR_INODE_TYPE; i++) {
2794                INIT_LIST_HEAD(&sbi->inode_list[i]);
2795                spin_lock_init(&sbi->inode_lock[i]);
2796        }
2797
2798        init_extent_cache_info(sbi);
2799
2800        init_ino_entry_info(sbi);
2801
2802        /* setup f2fs internal modules */
2803        err = build_segment_manager(sbi);
2804        if (err) {
2805                f2fs_msg(sb, KERN_ERR,
2806                        "Failed to initialize F2FS segment manager");
2807                goto free_sm;
2808        }
2809        err = build_node_manager(sbi);
2810        if (err) {
2811                f2fs_msg(sb, KERN_ERR,
2812                        "Failed to initialize F2FS node manager");
2813                goto free_nm;
2814        }
2815
2816        /* For write statistics */
2817        if (sb->s_bdev->bd_part)
2818                sbi->sectors_written_start =
2819                        (u64)part_stat_read(sb->s_bdev->bd_part, sectors[1]);
2820
2821        /* Read accumulated write IO statistics if exists */
2822        seg_i = CURSEG_I(sbi, CURSEG_HOT_NODE);
2823        if (__exist_node_summaries(sbi))
2824                sbi->kbytes_written =
2825                        le64_to_cpu(seg_i->journal->info.kbytes_written);
2826
2827        build_gc_manager(sbi);
2828
2829        /* get an inode for node space */
2830        sbi->node_inode = f2fs_iget(sb, F2FS_NODE_INO(sbi));
2831        if (IS_ERR(sbi->node_inode)) {
2832                f2fs_msg(sb, KERN_ERR, "Failed to read node inode");
2833                err = PTR_ERR(sbi->node_inode);
2834                goto free_nm;
2835        }
2836
2837        err = f2fs_build_stats(sbi);
2838        if (err)
2839                goto free_node_inode;
2840
2841        /* read root inode and dentry */
2842        root = f2fs_iget(sb, F2FS_ROOT_INO(sbi));
2843        if (IS_ERR(root)) {
2844                f2fs_msg(sb, KERN_ERR, "Failed to read root inode");
2845                err = PTR_ERR(root);
2846                goto free_stats;
2847        }
2848        if (!S_ISDIR(root->i_mode) || !root->i_blocks || !root->i_size) {
2849                iput(root);
2850                err = -EINVAL;
2851                goto free_node_inode;
2852        }
2853
2854        sb->s_root = d_make_root(root); /* allocate root dentry */
2855        if (!sb->s_root) {
2856                err = -ENOMEM;
2857                goto free_root_inode;
2858        }
2859
2860        err = f2fs_register_sysfs(sbi);
2861        if (err)
2862                goto free_root_inode;
2863
2864#ifdef CONFIG_QUOTA
2865        /*
2866         * Turn on quotas which were not enabled for read-only mounts if
2867         * filesystem has quota feature, so that they are updated correctly.
2868         */
2869        if (f2fs_sb_has_quota_ino(sb) && !f2fs_readonly(sb)) {
2870                err = f2fs_enable_quotas(sb);
2871                if (err) {
2872                        f2fs_msg(sb, KERN_ERR,
2873                                "Cannot turn on quotas: error %d", err);
2874                        goto free_sysfs;
2875                }
2876        }
2877#endif
2878        /* if there are nt orphan nodes free them */
2879        err = recover_orphan_inodes(sbi);
2880        if (err)
2881                goto free_meta;
2882
2883        /* recover fsynced data */
2884        if (!test_opt(sbi, DISABLE_ROLL_FORWARD)) {
2885                /*
2886                 * mount should be failed, when device has readonly mode, and
2887                 * previous checkpoint was not done by clean system shutdown.
2888                 */
2889                if (bdev_read_only(sb->s_bdev) &&
2890                                !is_set_ckpt_flags(sbi, CP_UMOUNT_FLAG)) {
2891                        err = -EROFS;
2892                        goto free_meta;
2893                }
2894
2895                if (need_fsck)
2896                        set_sbi_flag(sbi, SBI_NEED_FSCK);
2897
2898                if (!retry)
2899                        goto skip_recovery;
2900
2901                err = recover_fsync_data(sbi, false);
2902                if (err < 0) {
2903                        need_fsck = true;
2904                        f2fs_msg(sb, KERN_ERR,
2905                                "Cannot recover all fsync data errno=%d", err);
2906                        goto free_meta;
2907                }
2908        } else {
2909                err = recover_fsync_data(sbi, true);
2910
2911                if (!f2fs_readonly(sb) && err > 0) {
2912                        err = -EINVAL;
2913                        f2fs_msg(sb, KERN_ERR,
2914                                "Need to recover fsync data");
2915                        goto free_meta;
2916                }
2917        }
2918skip_recovery:
2919        /* recover_fsync_data() cleared this already */
2920        clear_sbi_flag(sbi, SBI_POR_DOING);
2921
2922        /*
2923         * If filesystem is not mounted as read-only then
2924         * do start the gc_thread.
2925         */
2926        if (test_opt(sbi, BG_GC) && !f2fs_readonly(sb)) {
2927                /* After POR, we can run background GC thread.*/
2928                err = start_gc_thread(sbi);
2929                if (err)
2930                        goto free_meta;
2931        }
2932        kfree(options);
2933
2934        /* recover broken superblock */
2935        if (recovery) {
2936                err = f2fs_commit_super(sbi, true);
2937                f2fs_msg(sb, KERN_INFO,
2938                        "Try to recover %dth superblock, ret: %d",
2939                        sbi->valid_super_block ? 1 : 2, err);
2940        }
2941
2942        f2fs_join_shrinker(sbi);
2943
2944        f2fs_tuning_parameters(sbi);
2945
2946        f2fs_msg(sbi->sb, KERN_NOTICE, "Mounted with checkpoint version = %llx",
2947                                cur_cp_version(F2FS_CKPT(sbi)));
2948        f2fs_update_time(sbi, CP_TIME);
2949        f2fs_update_time(sbi, REQ_TIME);
2950        return 0;
2951
2952free_meta:
2953#ifdef CONFIG_QUOTA
2954        if (f2fs_sb_has_quota_ino(sb) && !f2fs_readonly(sb))
2955                f2fs_quota_off_umount(sbi->sb);
2956#endif
2957        f2fs_sync_inode_meta(sbi);
2958        /*
2959         * Some dirty meta pages can be produced by recover_orphan_inodes()
2960         * failed by EIO. Then, iput(node_inode) can trigger balance_fs_bg()
2961         * followed by write_checkpoint() through f2fs_write_node_pages(), which
2962         * falls into an infinite loop in sync_meta_pages().
2963         */
2964        truncate_inode_pages_final(META_MAPPING(sbi));
2965#ifdef CONFIG_QUOTA
2966free_sysfs:
2967#endif
2968        f2fs_unregister_sysfs(sbi);
2969free_root_inode:
2970        dput(sb->s_root);
2971        sb->s_root = NULL;
2972free_stats:
2973        f2fs_destroy_stats(sbi);
2974free_node_inode:
2975        release_ino_entry(sbi, true);
2976        truncate_inode_pages_final(NODE_MAPPING(sbi));
2977        iput(sbi->node_inode);
2978free_nm:
2979        destroy_node_manager(sbi);
2980free_sm:
2981        destroy_segment_manager(sbi);
2982free_devices:
2983        destroy_device_list(sbi);
2984        kfree(sbi->ckpt);
2985free_meta_inode:
2986        make_bad_inode(sbi->meta_inode);
2987        iput(sbi->meta_inode);
2988free_io_dummy:
2989        mempool_destroy(sbi->write_io_dummy);
2990free_percpu:
2991        destroy_percpu_info(sbi);
2992free_bio_info:
2993        for (i = 0; i < NR_PAGE_TYPE; i++)
2994                kfree(sbi->write_io[i]);
2995free_options:
2996#ifdef CONFIG_QUOTA
2997        for (i = 0; i < MAXQUOTAS; i++)
2998                kfree(F2FS_OPTION(sbi).s_qf_names[i]);
2999#endif
3000        kfree(options);
3001free_sb_buf:
3002        kfree(raw_super);
3003free_sbi:
3004        if (sbi->s_chksum_driver)
3005                crypto_free_shash(sbi->s_chksum_driver);
3006        kfree(sbi);
3007
3008        /* give only one another chance */
3009        if (retry) {
3010                retry = false;
3011                shrink_dcache_sb(sb);
3012                goto try_onemore;
3013        }
3014        return err;
3015}
3016
3017static struct dentry *f2fs_mount(struct file_system_type *fs_type, int flags,
3018                        const char *dev_name, void *data)
3019{
3020        return mount_bdev(fs_type, flags, dev_name, data, f2fs_fill_super);
3021}
3022
3023static void kill_f2fs_super(struct super_block *sb)
3024{
3025        if (sb->s_root) {
3026                set_sbi_flag(F2FS_SB(sb), SBI_IS_CLOSE);
3027                stop_gc_thread(F2FS_SB(sb));
3028                stop_discard_thread(F2FS_SB(sb));
3029        }
3030        kill_block_super(sb);
3031}
3032
3033static struct file_system_type f2fs_fs_type = {
3034        .owner          = THIS_MODULE,
3035        .name           = "f2fs",
3036        .mount          = f2fs_mount,
3037        .kill_sb        = kill_f2fs_super,
3038        .fs_flags       = FS_REQUIRES_DEV,
3039};
3040MODULE_ALIAS_FS("f2fs");
3041
3042static int __init init_inodecache(void)
3043{
3044        f2fs_inode_cachep = kmem_cache_create("f2fs_inode_cache",
3045                        sizeof(struct f2fs_inode_info), 0,
3046                        SLAB_RECLAIM_ACCOUNT|SLAB_ACCOUNT, NULL);
3047        if (!f2fs_inode_cachep)
3048                return -ENOMEM;
3049        return 0;
3050}
3051
3052static void destroy_inodecache(void)
3053{
3054        /*
3055         * Make sure all delayed rcu free inodes are flushed before we
3056         * destroy cache.
3057         */
3058        rcu_barrier();
3059        kmem_cache_destroy(f2fs_inode_cachep);
3060}
3061
3062static int __init init_f2fs_fs(void)
3063{
3064        int err;
3065
3066        f2fs_build_trace_ios();
3067
3068        err = init_inodecache();
3069        if (err)
3070                goto fail;
3071        err = create_node_manager_caches();
3072        if (err)
3073                goto free_inodecache;
3074        err = create_segment_manager_caches();
3075        if (err)
3076                goto free_node_manager_caches;
3077        err = create_checkpoint_caches();
3078        if (err)
3079                goto free_segment_manager_caches;
3080        err = create_extent_cache();
3081        if (err)
3082                goto free_checkpoint_caches;
3083        err = f2fs_init_sysfs();
3084        if (err)
3085                goto free_extent_cache;
3086        err = register_shrinker(&f2fs_shrinker_info);
3087        if (err)
3088                goto free_sysfs;
3089        err = register_filesystem(&f2fs_fs_type);
3090        if (err)
3091                goto free_shrinker;
3092        err = f2fs_create_root_stats();
3093        if (err)
3094                goto free_filesystem;
3095        return 0;
3096
3097free_filesystem:
3098        unregister_filesystem(&f2fs_fs_type);
3099free_shrinker:
3100        unregister_shrinker(&f2fs_shrinker_info);
3101free_sysfs:
3102        f2fs_exit_sysfs();
3103free_extent_cache:
3104        destroy_extent_cache();
3105free_checkpoint_caches:
3106        destroy_checkpoint_caches();
3107free_segment_manager_caches:
3108        destroy_segment_manager_caches();
3109free_node_manager_caches:
3110        destroy_node_manager_caches();
3111free_inodecache:
3112        destroy_inodecache();
3113fail:
3114        return err;
3115}
3116
3117static void __exit exit_f2fs_fs(void)
3118{
3119        f2fs_destroy_root_stats();
3120        unregister_filesystem(&f2fs_fs_type);
3121        unregister_shrinker(&f2fs_shrinker_info);
3122        f2fs_exit_sysfs();
3123        destroy_extent_cache();
3124        destroy_checkpoint_caches();
3125        destroy_segment_manager_caches();
3126        destroy_node_manager_caches();
3127        destroy_inodecache();
3128        f2fs_destroy_trace_ios();
3129}
3130
3131module_init(init_f2fs_fs)
3132module_exit(exit_f2fs_fs)
3133
3134MODULE_AUTHOR("Samsung Electronics's Praesto Team");
3135MODULE_DESCRIPTION("Flash Friendly File System");
3136MODULE_LICENSE("GPL");
3137
3138