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 if (strlen(name) == 9 &&
 744                                        !strncmp(name, "nobarrier", 9)) {
 745                                F2FS_OPTION(sbi).fsync_mode =
 746                                                        FSYNC_MODE_NOBARRIER;
 747                        } else {
 748                                kfree(name);
 749                                return -EINVAL;
 750                        }
 751                        kfree(name);
 752                        break;
 753                case Opt_test_dummy_encryption:
 754#ifdef CONFIG_F2FS_FS_ENCRYPTION
 755                        if (!f2fs_sb_has_encrypt(sb)) {
 756                                f2fs_msg(sb, KERN_ERR, "Encrypt feature is off");
 757                                return -EINVAL;
 758                        }
 759
 760                        F2FS_OPTION(sbi).test_dummy_encryption = true;
 761                        f2fs_msg(sb, KERN_INFO,
 762                                        "Test dummy encryption mode enabled");
 763#else
 764                        f2fs_msg(sb, KERN_INFO,
 765                                        "Test dummy encryption mount option ignored");
 766#endif
 767                        break;
 768                default:
 769                        f2fs_msg(sb, KERN_ERR,
 770                                "Unrecognized mount option \"%s\" or missing value",
 771                                p);
 772                        return -EINVAL;
 773                }
 774        }
 775#ifdef CONFIG_QUOTA
 776        if (f2fs_check_quota_options(sbi))
 777                return -EINVAL;
 778#endif
 779
 780        if (F2FS_IO_SIZE_BITS(sbi) && !test_opt(sbi, LFS)) {
 781                f2fs_msg(sb, KERN_ERR,
 782                                "Should set mode=lfs with %uKB-sized IO",
 783                                F2FS_IO_SIZE_KB(sbi));
 784                return -EINVAL;
 785        }
 786
 787        if (test_opt(sbi, INLINE_XATTR_SIZE)) {
 788                if (!f2fs_sb_has_extra_attr(sb) ||
 789                        !f2fs_sb_has_flexible_inline_xattr(sb)) {
 790                        f2fs_msg(sb, KERN_ERR,
 791                                        "extra_attr or flexible_inline_xattr "
 792                                        "feature is off");
 793                        return -EINVAL;
 794                }
 795                if (!test_opt(sbi, INLINE_XATTR)) {
 796                        f2fs_msg(sb, KERN_ERR,
 797                                        "inline_xattr_size option should be "
 798                                        "set with inline_xattr option");
 799                        return -EINVAL;
 800                }
 801                if (!F2FS_OPTION(sbi).inline_xattr_size ||
 802                        F2FS_OPTION(sbi).inline_xattr_size >=
 803                                        DEF_ADDRS_PER_INODE -
 804                                        F2FS_TOTAL_EXTRA_ATTR_SIZE -
 805                                        DEF_INLINE_RESERVED_SIZE -
 806                                        DEF_MIN_INLINE_SIZE) {
 807                        f2fs_msg(sb, KERN_ERR,
 808                                        "inline xattr size is out of range");
 809                        return -EINVAL;
 810                }
 811        }
 812
 813        /* Not pass down write hints if the number of active logs is lesser
 814         * than NR_CURSEG_TYPE.
 815         */
 816        if (F2FS_OPTION(sbi).active_logs != NR_CURSEG_TYPE)
 817                F2FS_OPTION(sbi).whint_mode = WHINT_MODE_OFF;
 818        return 0;
 819}
 820
 821static struct inode *f2fs_alloc_inode(struct super_block *sb)
 822{
 823        struct f2fs_inode_info *fi;
 824
 825        fi = kmem_cache_alloc(f2fs_inode_cachep, GFP_F2FS_ZERO);
 826        if (!fi)
 827                return NULL;
 828
 829        init_once((void *) fi);
 830
 831        /* Initialize f2fs-specific inode info */
 832        atomic_set(&fi->dirty_pages, 0);
 833        init_rwsem(&fi->i_sem);
 834        INIT_LIST_HEAD(&fi->dirty_list);
 835        INIT_LIST_HEAD(&fi->gdirty_list);
 836        INIT_LIST_HEAD(&fi->inmem_ilist);
 837        INIT_LIST_HEAD(&fi->inmem_pages);
 838        mutex_init(&fi->inmem_lock);
 839        init_rwsem(&fi->i_gc_rwsem[READ]);
 840        init_rwsem(&fi->i_gc_rwsem[WRITE]);
 841        init_rwsem(&fi->i_mmap_sem);
 842        init_rwsem(&fi->i_xattr_sem);
 843
 844        /* Will be used by directory only */
 845        fi->i_dir_level = F2FS_SB(sb)->dir_level;
 846
 847        return &fi->vfs_inode;
 848}
 849
 850static int f2fs_drop_inode(struct inode *inode)
 851{
 852        int ret;
 853        /*
 854         * This is to avoid a deadlock condition like below.
 855         * writeback_single_inode(inode)
 856         *  - f2fs_write_data_page
 857         *    - f2fs_gc -> iput -> evict
 858         *       - inode_wait_for_writeback(inode)
 859         */
 860        if ((!inode_unhashed(inode) && inode->i_state & I_SYNC)) {
 861                if (!inode->i_nlink && !is_bad_inode(inode)) {
 862                        /* to avoid evict_inode call simultaneously */
 863                        atomic_inc(&inode->i_count);
 864                        spin_unlock(&inode->i_lock);
 865
 866                        /* some remained atomic pages should discarded */
 867                        if (f2fs_is_atomic_file(inode))
 868                                f2fs_drop_inmem_pages(inode);
 869
 870                        /* should remain fi->extent_tree for writepage */
 871                        f2fs_destroy_extent_node(inode);
 872
 873                        sb_start_intwrite(inode->i_sb);
 874                        f2fs_i_size_write(inode, 0);
 875
 876                        if (F2FS_HAS_BLOCKS(inode))
 877                                f2fs_truncate(inode);
 878
 879                        sb_end_intwrite(inode->i_sb);
 880
 881                        spin_lock(&inode->i_lock);
 882                        atomic_dec(&inode->i_count);
 883                }
 884                trace_f2fs_drop_inode(inode, 0);
 885                return 0;
 886        }
 887        ret = generic_drop_inode(inode);
 888        trace_f2fs_drop_inode(inode, ret);
 889        return ret;
 890}
 891
 892int f2fs_inode_dirtied(struct inode *inode, bool sync)
 893{
 894        struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
 895        int ret = 0;
 896
 897        spin_lock(&sbi->inode_lock[DIRTY_META]);
 898        if (is_inode_flag_set(inode, FI_DIRTY_INODE)) {
 899                ret = 1;
 900        } else {
 901                set_inode_flag(inode, FI_DIRTY_INODE);
 902                stat_inc_dirty_inode(sbi, DIRTY_META);
 903        }
 904        if (sync && list_empty(&F2FS_I(inode)->gdirty_list)) {
 905                list_add_tail(&F2FS_I(inode)->gdirty_list,
 906                                &sbi->inode_list[DIRTY_META]);
 907                inc_page_count(sbi, F2FS_DIRTY_IMETA);
 908        }
 909        spin_unlock(&sbi->inode_lock[DIRTY_META]);
 910        return ret;
 911}
 912
 913void f2fs_inode_synced(struct inode *inode)
 914{
 915        struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
 916
 917        spin_lock(&sbi->inode_lock[DIRTY_META]);
 918        if (!is_inode_flag_set(inode, FI_DIRTY_INODE)) {
 919                spin_unlock(&sbi->inode_lock[DIRTY_META]);
 920                return;
 921        }
 922        if (!list_empty(&F2FS_I(inode)->gdirty_list)) {
 923                list_del_init(&F2FS_I(inode)->gdirty_list);
 924                dec_page_count(sbi, F2FS_DIRTY_IMETA);
 925        }
 926        clear_inode_flag(inode, FI_DIRTY_INODE);
 927        clear_inode_flag(inode, FI_AUTO_RECOVER);
 928        stat_dec_dirty_inode(F2FS_I_SB(inode), DIRTY_META);
 929        spin_unlock(&sbi->inode_lock[DIRTY_META]);
 930}
 931
 932/*
 933 * f2fs_dirty_inode() is called from __mark_inode_dirty()
 934 *
 935 * We should call set_dirty_inode to write the dirty inode through write_inode.
 936 */
 937static void f2fs_dirty_inode(struct inode *inode, int flags)
 938{
 939        struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
 940
 941        if (inode->i_ino == F2FS_NODE_INO(sbi) ||
 942                        inode->i_ino == F2FS_META_INO(sbi))
 943                return;
 944
 945        if (flags == I_DIRTY_TIME)
 946                return;
 947
 948        if (is_inode_flag_set(inode, FI_AUTO_RECOVER))
 949                clear_inode_flag(inode, FI_AUTO_RECOVER);
 950
 951        f2fs_inode_dirtied(inode, false);
 952}
 953
 954static void f2fs_i_callback(struct rcu_head *head)
 955{
 956        struct inode *inode = container_of(head, struct inode, i_rcu);
 957        kmem_cache_free(f2fs_inode_cachep, F2FS_I(inode));
 958}
 959
 960static void f2fs_destroy_inode(struct inode *inode)
 961{
 962        call_rcu(&inode->i_rcu, f2fs_i_callback);
 963}
 964
 965static void destroy_percpu_info(struct f2fs_sb_info *sbi)
 966{
 967        percpu_counter_destroy(&sbi->alloc_valid_block_count);
 968        percpu_counter_destroy(&sbi->total_valid_inode_count);
 969}
 970
 971static void destroy_device_list(struct f2fs_sb_info *sbi)
 972{
 973        int i;
 974
 975        for (i = 0; i < sbi->s_ndevs; i++) {
 976                blkdev_put(FDEV(i).bdev, FMODE_EXCL);
 977#ifdef CONFIG_BLK_DEV_ZONED
 978                kfree(FDEV(i).blkz_type);
 979#endif
 980        }
 981        kfree(sbi->devs);
 982}
 983
 984static void f2fs_put_super(struct super_block *sb)
 985{
 986        struct f2fs_sb_info *sbi = F2FS_SB(sb);
 987        int i;
 988        bool dropped;
 989
 990        f2fs_quota_off_umount(sb);
 991
 992        /* prevent remaining shrinker jobs */
 993        mutex_lock(&sbi->umount_mutex);
 994
 995        /*
 996         * We don't need to do checkpoint when superblock is clean.
 997         * But, the previous checkpoint was not done by umount, it needs to do
 998         * clean checkpoint again.
 999         */
1000        if (is_sbi_flag_set(sbi, SBI_IS_DIRTY) ||
1001                        !is_set_ckpt_flags(sbi, CP_UMOUNT_FLAG)) {
1002                struct cp_control cpc = {
1003                        .reason = CP_UMOUNT,
1004                };
1005                f2fs_write_checkpoint(sbi, &cpc);
1006        }
1007
1008        /* be sure to wait for any on-going discard commands */
1009        dropped = f2fs_wait_discard_bios(sbi);
1010
1011        if (f2fs_discard_en(sbi) && !sbi->discard_blks && !dropped) {
1012                struct cp_control cpc = {
1013                        .reason = CP_UMOUNT | CP_TRIMMED,
1014                };
1015                f2fs_write_checkpoint(sbi, &cpc);
1016        }
1017
1018        /* f2fs_write_checkpoint can update stat informaion */
1019        f2fs_destroy_stats(sbi);
1020
1021        /*
1022         * normally superblock is clean, so we need to release this.
1023         * In addition, EIO will skip do checkpoint, we need this as well.
1024         */
1025        f2fs_release_ino_entry(sbi, true);
1026
1027        f2fs_leave_shrinker(sbi);
1028        mutex_unlock(&sbi->umount_mutex);
1029
1030        /* our cp_error case, we can wait for any writeback page */
1031        f2fs_flush_merged_writes(sbi);
1032
1033        iput(sbi->node_inode);
1034        iput(sbi->meta_inode);
1035
1036        /* destroy f2fs internal modules */
1037        f2fs_destroy_node_manager(sbi);
1038        f2fs_destroy_segment_manager(sbi);
1039
1040        kfree(sbi->ckpt);
1041
1042        f2fs_unregister_sysfs(sbi);
1043
1044        sb->s_fs_info = NULL;
1045        if (sbi->s_chksum_driver)
1046                crypto_free_shash(sbi->s_chksum_driver);
1047        kfree(sbi->raw_super);
1048
1049        destroy_device_list(sbi);
1050        mempool_destroy(sbi->write_io_dummy);
1051#ifdef CONFIG_QUOTA
1052        for (i = 0; i < MAXQUOTAS; i++)
1053                kfree(F2FS_OPTION(sbi).s_qf_names[i]);
1054#endif
1055        destroy_percpu_info(sbi);
1056        for (i = 0; i < NR_PAGE_TYPE; i++)
1057                kfree(sbi->write_io[i]);
1058        kfree(sbi);
1059}
1060
1061int f2fs_sync_fs(struct super_block *sb, int sync)
1062{
1063        struct f2fs_sb_info *sbi = F2FS_SB(sb);
1064        int err = 0;
1065
1066        if (unlikely(f2fs_cp_error(sbi)))
1067                return 0;
1068
1069        trace_f2fs_sync_fs(sb, sync);
1070
1071        if (unlikely(is_sbi_flag_set(sbi, SBI_POR_DOING)))
1072                return -EAGAIN;
1073
1074        if (sync) {
1075                struct cp_control cpc;
1076
1077                cpc.reason = __get_cp_reason(sbi);
1078
1079                mutex_lock(&sbi->gc_mutex);
1080                err = f2fs_write_checkpoint(sbi, &cpc);
1081                mutex_unlock(&sbi->gc_mutex);
1082        }
1083        f2fs_trace_ios(NULL, 1);
1084
1085        return err;
1086}
1087
1088static int f2fs_freeze(struct super_block *sb)
1089{
1090        if (f2fs_readonly(sb))
1091                return 0;
1092
1093        /* IO error happened before */
1094        if (unlikely(f2fs_cp_error(F2FS_SB(sb))))
1095                return -EIO;
1096
1097        /* must be clean, since sync_filesystem() was already called */
1098        if (is_sbi_flag_set(F2FS_SB(sb), SBI_IS_DIRTY))
1099                return -EINVAL;
1100        return 0;
1101}
1102
1103static int f2fs_unfreeze(struct super_block *sb)
1104{
1105        return 0;
1106}
1107
1108#ifdef CONFIG_QUOTA
1109static int f2fs_statfs_project(struct super_block *sb,
1110                                kprojid_t projid, struct kstatfs *buf)
1111{
1112        struct kqid qid;
1113        struct dquot *dquot;
1114        u64 limit;
1115        u64 curblock;
1116
1117        qid = make_kqid_projid(projid);
1118        dquot = dqget(sb, qid);
1119        if (IS_ERR(dquot))
1120                return PTR_ERR(dquot);
1121        spin_lock(&dq_data_lock);
1122
1123        limit = (dquot->dq_dqb.dqb_bsoftlimit ?
1124                 dquot->dq_dqb.dqb_bsoftlimit :
1125                 dquot->dq_dqb.dqb_bhardlimit) >> sb->s_blocksize_bits;
1126        if (limit && buf->f_blocks > limit) {
1127                curblock = dquot->dq_dqb.dqb_curspace >> sb->s_blocksize_bits;
1128                buf->f_blocks = limit;
1129                buf->f_bfree = buf->f_bavail =
1130                        (buf->f_blocks > curblock) ?
1131                         (buf->f_blocks - curblock) : 0;
1132        }
1133
1134        limit = dquot->dq_dqb.dqb_isoftlimit ?
1135                dquot->dq_dqb.dqb_isoftlimit :
1136                dquot->dq_dqb.dqb_ihardlimit;
1137        if (limit && buf->f_files > limit) {
1138                buf->f_files = limit;
1139                buf->f_ffree =
1140                        (buf->f_files > dquot->dq_dqb.dqb_curinodes) ?
1141                         (buf->f_files - dquot->dq_dqb.dqb_curinodes) : 0;
1142        }
1143
1144        spin_unlock(&dq_data_lock);
1145        dqput(dquot);
1146        return 0;
1147}
1148#endif
1149
1150static int f2fs_statfs(struct dentry *dentry, struct kstatfs *buf)
1151{
1152        struct super_block *sb = dentry->d_sb;
1153        struct f2fs_sb_info *sbi = F2FS_SB(sb);
1154        u64 id = huge_encode_dev(sb->s_bdev->bd_dev);
1155        block_t total_count, user_block_count, start_count;
1156        u64 avail_node_count;
1157
1158        total_count = le64_to_cpu(sbi->raw_super->block_count);
1159        user_block_count = sbi->user_block_count;
1160        start_count = le32_to_cpu(sbi->raw_super->segment0_blkaddr);
1161        buf->f_type = F2FS_SUPER_MAGIC;
1162        buf->f_bsize = sbi->blocksize;
1163
1164        buf->f_blocks = total_count - start_count;
1165        buf->f_bfree = user_block_count - valid_user_blocks(sbi) -
1166                                                sbi->current_reserved_blocks;
1167        if (buf->f_bfree > F2FS_OPTION(sbi).root_reserved_blocks)
1168                buf->f_bavail = buf->f_bfree -
1169                                F2FS_OPTION(sbi).root_reserved_blocks;
1170        else
1171                buf->f_bavail = 0;
1172
1173        avail_node_count = sbi->total_node_count - sbi->nquota_files -
1174                                                F2FS_RESERVED_NODE_NUM;
1175
1176        if (avail_node_count > user_block_count) {
1177                buf->f_files = user_block_count;
1178                buf->f_ffree = buf->f_bavail;
1179        } else {
1180                buf->f_files = avail_node_count;
1181                buf->f_ffree = min(avail_node_count - valid_node_count(sbi),
1182                                        buf->f_bavail);
1183        }
1184
1185        buf->f_namelen = F2FS_NAME_LEN;
1186        buf->f_fsid.val[0] = (u32)id;
1187        buf->f_fsid.val[1] = (u32)(id >> 32);
1188
1189#ifdef CONFIG_QUOTA
1190        if (is_inode_flag_set(dentry->d_inode, FI_PROJ_INHERIT) &&
1191                        sb_has_quota_limits_enabled(sb, PRJQUOTA)) {
1192                f2fs_statfs_project(sb, F2FS_I(dentry->d_inode)->i_projid, buf);
1193        }
1194#endif
1195        return 0;
1196}
1197
1198static inline void f2fs_show_quota_options(struct seq_file *seq,
1199                                           struct super_block *sb)
1200{
1201#ifdef CONFIG_QUOTA
1202        struct f2fs_sb_info *sbi = F2FS_SB(sb);
1203
1204        if (F2FS_OPTION(sbi).s_jquota_fmt) {
1205                char *fmtname = "";
1206
1207                switch (F2FS_OPTION(sbi).s_jquota_fmt) {
1208                case QFMT_VFS_OLD:
1209                        fmtname = "vfsold";
1210                        break;
1211                case QFMT_VFS_V0:
1212                        fmtname = "vfsv0";
1213                        break;
1214                case QFMT_VFS_V1:
1215                        fmtname = "vfsv1";
1216                        break;
1217                }
1218                seq_printf(seq, ",jqfmt=%s", fmtname);
1219        }
1220
1221        if (F2FS_OPTION(sbi).s_qf_names[USRQUOTA])
1222                seq_show_option(seq, "usrjquota",
1223                        F2FS_OPTION(sbi).s_qf_names[USRQUOTA]);
1224
1225        if (F2FS_OPTION(sbi).s_qf_names[GRPQUOTA])
1226                seq_show_option(seq, "grpjquota",
1227                        F2FS_OPTION(sbi).s_qf_names[GRPQUOTA]);
1228
1229        if (F2FS_OPTION(sbi).s_qf_names[PRJQUOTA])
1230                seq_show_option(seq, "prjjquota",
1231                        F2FS_OPTION(sbi).s_qf_names[PRJQUOTA]);
1232#endif
1233}
1234
1235static int f2fs_show_options(struct seq_file *seq, struct dentry *root)
1236{
1237        struct f2fs_sb_info *sbi = F2FS_SB(root->d_sb);
1238
1239        if (!f2fs_readonly(sbi->sb) && test_opt(sbi, BG_GC)) {
1240                if (test_opt(sbi, FORCE_FG_GC))
1241                        seq_printf(seq, ",background_gc=%s", "sync");
1242                else
1243                        seq_printf(seq, ",background_gc=%s", "on");
1244        } else {
1245                seq_printf(seq, ",background_gc=%s", "off");
1246        }
1247        if (test_opt(sbi, DISABLE_ROLL_FORWARD))
1248                seq_puts(seq, ",disable_roll_forward");
1249        if (test_opt(sbi, DISCARD))
1250                seq_puts(seq, ",discard");
1251        if (test_opt(sbi, NOHEAP))
1252                seq_puts(seq, ",no_heap");
1253        else
1254                seq_puts(seq, ",heap");
1255#ifdef CONFIG_F2FS_FS_XATTR
1256        if (test_opt(sbi, XATTR_USER))
1257                seq_puts(seq, ",user_xattr");
1258        else
1259                seq_puts(seq, ",nouser_xattr");
1260        if (test_opt(sbi, INLINE_XATTR))
1261                seq_puts(seq, ",inline_xattr");
1262        else
1263                seq_puts(seq, ",noinline_xattr");
1264        if (test_opt(sbi, INLINE_XATTR_SIZE))
1265                seq_printf(seq, ",inline_xattr_size=%u",
1266                                        F2FS_OPTION(sbi).inline_xattr_size);
1267#endif
1268#ifdef CONFIG_F2FS_FS_POSIX_ACL
1269        if (test_opt(sbi, POSIX_ACL))
1270                seq_puts(seq, ",acl");
1271        else
1272                seq_puts(seq, ",noacl");
1273#endif
1274        if (test_opt(sbi, DISABLE_EXT_IDENTIFY))
1275                seq_puts(seq, ",disable_ext_identify");
1276        if (test_opt(sbi, INLINE_DATA))
1277                seq_puts(seq, ",inline_data");
1278        else
1279                seq_puts(seq, ",noinline_data");
1280        if (test_opt(sbi, INLINE_DENTRY))
1281                seq_puts(seq, ",inline_dentry");
1282        else
1283                seq_puts(seq, ",noinline_dentry");
1284        if (!f2fs_readonly(sbi->sb) && test_opt(sbi, FLUSH_MERGE))
1285                seq_puts(seq, ",flush_merge");
1286        if (test_opt(sbi, NOBARRIER))
1287                seq_puts(seq, ",nobarrier");
1288        if (test_opt(sbi, FASTBOOT))
1289                seq_puts(seq, ",fastboot");
1290        if (test_opt(sbi, EXTENT_CACHE))
1291                seq_puts(seq, ",extent_cache");
1292        else
1293                seq_puts(seq, ",noextent_cache");
1294        if (test_opt(sbi, DATA_FLUSH))
1295                seq_puts(seq, ",data_flush");
1296
1297        seq_puts(seq, ",mode=");
1298        if (test_opt(sbi, ADAPTIVE))
1299                seq_puts(seq, "adaptive");
1300        else if (test_opt(sbi, LFS))
1301                seq_puts(seq, "lfs");
1302        seq_printf(seq, ",active_logs=%u", F2FS_OPTION(sbi).active_logs);
1303        if (test_opt(sbi, RESERVE_ROOT))
1304                seq_printf(seq, ",reserve_root=%u,resuid=%u,resgid=%u",
1305                                F2FS_OPTION(sbi).root_reserved_blocks,
1306                                from_kuid_munged(&init_user_ns,
1307                                        F2FS_OPTION(sbi).s_resuid),
1308                                from_kgid_munged(&init_user_ns,
1309                                        F2FS_OPTION(sbi).s_resgid));
1310        if (F2FS_IO_SIZE_BITS(sbi))
1311                seq_printf(seq, ",io_size=%uKB", F2FS_IO_SIZE_KB(sbi));
1312#ifdef CONFIG_F2FS_FAULT_INJECTION
1313        if (test_opt(sbi, FAULT_INJECTION))
1314                seq_printf(seq, ",fault_injection=%u",
1315                                F2FS_OPTION(sbi).fault_info.inject_rate);
1316#endif
1317#ifdef CONFIG_QUOTA
1318        if (test_opt(sbi, QUOTA))
1319                seq_puts(seq, ",quota");
1320        if (test_opt(sbi, USRQUOTA))
1321                seq_puts(seq, ",usrquota");
1322        if (test_opt(sbi, GRPQUOTA))
1323                seq_puts(seq, ",grpquota");
1324        if (test_opt(sbi, PRJQUOTA))
1325                seq_puts(seq, ",prjquota");
1326#endif
1327        f2fs_show_quota_options(seq, sbi->sb);
1328        if (F2FS_OPTION(sbi).whint_mode == WHINT_MODE_USER)
1329                seq_printf(seq, ",whint_mode=%s", "user-based");
1330        else if (F2FS_OPTION(sbi).whint_mode == WHINT_MODE_FS)
1331                seq_printf(seq, ",whint_mode=%s", "fs-based");
1332#ifdef CONFIG_F2FS_FS_ENCRYPTION
1333        if (F2FS_OPTION(sbi).test_dummy_encryption)
1334                seq_puts(seq, ",test_dummy_encryption");
1335#endif
1336
1337        if (F2FS_OPTION(sbi).alloc_mode == ALLOC_MODE_DEFAULT)
1338                seq_printf(seq, ",alloc_mode=%s", "default");
1339        else if (F2FS_OPTION(sbi).alloc_mode == ALLOC_MODE_REUSE)
1340                seq_printf(seq, ",alloc_mode=%s", "reuse");
1341
1342        if (F2FS_OPTION(sbi).fsync_mode == FSYNC_MODE_POSIX)
1343                seq_printf(seq, ",fsync_mode=%s", "posix");
1344        else if (F2FS_OPTION(sbi).fsync_mode == FSYNC_MODE_STRICT)
1345                seq_printf(seq, ",fsync_mode=%s", "strict");
1346        return 0;
1347}
1348
1349static void default_options(struct f2fs_sb_info *sbi)
1350{
1351        /* init some FS parameters */
1352        F2FS_OPTION(sbi).active_logs = NR_CURSEG_TYPE;
1353        F2FS_OPTION(sbi).inline_xattr_size = DEFAULT_INLINE_XATTR_ADDRS;
1354        F2FS_OPTION(sbi).whint_mode = WHINT_MODE_OFF;
1355        F2FS_OPTION(sbi).alloc_mode = ALLOC_MODE_DEFAULT;
1356        F2FS_OPTION(sbi).fsync_mode = FSYNC_MODE_POSIX;
1357        F2FS_OPTION(sbi).test_dummy_encryption = false;
1358        sbi->readdir_ra = 1;
1359
1360        set_opt(sbi, BG_GC);
1361        set_opt(sbi, INLINE_XATTR);
1362        set_opt(sbi, INLINE_DATA);
1363        set_opt(sbi, INLINE_DENTRY);
1364        set_opt(sbi, EXTENT_CACHE);
1365        set_opt(sbi, NOHEAP);
1366        sbi->sb->s_flags |= SB_LAZYTIME;
1367        set_opt(sbi, FLUSH_MERGE);
1368        if (f2fs_sb_has_blkzoned(sbi->sb)) {
1369                set_opt_mode(sbi, F2FS_MOUNT_LFS);
1370                set_opt(sbi, DISCARD);
1371        } else {
1372                set_opt_mode(sbi, F2FS_MOUNT_ADAPTIVE);
1373        }
1374
1375#ifdef CONFIG_F2FS_FS_XATTR
1376        set_opt(sbi, XATTR_USER);
1377#endif
1378#ifdef CONFIG_F2FS_FS_POSIX_ACL
1379        set_opt(sbi, POSIX_ACL);
1380#endif
1381
1382#ifdef CONFIG_F2FS_FAULT_INJECTION
1383        f2fs_build_fault_attr(sbi, 0);
1384#endif
1385}
1386
1387#ifdef CONFIG_QUOTA
1388static int f2fs_enable_quotas(struct super_block *sb);
1389#endif
1390static int f2fs_remount(struct super_block *sb, int *flags, char *data)
1391{
1392        struct f2fs_sb_info *sbi = F2FS_SB(sb);
1393        struct f2fs_mount_info org_mount_opt;
1394        unsigned long old_sb_flags;
1395        int err;
1396        bool need_restart_gc = false;
1397        bool need_stop_gc = false;
1398        bool no_extent_cache = !test_opt(sbi, EXTENT_CACHE);
1399#ifdef CONFIG_QUOTA
1400        int i, j;
1401#endif
1402
1403        /*
1404         * Save the old mount options in case we
1405         * need to restore them.
1406         */
1407        org_mount_opt = sbi->mount_opt;
1408        old_sb_flags = sb->s_flags;
1409
1410#ifdef CONFIG_QUOTA
1411        org_mount_opt.s_jquota_fmt = F2FS_OPTION(sbi).s_jquota_fmt;
1412        for (i = 0; i < MAXQUOTAS; i++) {
1413                if (F2FS_OPTION(sbi).s_qf_names[i]) {
1414                        org_mount_opt.s_qf_names[i] =
1415                                kstrdup(F2FS_OPTION(sbi).s_qf_names[i],
1416                                GFP_KERNEL);
1417                        if (!org_mount_opt.s_qf_names[i]) {
1418                                for (j = 0; j < i; j++)
1419                                        kfree(org_mount_opt.s_qf_names[j]);
1420                                return -ENOMEM;
1421                        }
1422                } else {
1423                        org_mount_opt.s_qf_names[i] = NULL;
1424                }
1425        }
1426#endif
1427
1428        /* recover superblocks we couldn't write due to previous RO mount */
1429        if (!(*flags & SB_RDONLY) && is_sbi_flag_set(sbi, SBI_NEED_SB_WRITE)) {
1430                err = f2fs_commit_super(sbi, false);
1431                f2fs_msg(sb, KERN_INFO,
1432                        "Try to recover all the superblocks, ret: %d", err);
1433                if (!err)
1434                        clear_sbi_flag(sbi, SBI_NEED_SB_WRITE);
1435        }
1436
1437        default_options(sbi);
1438
1439        /* parse mount options */
1440        err = parse_options(sb, data);
1441        if (err)
1442                goto restore_opts;
1443
1444        /*
1445         * Previous and new state of filesystem is RO,
1446         * so skip checking GC and FLUSH_MERGE conditions.
1447         */
1448        if (f2fs_readonly(sb) && (*flags & SB_RDONLY))
1449                goto skip;
1450
1451#ifdef CONFIG_QUOTA
1452        if (!f2fs_readonly(sb) && (*flags & SB_RDONLY)) {
1453                err = dquot_suspend(sb, -1);
1454                if (err < 0)
1455                        goto restore_opts;
1456        } else if (f2fs_readonly(sb) && !(*flags & MS_RDONLY)) {
1457                /* dquot_resume needs RW */
1458                sb->s_flags &= ~SB_RDONLY;
1459                if (sb_any_quota_suspended(sb)) {
1460                        dquot_resume(sb, -1);
1461                } else if (f2fs_sb_has_quota_ino(sb)) {
1462                        err = f2fs_enable_quotas(sb);
1463                        if (err)
1464                                goto restore_opts;
1465                }
1466        }
1467#endif
1468        /* disallow enable/disable extent_cache dynamically */
1469        if (no_extent_cache == !!test_opt(sbi, EXTENT_CACHE)) {
1470                err = -EINVAL;
1471                f2fs_msg(sbi->sb, KERN_WARNING,
1472                                "switch extent_cache option is not allowed");
1473                goto restore_opts;
1474        }
1475
1476        /*
1477         * We stop the GC thread if FS is mounted as RO
1478         * or if background_gc = off is passed in mount
1479         * option. Also sync the filesystem.
1480         */
1481        if ((*flags & SB_RDONLY) || !test_opt(sbi, BG_GC)) {
1482                if (sbi->gc_thread) {
1483                        f2fs_stop_gc_thread(sbi);
1484                        need_restart_gc = true;
1485                }
1486        } else if (!sbi->gc_thread) {
1487                err = f2fs_start_gc_thread(sbi);
1488                if (err)
1489                        goto restore_opts;
1490                need_stop_gc = true;
1491        }
1492
1493        if (*flags & SB_RDONLY ||
1494                F2FS_OPTION(sbi).whint_mode != org_mount_opt.whint_mode) {
1495                writeback_inodes_sb(sb, WB_REASON_SYNC);
1496                sync_inodes_sb(sb);
1497
1498                set_sbi_flag(sbi, SBI_IS_DIRTY);
1499                set_sbi_flag(sbi, SBI_IS_CLOSE);
1500                f2fs_sync_fs(sb, 1);
1501                clear_sbi_flag(sbi, SBI_IS_CLOSE);
1502        }
1503
1504        /*
1505         * We stop issue flush thread if FS is mounted as RO
1506         * or if flush_merge is not passed in mount option.
1507         */
1508        if ((*flags & SB_RDONLY) || !test_opt(sbi, FLUSH_MERGE)) {
1509                clear_opt(sbi, FLUSH_MERGE);
1510                f2fs_destroy_flush_cmd_control(sbi, false);
1511        } else {
1512                err = f2fs_create_flush_cmd_control(sbi);
1513                if (err)
1514                        goto restore_gc;
1515        }
1516skip:
1517#ifdef CONFIG_QUOTA
1518        /* Release old quota file names */
1519        for (i = 0; i < MAXQUOTAS; i++)
1520                kfree(org_mount_opt.s_qf_names[i]);
1521#endif
1522        /* Update the POSIXACL Flag */
1523        sb->s_flags = (sb->s_flags & ~SB_POSIXACL) |
1524                (test_opt(sbi, POSIX_ACL) ? SB_POSIXACL : 0);
1525
1526        limit_reserve_root(sbi);
1527        return 0;
1528restore_gc:
1529        if (need_restart_gc) {
1530                if (f2fs_start_gc_thread(sbi))
1531                        f2fs_msg(sbi->sb, KERN_WARNING,
1532                                "background gc thread has stopped");
1533        } else if (need_stop_gc) {
1534                f2fs_stop_gc_thread(sbi);
1535        }
1536restore_opts:
1537#ifdef CONFIG_QUOTA
1538        F2FS_OPTION(sbi).s_jquota_fmt = org_mount_opt.s_jquota_fmt;
1539        for (i = 0; i < MAXQUOTAS; i++) {
1540                kfree(F2FS_OPTION(sbi).s_qf_names[i]);
1541                F2FS_OPTION(sbi).s_qf_names[i] = org_mount_opt.s_qf_names[i];
1542        }
1543#endif
1544        sbi->mount_opt = org_mount_opt;
1545        sb->s_flags = old_sb_flags;
1546        return err;
1547}
1548
1549#ifdef CONFIG_QUOTA
1550/* Read data from quotafile */
1551static ssize_t f2fs_quota_read(struct super_block *sb, int type, char *data,
1552                               size_t len, loff_t off)
1553{
1554        struct inode *inode = sb_dqopt(sb)->files[type];
1555        struct address_space *mapping = inode->i_mapping;
1556        block_t blkidx = F2FS_BYTES_TO_BLK(off);
1557        int offset = off & (sb->s_blocksize - 1);
1558        int tocopy;
1559        size_t toread;
1560        loff_t i_size = i_size_read(inode);
1561        struct page *page;
1562        char *kaddr;
1563
1564        if (off > i_size)
1565                return 0;
1566
1567        if (off + len > i_size)
1568                len = i_size - off;
1569        toread = len;
1570        while (toread > 0) {
1571                tocopy = min_t(unsigned long, sb->s_blocksize - offset, toread);
1572repeat:
1573                page = read_cache_page_gfp(mapping, blkidx, GFP_NOFS);
1574                if (IS_ERR(page)) {
1575                        if (PTR_ERR(page) == -ENOMEM) {
1576                                congestion_wait(BLK_RW_ASYNC, HZ/50);
1577                                goto repeat;
1578                        }
1579                        return PTR_ERR(page);
1580                }
1581
1582                lock_page(page);
1583
1584                if (unlikely(page->mapping != mapping)) {
1585                        f2fs_put_page(page, 1);
1586                        goto repeat;
1587                }
1588                if (unlikely(!PageUptodate(page))) {
1589                        f2fs_put_page(page, 1);
1590                        return -EIO;
1591                }
1592
1593                kaddr = kmap_atomic(page);
1594                memcpy(data, kaddr + offset, tocopy);
1595                kunmap_atomic(kaddr);
1596                f2fs_put_page(page, 1);
1597
1598                offset = 0;
1599                toread -= tocopy;
1600                data += tocopy;
1601                blkidx++;
1602        }
1603        return len;
1604}
1605
1606/* Write to quotafile */
1607static ssize_t f2fs_quota_write(struct super_block *sb, int type,
1608                                const char *data, size_t len, loff_t off)
1609{
1610        struct inode *inode = sb_dqopt(sb)->files[type];
1611        struct address_space *mapping = inode->i_mapping;
1612        const struct address_space_operations *a_ops = mapping->a_ops;
1613        int offset = off & (sb->s_blocksize - 1);
1614        size_t towrite = len;
1615        struct page *page;
1616        char *kaddr;
1617        int err = 0;
1618        int tocopy;
1619
1620        while (towrite > 0) {
1621                tocopy = min_t(unsigned long, sb->s_blocksize - offset,
1622                                                                towrite);
1623retry:
1624                err = a_ops->write_begin(NULL, mapping, off, tocopy, 0,
1625                                                        &page, NULL);
1626                if (unlikely(err)) {
1627                        if (err == -ENOMEM) {
1628                                congestion_wait(BLK_RW_ASYNC, HZ/50);
1629                                goto retry;
1630                        }
1631                        break;
1632                }
1633
1634                kaddr = kmap_atomic(page);
1635                memcpy(kaddr + offset, data, tocopy);
1636                kunmap_atomic(kaddr);
1637                flush_dcache_page(page);
1638
1639                a_ops->write_end(NULL, mapping, off, tocopy, tocopy,
1640                                                page, NULL);
1641                offset = 0;
1642                towrite -= tocopy;
1643                off += tocopy;
1644                data += tocopy;
1645                cond_resched();
1646        }
1647
1648        if (len == towrite)
1649                return err;
1650        inode->i_mtime = inode->i_ctime = current_time(inode);
1651        f2fs_mark_inode_dirty_sync(inode, false);
1652        return len - towrite;
1653}
1654
1655static struct dquot **f2fs_get_dquots(struct inode *inode)
1656{
1657        return F2FS_I(inode)->i_dquot;
1658}
1659
1660static qsize_t *f2fs_get_reserved_space(struct inode *inode)
1661{
1662        return &F2FS_I(inode)->i_reserved_quota;
1663}
1664
1665static int f2fs_quota_on_mount(struct f2fs_sb_info *sbi, int type)
1666{
1667        return dquot_quota_on_mount(sbi->sb, F2FS_OPTION(sbi).s_qf_names[type],
1668                                        F2FS_OPTION(sbi).s_jquota_fmt, type);
1669}
1670
1671int f2fs_enable_quota_files(struct f2fs_sb_info *sbi, bool rdonly)
1672{
1673        int enabled = 0;
1674        int i, err;
1675
1676        if (f2fs_sb_has_quota_ino(sbi->sb) && rdonly) {
1677                err = f2fs_enable_quotas(sbi->sb);
1678                if (err) {
1679                        f2fs_msg(sbi->sb, KERN_ERR,
1680                                        "Cannot turn on quota_ino: %d", err);
1681                        return 0;
1682                }
1683                return 1;
1684        }
1685
1686        for (i = 0; i < MAXQUOTAS; i++) {
1687                if (F2FS_OPTION(sbi).s_qf_names[i]) {
1688                        err = f2fs_quota_on_mount(sbi, i);
1689                        if (!err) {
1690                                enabled = 1;
1691                                continue;
1692                        }
1693                        f2fs_msg(sbi->sb, KERN_ERR,
1694                                "Cannot turn on quotas: %d on %d", err, i);
1695                }
1696        }
1697        return enabled;
1698}
1699
1700static int f2fs_quota_enable(struct super_block *sb, int type, int format_id,
1701                             unsigned int flags)
1702{
1703        struct inode *qf_inode;
1704        unsigned long qf_inum;
1705        int err;
1706
1707        BUG_ON(!f2fs_sb_has_quota_ino(sb));
1708
1709        qf_inum = f2fs_qf_ino(sb, type);
1710        if (!qf_inum)
1711                return -EPERM;
1712
1713        qf_inode = f2fs_iget(sb, qf_inum);
1714        if (IS_ERR(qf_inode)) {
1715                f2fs_msg(sb, KERN_ERR,
1716                        "Bad quota inode %u:%lu", type, qf_inum);
1717                return PTR_ERR(qf_inode);
1718        }
1719
1720        /* Don't account quota for quota files to avoid recursion */
1721        qf_inode->i_flags |= S_NOQUOTA;
1722        err = dquot_enable(qf_inode, type, format_id, flags);
1723        iput(qf_inode);
1724        return err;
1725}
1726
1727static int f2fs_enable_quotas(struct super_block *sb)
1728{
1729        int type, err = 0;
1730        unsigned long qf_inum;
1731        bool quota_mopt[MAXQUOTAS] = {
1732                test_opt(F2FS_SB(sb), USRQUOTA),
1733                test_opt(F2FS_SB(sb), GRPQUOTA),
1734                test_opt(F2FS_SB(sb), PRJQUOTA),
1735        };
1736
1737        sb_dqopt(sb)->flags |= DQUOT_QUOTA_SYS_FILE | DQUOT_NOLIST_DIRTY;
1738        for (type = 0; type < MAXQUOTAS; type++) {
1739                qf_inum = f2fs_qf_ino(sb, type);
1740                if (qf_inum) {
1741                        err = f2fs_quota_enable(sb, type, QFMT_VFS_V1,
1742                                DQUOT_USAGE_ENABLED |
1743                                (quota_mopt[type] ? DQUOT_LIMITS_ENABLED : 0));
1744                        if (err) {
1745                                f2fs_msg(sb, KERN_ERR,
1746                                        "Failed to enable quota tracking "
1747                                        "(type=%d, err=%d). Please run "
1748                                        "fsck to fix.", type, err);
1749                                for (type--; type >= 0; type--)
1750                                        dquot_quota_off(sb, type);
1751                                return err;
1752                        }
1753                }
1754        }
1755        return 0;
1756}
1757
1758static int f2fs_quota_sync(struct super_block *sb, int type)
1759{
1760        struct quota_info *dqopt = sb_dqopt(sb);
1761        int cnt;
1762        int ret;
1763
1764        ret = dquot_writeback_dquots(sb, type);
1765        if (ret)
1766                return ret;
1767
1768        /*
1769         * Now when everything is written we can discard the pagecache so
1770         * that userspace sees the changes.
1771         */
1772        for (cnt = 0; cnt < MAXQUOTAS; cnt++) {
1773                if (type != -1 && cnt != type)
1774                        continue;
1775                if (!sb_has_quota_active(sb, cnt))
1776                        continue;
1777
1778                ret = filemap_write_and_wait(dqopt->files[cnt]->i_mapping);
1779                if (ret)
1780                        return ret;
1781
1782                inode_lock(dqopt->files[cnt]);
1783                truncate_inode_pages(&dqopt->files[cnt]->i_data, 0);
1784                inode_unlock(dqopt->files[cnt]);
1785        }
1786        return 0;
1787}
1788
1789static int f2fs_quota_on(struct super_block *sb, int type, int format_id,
1790                                                        const struct path *path)
1791{
1792        struct inode *inode;
1793        int err;
1794
1795        err = f2fs_quota_sync(sb, type);
1796        if (err)
1797                return err;
1798
1799        err = dquot_quota_on(sb, type, format_id, path);
1800        if (err)
1801                return err;
1802
1803        inode = d_inode(path->dentry);
1804
1805        inode_lock(inode);
1806        F2FS_I(inode)->i_flags |= F2FS_NOATIME_FL | F2FS_IMMUTABLE_FL;
1807        inode_set_flags(inode, S_NOATIME | S_IMMUTABLE,
1808                                        S_NOATIME | S_IMMUTABLE);
1809        inode_unlock(inode);
1810        f2fs_mark_inode_dirty_sync(inode, false);
1811
1812        return 0;
1813}
1814
1815static int f2fs_quota_off(struct super_block *sb, int type)
1816{
1817        struct inode *inode = sb_dqopt(sb)->files[type];
1818        int err;
1819
1820        if (!inode || !igrab(inode))
1821                return dquot_quota_off(sb, type);
1822
1823        f2fs_quota_sync(sb, type);
1824
1825        err = dquot_quota_off(sb, type);
1826        if (err || f2fs_sb_has_quota_ino(sb))
1827                goto out_put;
1828
1829        inode_lock(inode);
1830        F2FS_I(inode)->i_flags &= ~(F2FS_NOATIME_FL | F2FS_IMMUTABLE_FL);
1831        inode_set_flags(inode, 0, S_NOATIME | S_IMMUTABLE);
1832        inode_unlock(inode);
1833        f2fs_mark_inode_dirty_sync(inode, false);
1834out_put:
1835        iput(inode);
1836        return err;
1837}
1838
1839void f2fs_quota_off_umount(struct super_block *sb)
1840{
1841        int type;
1842
1843        for (type = 0; type < MAXQUOTAS; type++)
1844                f2fs_quota_off(sb, type);
1845}
1846
1847static int f2fs_get_projid(struct inode *inode, kprojid_t *projid)
1848{
1849        *projid = F2FS_I(inode)->i_projid;
1850        return 0;
1851}
1852
1853static const struct dquot_operations f2fs_quota_operations = {
1854        .get_reserved_space = f2fs_get_reserved_space,
1855        .write_dquot    = dquot_commit,
1856        .acquire_dquot  = dquot_acquire,
1857        .release_dquot  = dquot_release,
1858        .mark_dirty     = dquot_mark_dquot_dirty,
1859        .write_info     = dquot_commit_info,
1860        .alloc_dquot    = dquot_alloc,
1861        .destroy_dquot  = dquot_destroy,
1862        .get_projid     = f2fs_get_projid,
1863        .get_next_id    = dquot_get_next_id,
1864};
1865
1866static const struct quotactl_ops f2fs_quotactl_ops = {
1867        .quota_on       = f2fs_quota_on,
1868        .quota_off      = f2fs_quota_off,
1869        .quota_sync     = f2fs_quota_sync,
1870        .get_state      = dquot_get_state,
1871        .set_info       = dquot_set_dqinfo,
1872        .get_dqblk      = dquot_get_dqblk,
1873        .set_dqblk      = dquot_set_dqblk,
1874        .get_nextdqblk  = dquot_get_next_dqblk,
1875};
1876#else
1877void f2fs_quota_off_umount(struct super_block *sb)
1878{
1879}
1880#endif
1881
1882static const struct super_operations f2fs_sops = {
1883        .alloc_inode    = f2fs_alloc_inode,
1884        .drop_inode     = f2fs_drop_inode,
1885        .destroy_inode  = f2fs_destroy_inode,
1886        .write_inode    = f2fs_write_inode,
1887        .dirty_inode    = f2fs_dirty_inode,
1888        .show_options   = f2fs_show_options,
1889#ifdef CONFIG_QUOTA
1890        .quota_read     = f2fs_quota_read,
1891        .quota_write    = f2fs_quota_write,
1892        .get_dquots     = f2fs_get_dquots,
1893#endif
1894        .evict_inode    = f2fs_evict_inode,
1895        .put_super      = f2fs_put_super,
1896        .sync_fs        = f2fs_sync_fs,
1897        .freeze_fs      = f2fs_freeze,
1898        .unfreeze_fs    = f2fs_unfreeze,
1899        .statfs         = f2fs_statfs,
1900        .remount_fs     = f2fs_remount,
1901};
1902
1903#ifdef CONFIG_F2FS_FS_ENCRYPTION
1904static int f2fs_get_context(struct inode *inode, void *ctx, size_t len)
1905{
1906        return f2fs_getxattr(inode, F2FS_XATTR_INDEX_ENCRYPTION,
1907                                F2FS_XATTR_NAME_ENCRYPTION_CONTEXT,
1908                                ctx, len, NULL);
1909}
1910
1911static int f2fs_set_context(struct inode *inode, const void *ctx, size_t len,
1912                                                        void *fs_data)
1913{
1914        struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
1915
1916        /*
1917         * Encrypting the root directory is not allowed because fsck
1918         * expects lost+found directory to exist and remain unencrypted
1919         * if LOST_FOUND feature is enabled.
1920         *
1921         */
1922        if (f2fs_sb_has_lost_found(sbi->sb) &&
1923                        inode->i_ino == F2FS_ROOT_INO(sbi))
1924                return -EPERM;
1925
1926        return f2fs_setxattr(inode, F2FS_XATTR_INDEX_ENCRYPTION,
1927                                F2FS_XATTR_NAME_ENCRYPTION_CONTEXT,
1928                                ctx, len, fs_data, XATTR_CREATE);
1929}
1930
1931static bool f2fs_dummy_context(struct inode *inode)
1932{
1933        return DUMMY_ENCRYPTION_ENABLED(F2FS_I_SB(inode));
1934}
1935
1936static const struct fscrypt_operations f2fs_cryptops = {
1937        .key_prefix     = "f2fs:",
1938        .get_context    = f2fs_get_context,
1939        .set_context    = f2fs_set_context,
1940        .dummy_context  = f2fs_dummy_context,
1941        .empty_dir      = f2fs_empty_dir,
1942        .max_namelen    = F2FS_NAME_LEN,
1943};
1944#endif
1945
1946static struct inode *f2fs_nfs_get_inode(struct super_block *sb,
1947                u64 ino, u32 generation)
1948{
1949        struct f2fs_sb_info *sbi = F2FS_SB(sb);
1950        struct inode *inode;
1951
1952        if (f2fs_check_nid_range(sbi, ino))
1953                return ERR_PTR(-ESTALE);
1954
1955        /*
1956         * f2fs_iget isn't quite right if the inode is currently unallocated!
1957         * However f2fs_iget currently does appropriate checks to handle stale
1958         * inodes so everything is OK.
1959         */
1960        inode = f2fs_iget(sb, ino);
1961        if (IS_ERR(inode))
1962                return ERR_CAST(inode);
1963        if (unlikely(generation && inode->i_generation != generation)) {
1964                /* we didn't find the right inode.. */
1965                iput(inode);
1966                return ERR_PTR(-ESTALE);
1967        }
1968        return inode;
1969}
1970
1971static struct dentry *f2fs_fh_to_dentry(struct super_block *sb, struct fid *fid,
1972                int fh_len, int fh_type)
1973{
1974        return generic_fh_to_dentry(sb, fid, fh_len, fh_type,
1975                                    f2fs_nfs_get_inode);
1976}
1977
1978static struct dentry *f2fs_fh_to_parent(struct super_block *sb, struct fid *fid,
1979                int fh_len, int fh_type)
1980{
1981        return generic_fh_to_parent(sb, fid, fh_len, fh_type,
1982                                    f2fs_nfs_get_inode);
1983}
1984
1985static const struct export_operations f2fs_export_ops = {
1986        .fh_to_dentry = f2fs_fh_to_dentry,
1987        .fh_to_parent = f2fs_fh_to_parent,
1988        .get_parent = f2fs_get_parent,
1989};
1990
1991static loff_t max_file_blocks(void)
1992{
1993        loff_t result = 0;
1994        loff_t leaf_count = ADDRS_PER_BLOCK;
1995
1996        /*
1997         * note: previously, result is equal to (DEF_ADDRS_PER_INODE -
1998         * DEFAULT_INLINE_XATTR_ADDRS), but now f2fs try to reserve more
1999         * space in inode.i_addr, it will be more safe to reassign
2000         * result as zero.
2001         */
2002
2003        /* two direct node blocks */
2004        result += (leaf_count * 2);
2005
2006        /* two indirect node blocks */
2007        leaf_count *= NIDS_PER_BLOCK;
2008        result += (leaf_count * 2);
2009
2010        /* one double indirect node block */
2011        leaf_count *= NIDS_PER_BLOCK;
2012        result += leaf_count;
2013
2014        return result;
2015}
2016
2017static int __f2fs_commit_super(struct buffer_head *bh,
2018                        struct f2fs_super_block *super)
2019{
2020        lock_buffer(bh);
2021        if (super)
2022                memcpy(bh->b_data + F2FS_SUPER_OFFSET, super, sizeof(*super));
2023        set_buffer_dirty(bh);
2024        unlock_buffer(bh);
2025
2026        /* it's rare case, we can do fua all the time */
2027        return __sync_dirty_buffer(bh, REQ_SYNC | REQ_PREFLUSH | REQ_FUA);
2028}
2029
2030static inline bool sanity_check_area_boundary(struct f2fs_sb_info *sbi,
2031                                        struct buffer_head *bh)
2032{
2033        struct f2fs_super_block *raw_super = (struct f2fs_super_block *)
2034                                        (bh->b_data + F2FS_SUPER_OFFSET);
2035        struct super_block *sb = sbi->sb;
2036        u32 segment0_blkaddr = le32_to_cpu(raw_super->segment0_blkaddr);
2037        u32 cp_blkaddr = le32_to_cpu(raw_super->cp_blkaddr);
2038        u32 sit_blkaddr = le32_to_cpu(raw_super->sit_blkaddr);
2039        u32 nat_blkaddr = le32_to_cpu(raw_super->nat_blkaddr);
2040        u32 ssa_blkaddr = le32_to_cpu(raw_super->ssa_blkaddr);
2041        u32 main_blkaddr = le32_to_cpu(raw_super->main_blkaddr);
2042        u32 segment_count_ckpt = le32_to_cpu(raw_super->segment_count_ckpt);
2043        u32 segment_count_sit = le32_to_cpu(raw_super->segment_count_sit);
2044        u32 segment_count_nat = le32_to_cpu(raw_super->segment_count_nat);
2045        u32 segment_count_ssa = le32_to_cpu(raw_super->segment_count_ssa);
2046        u32 segment_count_main = le32_to_cpu(raw_super->segment_count_main);
2047        u32 segment_count = le32_to_cpu(raw_super->segment_count);
2048        u32 log_blocks_per_seg = le32_to_cpu(raw_super->log_blocks_per_seg);
2049        u64 main_end_blkaddr = main_blkaddr +
2050                                (segment_count_main << log_blocks_per_seg);
2051        u64 seg_end_blkaddr = segment0_blkaddr +
2052                                (segment_count << log_blocks_per_seg);
2053
2054        if (segment0_blkaddr != cp_blkaddr) {
2055                f2fs_msg(sb, KERN_INFO,
2056                        "Mismatch start address, segment0(%u) cp_blkaddr(%u)",
2057                        segment0_blkaddr, cp_blkaddr);
2058                return true;
2059        }
2060
2061        if (cp_blkaddr + (segment_count_ckpt << log_blocks_per_seg) !=
2062                                                        sit_blkaddr) {
2063                f2fs_msg(sb, KERN_INFO,
2064                        "Wrong CP boundary, start(%u) end(%u) blocks(%u)",
2065                        cp_blkaddr, sit_blkaddr,
2066                        segment_count_ckpt << log_blocks_per_seg);
2067                return true;
2068        }
2069
2070        if (sit_blkaddr + (segment_count_sit << log_blocks_per_seg) !=
2071                                                        nat_blkaddr) {
2072                f2fs_msg(sb, KERN_INFO,
2073                        "Wrong SIT boundary, start(%u) end(%u) blocks(%u)",
2074                        sit_blkaddr, nat_blkaddr,
2075                        segment_count_sit << log_blocks_per_seg);
2076                return true;
2077        }
2078
2079        if (nat_blkaddr + (segment_count_nat << log_blocks_per_seg) !=
2080                                                        ssa_blkaddr) {
2081                f2fs_msg(sb, KERN_INFO,
2082                        "Wrong NAT boundary, start(%u) end(%u) blocks(%u)",
2083                        nat_blkaddr, ssa_blkaddr,
2084                        segment_count_nat << log_blocks_per_seg);
2085                return true;
2086        }
2087
2088        if (ssa_blkaddr + (segment_count_ssa << log_blocks_per_seg) !=
2089                                                        main_blkaddr) {
2090                f2fs_msg(sb, KERN_INFO,
2091                        "Wrong SSA boundary, start(%u) end(%u) blocks(%u)",
2092                        ssa_blkaddr, main_blkaddr,
2093                        segment_count_ssa << log_blocks_per_seg);
2094                return true;
2095        }
2096
2097        if (main_end_blkaddr > seg_end_blkaddr) {
2098                f2fs_msg(sb, KERN_INFO,
2099                        "Wrong MAIN_AREA boundary, start(%u) end(%u) block(%u)",
2100                        main_blkaddr,
2101                        segment0_blkaddr +
2102                                (segment_count << log_blocks_per_seg),
2103                        segment_count_main << log_blocks_per_seg);
2104                return true;
2105        } else if (main_end_blkaddr < seg_end_blkaddr) {
2106                int err = 0;
2107                char *res;
2108
2109                /* fix in-memory information all the time */
2110                raw_super->segment_count = cpu_to_le32((main_end_blkaddr -
2111                                segment0_blkaddr) >> log_blocks_per_seg);
2112
2113                if (f2fs_readonly(sb) || bdev_read_only(sb->s_bdev)) {
2114                        set_sbi_flag(sbi, SBI_NEED_SB_WRITE);
2115                        res = "internally";
2116                } else {
2117                        err = __f2fs_commit_super(bh, NULL);
2118                        res = err ? "failed" : "done";
2119                }
2120                f2fs_msg(sb, KERN_INFO,
2121                        "Fix alignment : %s, start(%u) end(%u) block(%u)",
2122                        res, main_blkaddr,
2123                        segment0_blkaddr +
2124                                (segment_count << log_blocks_per_seg),
2125                        segment_count_main << log_blocks_per_seg);
2126                if (err)
2127                        return true;
2128        }
2129        return false;
2130}
2131
2132static int sanity_check_raw_super(struct f2fs_sb_info *sbi,
2133                                struct buffer_head *bh)
2134{
2135        block_t segment_count, segs_per_sec, secs_per_zone;
2136        block_t total_sections, blocks_per_seg;
2137        struct f2fs_super_block *raw_super = (struct f2fs_super_block *)
2138                                        (bh->b_data + F2FS_SUPER_OFFSET);
2139        struct super_block *sb = sbi->sb;
2140        unsigned int blocksize;
2141
2142        if (F2FS_SUPER_MAGIC != le32_to_cpu(raw_super->magic)) {
2143                f2fs_msg(sb, KERN_INFO,
2144                        "Magic Mismatch, valid(0x%x) - read(0x%x)",
2145                        F2FS_SUPER_MAGIC, le32_to_cpu(raw_super->magic));
2146                return 1;
2147        }
2148
2149        /* Currently, support only 4KB page cache size */
2150        if (F2FS_BLKSIZE != PAGE_SIZE) {
2151                f2fs_msg(sb, KERN_INFO,
2152                        "Invalid page_cache_size (%lu), supports only 4KB\n",
2153                        PAGE_SIZE);
2154                return 1;
2155        }
2156
2157        /* Currently, support only 4KB block size */
2158        blocksize = 1 << le32_to_cpu(raw_super->log_blocksize);
2159        if (blocksize != F2FS_BLKSIZE) {
2160                f2fs_msg(sb, KERN_INFO,
2161                        "Invalid blocksize (%u), supports only 4KB\n",
2162                        blocksize);
2163                return 1;
2164        }
2165
2166        /* check log blocks per segment */
2167        if (le32_to_cpu(raw_super->log_blocks_per_seg) != 9) {
2168                f2fs_msg(sb, KERN_INFO,
2169                        "Invalid log blocks per segment (%u)\n",
2170                        le32_to_cpu(raw_super->log_blocks_per_seg));
2171                return 1;
2172        }
2173
2174        /* Currently, support 512/1024/2048/4096 bytes sector size */
2175        if (le32_to_cpu(raw_super->log_sectorsize) >
2176                                F2FS_MAX_LOG_SECTOR_SIZE ||
2177                le32_to_cpu(raw_super->log_sectorsize) <
2178                                F2FS_MIN_LOG_SECTOR_SIZE) {
2179                f2fs_msg(sb, KERN_INFO, "Invalid log sectorsize (%u)",
2180                        le32_to_cpu(raw_super->log_sectorsize));
2181                return 1;
2182        }
2183        if (le32_to_cpu(raw_super->log_sectors_per_block) +
2184                le32_to_cpu(raw_super->log_sectorsize) !=
2185                        F2FS_MAX_LOG_SECTOR_SIZE) {
2186                f2fs_msg(sb, KERN_INFO,
2187                        "Invalid log sectors per block(%u) log sectorsize(%u)",
2188                        le32_to_cpu(raw_super->log_sectors_per_block),
2189                        le32_to_cpu(raw_super->log_sectorsize));
2190                return 1;
2191        }
2192
2193        segment_count = le32_to_cpu(raw_super->segment_count);
2194        segs_per_sec = le32_to_cpu(raw_super->segs_per_sec);
2195        secs_per_zone = le32_to_cpu(raw_super->secs_per_zone);
2196        total_sections = le32_to_cpu(raw_super->section_count);
2197
2198        /* blocks_per_seg should be 512, given the above check */
2199        blocks_per_seg = 1 << le32_to_cpu(raw_super->log_blocks_per_seg);
2200
2201        if (segment_count > F2FS_MAX_SEGMENT ||
2202                                segment_count < F2FS_MIN_SEGMENTS) {
2203                f2fs_msg(sb, KERN_INFO,
2204                        "Invalid segment count (%u)",
2205                        segment_count);
2206                return 1;
2207        }
2208
2209        if (total_sections > segment_count ||
2210                        total_sections < F2FS_MIN_SEGMENTS ||
2211                        segs_per_sec > segment_count || !segs_per_sec) {
2212                f2fs_msg(sb, KERN_INFO,
2213                        "Invalid segment/section count (%u, %u x %u)",
2214                        segment_count, total_sections, segs_per_sec);
2215                return 1;
2216        }
2217
2218        if ((segment_count / segs_per_sec) < total_sections) {
2219                f2fs_msg(sb, KERN_INFO,
2220                        "Small segment_count (%u < %u * %u)",
2221                        segment_count, segs_per_sec, total_sections);
2222                return 1;
2223        }
2224
2225        if (segment_count > (le32_to_cpu(raw_super->block_count) >> 9)) {
2226                f2fs_msg(sb, KERN_INFO,
2227                        "Wrong segment_count / block_count (%u > %u)",
2228                        segment_count, le32_to_cpu(raw_super->block_count));
2229                return 1;
2230        }
2231
2232        if (secs_per_zone > total_sections) {
2233                f2fs_msg(sb, KERN_INFO,
2234                        "Wrong secs_per_zone (%u > %u)",
2235                        secs_per_zone, total_sections);
2236                return 1;
2237        }
2238        if (le32_to_cpu(raw_super->extension_count) > F2FS_MAX_EXTENSION ||
2239                        raw_super->hot_ext_count > F2FS_MAX_EXTENSION ||
2240                        (le32_to_cpu(raw_super->extension_count) +
2241                        raw_super->hot_ext_count) > F2FS_MAX_EXTENSION) {
2242                f2fs_msg(sb, KERN_INFO,
2243                        "Corrupted extension count (%u + %u > %u)",
2244                        le32_to_cpu(raw_super->extension_count),
2245                        raw_super->hot_ext_count,
2246                        F2FS_MAX_EXTENSION);
2247                return 1;
2248        }
2249
2250        if (le32_to_cpu(raw_super->cp_payload) >
2251                                (blocks_per_seg - F2FS_CP_PACKS)) {
2252                f2fs_msg(sb, KERN_INFO,
2253                        "Insane cp_payload (%u > %u)",
2254                        le32_to_cpu(raw_super->cp_payload),
2255                        blocks_per_seg - F2FS_CP_PACKS);
2256                return 1;
2257        }
2258
2259        /* check reserved ino info */
2260        if (le32_to_cpu(raw_super->node_ino) != 1 ||
2261                le32_to_cpu(raw_super->meta_ino) != 2 ||
2262                le32_to_cpu(raw_super->root_ino) != 3) {
2263                f2fs_msg(sb, KERN_INFO,
2264                        "Invalid Fs Meta Ino: node(%u) meta(%u) root(%u)",
2265                        le32_to_cpu(raw_super->node_ino),
2266                        le32_to_cpu(raw_super->meta_ino),
2267                        le32_to_cpu(raw_super->root_ino));
2268                return 1;
2269        }
2270
2271        /* check CP/SIT/NAT/SSA/MAIN_AREA area boundary */
2272        if (sanity_check_area_boundary(sbi, bh))
2273                return 1;
2274
2275        return 0;
2276}
2277
2278int f2fs_sanity_check_ckpt(struct f2fs_sb_info *sbi)
2279{
2280        unsigned int total, fsmeta;
2281        struct f2fs_super_block *raw_super = F2FS_RAW_SUPER(sbi);
2282        struct f2fs_checkpoint *ckpt = F2FS_CKPT(sbi);
2283        unsigned int ovp_segments, reserved_segments;
2284        unsigned int main_segs, blocks_per_seg;
2285        int i;
2286
2287        total = le32_to_cpu(raw_super->segment_count);
2288        fsmeta = le32_to_cpu(raw_super->segment_count_ckpt);
2289        fsmeta += le32_to_cpu(raw_super->segment_count_sit);
2290        fsmeta += le32_to_cpu(raw_super->segment_count_nat);
2291        fsmeta += le32_to_cpu(ckpt->rsvd_segment_count);
2292        fsmeta += le32_to_cpu(raw_super->segment_count_ssa);
2293
2294        if (unlikely(fsmeta >= total))
2295                return 1;
2296
2297        ovp_segments = le32_to_cpu(ckpt->overprov_segment_count);
2298        reserved_segments = le32_to_cpu(ckpt->rsvd_segment_count);
2299
2300        if (unlikely(fsmeta < F2FS_MIN_SEGMENTS ||
2301                        ovp_segments == 0 || reserved_segments == 0)) {
2302                f2fs_msg(sbi->sb, KERN_ERR,
2303                        "Wrong layout: check mkfs.f2fs version");
2304                return 1;
2305        }
2306
2307        main_segs = le32_to_cpu(raw_super->segment_count_main);
2308        blocks_per_seg = sbi->blocks_per_seg;
2309
2310        for (i = 0; i < NR_CURSEG_NODE_TYPE; i++) {
2311                if (le32_to_cpu(ckpt->cur_node_segno[i]) >= main_segs ||
2312                        le16_to_cpu(ckpt->cur_node_blkoff[i]) >= blocks_per_seg)
2313                        return 1;
2314        }
2315        for (i = 0; i < NR_CURSEG_DATA_TYPE; i++) {
2316                if (le32_to_cpu(ckpt->cur_data_segno[i]) >= main_segs ||
2317                        le16_to_cpu(ckpt->cur_data_blkoff[i]) >= blocks_per_seg)
2318                        return 1;
2319        }
2320
2321        if (unlikely(f2fs_cp_error(sbi))) {
2322                f2fs_msg(sbi->sb, KERN_ERR, "A bug case: need to run fsck");
2323                return 1;
2324        }
2325        return 0;
2326}
2327
2328static void init_sb_info(struct f2fs_sb_info *sbi)
2329{
2330        struct f2fs_super_block *raw_super = sbi->raw_super;
2331        int i, j;
2332
2333        sbi->log_sectors_per_block =
2334                le32_to_cpu(raw_super->log_sectors_per_block);
2335        sbi->log_blocksize = le32_to_cpu(raw_super->log_blocksize);
2336        sbi->blocksize = 1 << sbi->log_blocksize;
2337        sbi->log_blocks_per_seg = le32_to_cpu(raw_super->log_blocks_per_seg);
2338        sbi->blocks_per_seg = 1 << sbi->log_blocks_per_seg;
2339        sbi->segs_per_sec = le32_to_cpu(raw_super->segs_per_sec);
2340        sbi->secs_per_zone = le32_to_cpu(raw_super->secs_per_zone);
2341        sbi->total_sections = le32_to_cpu(raw_super->section_count);
2342        sbi->total_node_count =
2343                (le32_to_cpu(raw_super->segment_count_nat) / 2)
2344                        * sbi->blocks_per_seg * NAT_ENTRY_PER_BLOCK;
2345        sbi->root_ino_num = le32_to_cpu(raw_super->root_ino);
2346        sbi->node_ino_num = le32_to_cpu(raw_super->node_ino);
2347        sbi->meta_ino_num = le32_to_cpu(raw_super->meta_ino);
2348        sbi->cur_victim_sec = NULL_SECNO;
2349        sbi->max_victim_search = DEF_MAX_VICTIM_SEARCH;
2350
2351        sbi->dir_level = DEF_DIR_LEVEL;
2352        sbi->interval_time[CP_TIME] = DEF_CP_INTERVAL;
2353        sbi->interval_time[REQ_TIME] = DEF_IDLE_INTERVAL;
2354        clear_sbi_flag(sbi, SBI_NEED_FSCK);
2355
2356        for (i = 0; i < NR_COUNT_TYPE; i++)
2357                atomic_set(&sbi->nr_pages[i], 0);
2358
2359        for (i = 0; i < META; i++)
2360                atomic_set(&sbi->wb_sync_req[i], 0);
2361
2362        INIT_LIST_HEAD(&sbi->s_list);
2363        mutex_init(&sbi->umount_mutex);
2364        for (i = 0; i < NR_PAGE_TYPE - 1; i++)
2365                for (j = HOT; j < NR_TEMP_TYPE; j++)
2366                        mutex_init(&sbi->wio_mutex[i][j]);
2367        init_rwsem(&sbi->io_order_lock);
2368        spin_lock_init(&sbi->cp_lock);
2369
2370        sbi->dirty_device = 0;
2371        spin_lock_init(&sbi->dev_lock);
2372
2373        init_rwsem(&sbi->sb_lock);
2374}
2375
2376static int init_percpu_info(struct f2fs_sb_info *sbi)
2377{
2378        int err;
2379
2380        err = percpu_counter_init(&sbi->alloc_valid_block_count, 0, GFP_KERNEL);
2381        if (err)
2382                return err;
2383
2384        return percpu_counter_init(&sbi->total_valid_inode_count, 0,
2385                                                                GFP_KERNEL);
2386}
2387
2388#ifdef CONFIG_BLK_DEV_ZONED
2389static int f2fs_report_zone_cb(struct blk_zone *zone, unsigned int idx,
2390                               void *data)
2391{
2392        struct f2fs_dev_info *dev = data;
2393
2394        if (zone->type != BLK_ZONE_TYPE_CONVENTIONAL)
2395                set_bit(idx, dev->blkz_seq);
2396        return 0;
2397}
2398
2399static int init_blkz_info(struct f2fs_sb_info *sbi, int devi)
2400{
2401        struct block_device *bdev = FDEV(devi).bdev;
2402        sector_t nr_sectors = bdev->bd_part->nr_sects;
2403        int ret;
2404
2405        if (!f2fs_sb_has_blkzoned(sbi->sb))
2406                return 0;
2407
2408        if (sbi->blocks_per_blkz && sbi->blocks_per_blkz !=
2409                                SECTOR_TO_BLOCK(bdev_zone_sectors(bdev)))
2410                return -EINVAL;
2411        sbi->blocks_per_blkz = SECTOR_TO_BLOCK(bdev_zone_sectors(bdev));
2412        if (sbi->log_blocks_per_blkz && sbi->log_blocks_per_blkz !=
2413                                __ilog2_u32(sbi->blocks_per_blkz))
2414                return -EINVAL;
2415        sbi->log_blocks_per_blkz = __ilog2_u32(sbi->blocks_per_blkz);
2416        FDEV(devi).nr_blkz = SECTOR_TO_BLOCK(nr_sectors) >>
2417                                        sbi->log_blocks_per_blkz;
2418        if (nr_sectors & (bdev_zone_sectors(bdev) - 1))
2419                FDEV(devi).nr_blkz++;
2420
2421        FDEV(devi).blkz_type = f2fs_kmalloc(sbi, FDEV(devi).nr_blkz,
2422                                                                GFP_KERNEL);
2423        if (!FDEV(devi).blkz_type)
2424                return -ENOMEM;
2425
2426#define F2FS_REPORT_NR_ZONES   4096
2427
2428        zones = f2fs_kzalloc(sbi,
2429                             array_size(F2FS_REPORT_NR_ZONES,
2430                                        sizeof(struct blk_zone)),
2431                             GFP_KERNEL);
2432        if (!zones)
2433                return -ENOMEM;
2434
2435        /* Get block zones type */
2436        while (zones && sector < nr_sectors) {
2437
2438                nr_zones = F2FS_REPORT_NR_ZONES;
2439                err = blkdev_report_zones(bdev, sector, zones, &nr_zones);
2440                if (err)
2441                        break;
2442                if (!nr_zones) {
2443                        err = -EIO;
2444                        break;
2445                }
2446
2447                for (i = 0; i < nr_zones; i++) {
2448                        FDEV(devi).blkz_type[n] = zones[i].type;
2449                        sector += zones[i].len;
2450                        n++;
2451                }
2452        }
2453
2454        kfree(zones);
2455
2456        return err;
2457}
2458#endif
2459
2460/*
2461 * Read f2fs raw super block.
2462 * Because we have two copies of super block, so read both of them
2463 * to get the first valid one. If any one of them is broken, we pass
2464 * them recovery flag back to the caller.
2465 */
2466static int read_raw_super_block(struct f2fs_sb_info *sbi,
2467                        struct f2fs_super_block **raw_super,
2468                        int *valid_super_block, int *recovery)
2469{
2470        struct super_block *sb = sbi->sb;
2471        int block;
2472        struct buffer_head *bh;
2473        struct f2fs_super_block *super;
2474        int err = 0;
2475
2476        super = kzalloc(sizeof(struct f2fs_super_block), GFP_KERNEL);
2477        if (!super)
2478                return -ENOMEM;
2479
2480        for (block = 0; block < 2; block++) {
2481                bh = sb_bread(sb, block);
2482                if (!bh) {
2483                        f2fs_msg(sb, KERN_ERR, "Unable to read %dth superblock",
2484                                block + 1);
2485                        err = -EIO;
2486                        continue;
2487                }
2488
2489                /* sanity checking of raw super */
2490                if (sanity_check_raw_super(sbi, bh)) {
2491                        f2fs_msg(sb, KERN_ERR,
2492                                "Can't find valid F2FS filesystem in %dth superblock",
2493                                block + 1);
2494                        err = -EINVAL;
2495                        brelse(bh);
2496                        continue;
2497                }
2498
2499                if (!*raw_super) {
2500                        memcpy(super, bh->b_data + F2FS_SUPER_OFFSET,
2501                                                        sizeof(*super));
2502                        *valid_super_block = block;
2503                        *raw_super = super;
2504                }
2505                brelse(bh);
2506        }
2507
2508        /* Fail to read any one of the superblocks*/
2509        if (err < 0)
2510                *recovery = 1;
2511
2512        /* No valid superblock */
2513        if (!*raw_super)
2514                kfree(super);
2515        else
2516                err = 0;
2517
2518        return err;
2519}
2520
2521int f2fs_commit_super(struct f2fs_sb_info *sbi, bool recover)
2522{
2523        struct buffer_head *bh;
2524        int err;
2525
2526        if ((recover && f2fs_readonly(sbi->sb)) ||
2527                                bdev_read_only(sbi->sb->s_bdev)) {
2528                set_sbi_flag(sbi, SBI_NEED_SB_WRITE);
2529                return -EROFS;
2530        }
2531
2532        /* write back-up superblock first */
2533        bh = sb_bread(sbi->sb, sbi->valid_super_block ? 0 : 1);
2534        if (!bh)
2535                return -EIO;
2536        err = __f2fs_commit_super(bh, F2FS_RAW_SUPER(sbi));
2537        brelse(bh);
2538
2539        /* if we are in recovery path, skip writing valid superblock */
2540        if (recover || err)
2541                return err;
2542
2543        /* write current valid superblock */
2544        bh = sb_bread(sbi->sb, sbi->valid_super_block);
2545        if (!bh)
2546                return -EIO;
2547        err = __f2fs_commit_super(bh, F2FS_RAW_SUPER(sbi));
2548        brelse(bh);
2549        return err;
2550}
2551
2552static int f2fs_scan_devices(struct f2fs_sb_info *sbi)
2553{
2554        struct f2fs_super_block *raw_super = F2FS_RAW_SUPER(sbi);
2555        unsigned int max_devices = MAX_DEVICES;
2556        int i;
2557
2558        /* Initialize single device information */
2559        if (!RDEV(0).path[0]) {
2560                if (!bdev_is_zoned(sbi->sb->s_bdev))
2561                        return 0;
2562                max_devices = 1;
2563        }
2564
2565        /*
2566         * Initialize multiple devices information, or single
2567         * zoned block device information.
2568         */
2569        sbi->devs = f2fs_kzalloc(sbi,
2570                                 array_size(max_devices,
2571                                            sizeof(struct f2fs_dev_info)),
2572                                 GFP_KERNEL);
2573        if (!sbi->devs)
2574                return -ENOMEM;
2575
2576        for (i = 0; i < max_devices; i++) {
2577
2578                if (i > 0 && !RDEV(i).path[0])
2579                        break;
2580
2581                if (max_devices == 1) {
2582                        /* Single zoned block device mount */
2583                        FDEV(0).bdev =
2584                                blkdev_get_by_dev(sbi->sb->s_bdev->bd_dev,
2585                                        sbi->sb->s_mode, sbi->sb->s_type);
2586                } else {
2587                        /* Multi-device mount */
2588                        memcpy(FDEV(i).path, RDEV(i).path, MAX_PATH_LEN);
2589                        FDEV(i).total_segments =
2590                                le32_to_cpu(RDEV(i).total_segments);
2591                        if (i == 0) {
2592                                FDEV(i).start_blk = 0;
2593                                FDEV(i).end_blk = FDEV(i).start_blk +
2594                                    (FDEV(i).total_segments <<
2595                                    sbi->log_blocks_per_seg) - 1 +
2596                                    le32_to_cpu(raw_super->segment0_blkaddr);
2597                        } else {
2598                                FDEV(i).start_blk = FDEV(i - 1).end_blk + 1;
2599                                FDEV(i).end_blk = FDEV(i).start_blk +
2600                                        (FDEV(i).total_segments <<
2601                                        sbi->log_blocks_per_seg) - 1;
2602                        }
2603                        FDEV(i).bdev = blkdev_get_by_path(FDEV(i).path,
2604                                        sbi->sb->s_mode, sbi->sb->s_type);
2605                }
2606                if (IS_ERR(FDEV(i).bdev))
2607                        return PTR_ERR(FDEV(i).bdev);
2608
2609                /* to release errored devices */
2610                sbi->s_ndevs = i + 1;
2611
2612#ifdef CONFIG_BLK_DEV_ZONED
2613                if (bdev_zoned_model(FDEV(i).bdev) == BLK_ZONED_HM &&
2614                                !f2fs_sb_has_blkzoned(sbi->sb)) {
2615                        f2fs_msg(sbi->sb, KERN_ERR,
2616                                "Zoned block device feature not enabled\n");
2617                        return -EINVAL;
2618                }
2619                if (bdev_zoned_model(FDEV(i).bdev) != BLK_ZONED_NONE) {
2620                        if (init_blkz_info(sbi, i)) {
2621                                f2fs_msg(sbi->sb, KERN_ERR,
2622                                        "Failed to initialize F2FS blkzone information");
2623                                return -EINVAL;
2624                        }
2625                        if (max_devices == 1)
2626                                break;
2627                        f2fs_msg(sbi->sb, KERN_INFO,
2628                                "Mount Device [%2d]: %20s, %8u, %8x - %8x (zone: %s)",
2629                                i, FDEV(i).path,
2630                                FDEV(i).total_segments,
2631                                FDEV(i).start_blk, FDEV(i).end_blk,
2632                                bdev_zoned_model(FDEV(i).bdev) == BLK_ZONED_HA ?
2633                                "Host-aware" : "Host-managed");
2634                        continue;
2635                }
2636#endif
2637                f2fs_msg(sbi->sb, KERN_INFO,
2638                        "Mount Device [%2d]: %20s, %8u, %8x - %8x",
2639                                i, FDEV(i).path,
2640                                FDEV(i).total_segments,
2641                                FDEV(i).start_blk, FDEV(i).end_blk);
2642        }
2643        f2fs_msg(sbi->sb, KERN_INFO,
2644                        "IO Block Size: %8d KB", F2FS_IO_SIZE_KB(sbi));
2645        return 0;
2646}
2647
2648static void f2fs_tuning_parameters(struct f2fs_sb_info *sbi)
2649{
2650        struct f2fs_sm_info *sm_i = SM_I(sbi);
2651
2652        /* adjust parameters according to the volume size */
2653        if (sm_i->main_segments <= SMALL_VOLUME_SEGMENTS) {
2654                F2FS_OPTION(sbi).alloc_mode = ALLOC_MODE_REUSE;
2655                sm_i->dcc_info->discard_granularity = 1;
2656                sm_i->ipu_policy = 1 << F2FS_IPU_FORCE;
2657        }
2658}
2659
2660static int f2fs_fill_super(struct super_block *sb, void *data, int silent)
2661{
2662        struct f2fs_sb_info *sbi;
2663        struct f2fs_super_block *raw_super;
2664        struct inode *root;
2665        int err;
2666        bool retry = true, need_fsck = false;
2667        char *options = NULL;
2668        int recovery, i, valid_super_block;
2669        struct curseg_info *seg_i;
2670
2671try_onemore:
2672        err = -EINVAL;
2673        raw_super = NULL;
2674        valid_super_block = -1;
2675        recovery = 0;
2676
2677        /* allocate memory for f2fs-specific super block info */
2678        sbi = kzalloc(sizeof(struct f2fs_sb_info), GFP_KERNEL);
2679        if (!sbi)
2680                return -ENOMEM;
2681
2682        sbi->sb = sb;
2683
2684        /* Load the checksum driver */
2685        sbi->s_chksum_driver = crypto_alloc_shash("crc32", 0, 0);
2686        if (IS_ERR(sbi->s_chksum_driver)) {
2687                f2fs_msg(sb, KERN_ERR, "Cannot load crc32 driver.");
2688                err = PTR_ERR(sbi->s_chksum_driver);
2689                sbi->s_chksum_driver = NULL;
2690                goto free_sbi;
2691        }
2692
2693        /* set a block size */
2694        if (unlikely(!sb_set_blocksize(sb, F2FS_BLKSIZE))) {
2695                f2fs_msg(sb, KERN_ERR, "unable to set blocksize");
2696                goto free_sbi;
2697        }
2698
2699        err = read_raw_super_block(sbi, &raw_super, &valid_super_block,
2700                                                                &recovery);
2701        if (err)
2702                goto free_sbi;
2703
2704        sb->s_fs_info = sbi;
2705        sbi->raw_super = raw_super;
2706
2707        F2FS_OPTION(sbi).s_resuid = make_kuid(&init_user_ns, F2FS_DEF_RESUID);
2708        F2FS_OPTION(sbi).s_resgid = make_kgid(&init_user_ns, F2FS_DEF_RESGID);
2709
2710        /* precompute checksum seed for metadata */
2711        if (f2fs_sb_has_inode_chksum(sb))
2712                sbi->s_chksum_seed = f2fs_chksum(sbi, ~0, raw_super->uuid,
2713                                                sizeof(raw_super->uuid));
2714
2715        /*
2716         * The BLKZONED feature indicates that the drive was formatted with
2717         * zone alignment optimization. This is optional for host-aware
2718         * devices, but mandatory for host-managed zoned block devices.
2719         */
2720#ifndef CONFIG_BLK_DEV_ZONED
2721        if (f2fs_sb_has_blkzoned(sb)) {
2722                f2fs_msg(sb, KERN_ERR,
2723                         "Zoned block device support is not enabled\n");
2724                err = -EOPNOTSUPP;
2725                goto free_sb_buf;
2726        }
2727#endif
2728        default_options(sbi);
2729        /* parse mount options */
2730        options = kstrdup((const char *)data, GFP_KERNEL);
2731        if (data && !options) {
2732                err = -ENOMEM;
2733                goto free_sb_buf;
2734        }
2735
2736        err = parse_options(sb, options);
2737        if (err)
2738                goto free_options;
2739
2740        sbi->max_file_blocks = max_file_blocks();
2741        sb->s_maxbytes = sbi->max_file_blocks <<
2742                                le32_to_cpu(raw_super->log_blocksize);
2743        sb->s_max_links = F2FS_LINK_MAX;
2744        get_random_bytes(&sbi->s_next_generation, sizeof(u32));
2745
2746#ifdef CONFIG_QUOTA
2747        sb->dq_op = &f2fs_quota_operations;
2748        if (f2fs_sb_has_quota_ino(sb))
2749                sb->s_qcop = &dquot_quotactl_sysfile_ops;
2750        else
2751                sb->s_qcop = &f2fs_quotactl_ops;
2752        sb->s_quota_types = QTYPE_MASK_USR | QTYPE_MASK_GRP | QTYPE_MASK_PRJ;
2753
2754        if (f2fs_sb_has_quota_ino(sbi->sb)) {
2755                for (i = 0; i < MAXQUOTAS; i++) {
2756                        if (f2fs_qf_ino(sbi->sb, i))
2757                                sbi->nquota_files++;
2758                }
2759        }
2760#endif
2761
2762        sb->s_op = &f2fs_sops;
2763#ifdef CONFIG_F2FS_FS_ENCRYPTION
2764        sb->s_cop = &f2fs_cryptops;
2765#endif
2766        sb->s_xattr = f2fs_xattr_handlers;
2767        sb->s_export_op = &f2fs_export_ops;
2768        sb->s_magic = F2FS_SUPER_MAGIC;
2769        sb->s_time_gran = 1;
2770        sb->s_flags = (sb->s_flags & ~SB_POSIXACL) |
2771                (test_opt(sbi, POSIX_ACL) ? SB_POSIXACL : 0);
2772        memcpy(&sb->s_uuid, raw_super->uuid, sizeof(raw_super->uuid));
2773        sb->s_iflags |= SB_I_CGROUPWB;
2774
2775        /* init f2fs-specific super block info */
2776        sbi->valid_super_block = valid_super_block;
2777        mutex_init(&sbi->gc_mutex);
2778        mutex_init(&sbi->cp_mutex);
2779        init_rwsem(&sbi->node_write);
2780        init_rwsem(&sbi->node_change);
2781
2782        /* disallow all the data/node/meta page writes */
2783        set_sbi_flag(sbi, SBI_POR_DOING);
2784        spin_lock_init(&sbi->stat_lock);
2785
2786        /* init iostat info */
2787        spin_lock_init(&sbi->iostat_lock);
2788        sbi->iostat_enable = false;
2789
2790        for (i = 0; i < NR_PAGE_TYPE; i++) {
2791                int n = (i == META) ? 1: NR_TEMP_TYPE;
2792                int j;
2793
2794                sbi->write_io[i] =
2795                        f2fs_kmalloc(sbi,
2796                                     array_size(n,
2797                                                sizeof(struct f2fs_bio_info)),
2798                                     GFP_KERNEL);
2799                if (!sbi->write_io[i]) {
2800                        err = -ENOMEM;
2801                        goto free_options;
2802                }
2803
2804                for (j = HOT; j < n; j++) {
2805                        init_rwsem(&sbi->write_io[i][j].io_rwsem);
2806                        sbi->write_io[i][j].sbi = sbi;
2807                        sbi->write_io[i][j].bio = NULL;
2808                        spin_lock_init(&sbi->write_io[i][j].io_lock);
2809                        INIT_LIST_HEAD(&sbi->write_io[i][j].io_list);
2810                }
2811        }
2812
2813        init_rwsem(&sbi->cp_rwsem);
2814        init_waitqueue_head(&sbi->cp_wait);
2815        init_sb_info(sbi);
2816
2817        err = init_percpu_info(sbi);
2818        if (err)
2819                goto free_bio_info;
2820
2821        if (F2FS_IO_SIZE(sbi) > 1) {
2822                sbi->write_io_dummy =
2823                        mempool_create_page_pool(2 * (F2FS_IO_SIZE(sbi) - 1), 0);
2824                if (!sbi->write_io_dummy) {
2825                        err = -ENOMEM;
2826                        goto free_percpu;
2827                }
2828        }
2829
2830        /* get an inode for meta space */
2831        sbi->meta_inode = f2fs_iget(sb, F2FS_META_INO(sbi));
2832        if (IS_ERR(sbi->meta_inode)) {
2833                f2fs_msg(sb, KERN_ERR, "Failed to read F2FS meta data inode");
2834                err = PTR_ERR(sbi->meta_inode);
2835                goto free_io_dummy;
2836        }
2837
2838        err = f2fs_get_valid_checkpoint(sbi);
2839        if (err) {
2840                f2fs_msg(sb, KERN_ERR, "Failed to get valid F2FS checkpoint");
2841                goto free_meta_inode;
2842        }
2843
2844        /* Initialize device list */
2845        err = f2fs_scan_devices(sbi);
2846        if (err) {
2847                f2fs_msg(sb, KERN_ERR, "Failed to find devices");
2848                goto free_devices;
2849        }
2850
2851        sbi->total_valid_node_count =
2852                                le32_to_cpu(sbi->ckpt->valid_node_count);
2853        percpu_counter_set(&sbi->total_valid_inode_count,
2854                                le32_to_cpu(sbi->ckpt->valid_inode_count));
2855        sbi->user_block_count = le64_to_cpu(sbi->ckpt->user_block_count);
2856        sbi->total_valid_block_count =
2857                                le64_to_cpu(sbi->ckpt->valid_block_count);
2858        sbi->last_valid_block_count = sbi->total_valid_block_count;
2859        sbi->reserved_blocks = 0;
2860        sbi->current_reserved_blocks = 0;
2861        limit_reserve_root(sbi);
2862
2863        for (i = 0; i < NR_INODE_TYPE; i++) {
2864                INIT_LIST_HEAD(&sbi->inode_list[i]);
2865                spin_lock_init(&sbi->inode_lock[i]);
2866        }
2867
2868        f2fs_init_extent_cache_info(sbi);
2869
2870        f2fs_init_ino_entry_info(sbi);
2871
2872        /* setup f2fs internal modules */
2873        err = f2fs_build_segment_manager(sbi);
2874        if (err) {
2875                f2fs_msg(sb, KERN_ERR,
2876                        "Failed to initialize F2FS segment manager");
2877                goto free_sm;
2878        }
2879        err = f2fs_build_node_manager(sbi);
2880        if (err) {
2881                f2fs_msg(sb, KERN_ERR,
2882                        "Failed to initialize F2FS node manager");
2883                goto free_nm;
2884        }
2885
2886        /* For write statistics */
2887        if (sb->s_bdev->bd_part)
2888                sbi->sectors_written_start =
2889                        (u64)part_stat_read(sb->s_bdev->bd_part,
2890                                            sectors[STAT_WRITE]);
2891
2892        /* Read accumulated write IO statistics if exists */
2893        seg_i = CURSEG_I(sbi, CURSEG_HOT_NODE);
2894        if (__exist_node_summaries(sbi))
2895                sbi->kbytes_written =
2896                        le64_to_cpu(seg_i->journal->info.kbytes_written);
2897
2898        f2fs_build_gc_manager(sbi);
2899
2900        /* get an inode for node space */
2901        sbi->node_inode = f2fs_iget(sb, F2FS_NODE_INO(sbi));
2902        if (IS_ERR(sbi->node_inode)) {
2903                f2fs_msg(sb, KERN_ERR, "Failed to read node inode");
2904                err = PTR_ERR(sbi->node_inode);
2905                goto free_nm;
2906        }
2907
2908        err = f2fs_build_stats(sbi);
2909        if (err)
2910                goto free_node_inode;
2911
2912        /* read root inode and dentry */
2913        root = f2fs_iget(sb, F2FS_ROOT_INO(sbi));
2914        if (IS_ERR(root)) {
2915                f2fs_msg(sb, KERN_ERR, "Failed to read root inode");
2916                err = PTR_ERR(root);
2917                goto free_stats;
2918        }
2919        if (!S_ISDIR(root->i_mode) || !root->i_blocks || !root->i_size) {
2920                iput(root);
2921                err = -EINVAL;
2922                goto free_node_inode;
2923        }
2924
2925        sb->s_root = d_make_root(root); /* allocate root dentry */
2926        if (!sb->s_root) {
2927                err = -ENOMEM;
2928                goto free_root_inode;
2929        }
2930
2931        err = f2fs_register_sysfs(sbi);
2932        if (err)
2933                goto free_root_inode;
2934
2935#ifdef CONFIG_QUOTA
2936        /*
2937         * Turn on quotas which were not enabled for read-only mounts if
2938         * filesystem has quota feature, so that they are updated correctly.
2939         */
2940        if (f2fs_sb_has_quota_ino(sb) && !f2fs_readonly(sb)) {
2941                err = f2fs_enable_quotas(sb);
2942                if (err) {
2943                        f2fs_msg(sb, KERN_ERR,
2944                                "Cannot turn on quotas: error %d", err);
2945                        goto free_sysfs;
2946                }
2947        }
2948#endif
2949        /* if there are nt orphan nodes free them */
2950        err = f2fs_recover_orphan_inodes(sbi);
2951        if (err)
2952                goto free_meta;
2953
2954        /* recover fsynced data */
2955        if (!test_opt(sbi, DISABLE_ROLL_FORWARD)) {
2956                /*
2957                 * mount should be failed, when device has readonly mode, and
2958                 * previous checkpoint was not done by clean system shutdown.
2959                 */
2960                if (bdev_read_only(sb->s_bdev) &&
2961                                !is_set_ckpt_flags(sbi, CP_UMOUNT_FLAG)) {
2962                        err = -EROFS;
2963                        goto free_meta;
2964                }
2965
2966                if (need_fsck)
2967                        set_sbi_flag(sbi, SBI_NEED_FSCK);
2968
2969                if (!retry)
2970                        goto skip_recovery;
2971
2972                err = f2fs_recover_fsync_data(sbi, false);
2973                if (err < 0) {
2974                        need_fsck = true;
2975                        f2fs_msg(sb, KERN_ERR,
2976                                "Cannot recover all fsync data errno=%d", err);
2977                        goto free_meta;
2978                }
2979        } else {
2980                err = f2fs_recover_fsync_data(sbi, true);
2981
2982                if (!f2fs_readonly(sb) && err > 0) {
2983                        err = -EINVAL;
2984                        f2fs_msg(sb, KERN_ERR,
2985                                "Need to recover fsync data");
2986                        goto free_meta;
2987                }
2988        }
2989skip_recovery:
2990        /* f2fs_recover_fsync_data() cleared this already */
2991        clear_sbi_flag(sbi, SBI_POR_DOING);
2992
2993        /*
2994         * If filesystem is not mounted as read-only then
2995         * do start the gc_thread.
2996         */
2997        if (test_opt(sbi, BG_GC) && !f2fs_readonly(sb)) {
2998                /* After POR, we can run background GC thread.*/
2999                err = f2fs_start_gc_thread(sbi);
3000                if (err)
3001                        goto free_meta;
3002        }
3003        kfree(options);
3004
3005        /* recover broken superblock */
3006        if (recovery) {
3007                err = f2fs_commit_super(sbi, true);
3008                f2fs_msg(sb, KERN_INFO,
3009                        "Try to recover %dth superblock, ret: %d",
3010                        sbi->valid_super_block ? 1 : 2, err);
3011        }
3012
3013        f2fs_join_shrinker(sbi);
3014
3015        f2fs_tuning_parameters(sbi);
3016
3017        f2fs_msg(sbi->sb, KERN_NOTICE, "Mounted with checkpoint version = %llx",
3018                                cur_cp_version(F2FS_CKPT(sbi)));
3019        f2fs_update_time(sbi, CP_TIME);
3020        f2fs_update_time(sbi, REQ_TIME);
3021        return 0;
3022
3023free_meta:
3024#ifdef CONFIG_QUOTA
3025        if (f2fs_sb_has_quota_ino(sb) && !f2fs_readonly(sb))
3026                f2fs_quota_off_umount(sbi->sb);
3027#endif
3028        f2fs_sync_inode_meta(sbi);
3029        /*
3030         * Some dirty meta pages can be produced by f2fs_recover_orphan_inodes()
3031         * failed by EIO. Then, iput(node_inode) can trigger balance_fs_bg()
3032         * followed by f2fs_write_checkpoint() through f2fs_write_node_pages(), which
3033         * falls into an infinite loop in f2fs_sync_meta_pages().
3034         */
3035        truncate_inode_pages_final(META_MAPPING(sbi));
3036#ifdef CONFIG_QUOTA
3037free_sysfs:
3038#endif
3039        f2fs_unregister_sysfs(sbi);
3040free_root_inode:
3041        dput(sb->s_root);
3042        sb->s_root = NULL;
3043free_stats:
3044        f2fs_destroy_stats(sbi);
3045free_node_inode:
3046        f2fs_release_ino_entry(sbi, true);
3047        truncate_inode_pages_final(NODE_MAPPING(sbi));
3048        iput(sbi->node_inode);
3049free_nm:
3050        f2fs_destroy_node_manager(sbi);
3051free_sm:
3052        f2fs_destroy_segment_manager(sbi);
3053free_devices:
3054        destroy_device_list(sbi);
3055        kfree(sbi->ckpt);
3056free_meta_inode:
3057        make_bad_inode(sbi->meta_inode);
3058        iput(sbi->meta_inode);
3059free_io_dummy:
3060        mempool_destroy(sbi->write_io_dummy);
3061free_percpu:
3062        destroy_percpu_info(sbi);
3063free_bio_info:
3064        for (i = 0; i < NR_PAGE_TYPE; i++)
3065                kfree(sbi->write_io[i]);
3066free_options:
3067#ifdef CONFIG_QUOTA
3068        for (i = 0; i < MAXQUOTAS; i++)
3069                kfree(F2FS_OPTION(sbi).s_qf_names[i]);
3070#endif
3071        kfree(options);
3072free_sb_buf:
3073        kfree(raw_super);
3074free_sbi:
3075        if (sbi->s_chksum_driver)
3076                crypto_free_shash(sbi->s_chksum_driver);
3077        kfree(sbi);
3078
3079        /* give only one another chance */
3080        if (retry) {
3081                retry = false;
3082                shrink_dcache_sb(sb);
3083                goto try_onemore;
3084        }
3085        return err;
3086}
3087
3088static struct dentry *f2fs_mount(struct file_system_type *fs_type, int flags,
3089                        const char *dev_name, void *data)
3090{
3091        return mount_bdev(fs_type, flags, dev_name, data, f2fs_fill_super);
3092}
3093
3094static void kill_f2fs_super(struct super_block *sb)
3095{
3096        if (sb->s_root) {
3097                set_sbi_flag(F2FS_SB(sb), SBI_IS_CLOSE);
3098                f2fs_stop_gc_thread(F2FS_SB(sb));
3099                f2fs_stop_discard_thread(F2FS_SB(sb));
3100        }
3101        kill_block_super(sb);
3102}
3103
3104static struct file_system_type f2fs_fs_type = {
3105        .owner          = THIS_MODULE,
3106        .name           = "f2fs",
3107        .mount          = f2fs_mount,
3108        .kill_sb        = kill_f2fs_super,
3109        .fs_flags       = FS_REQUIRES_DEV,
3110};
3111MODULE_ALIAS_FS("f2fs");
3112
3113static int __init init_inodecache(void)
3114{
3115        f2fs_inode_cachep = kmem_cache_create("f2fs_inode_cache",
3116                        sizeof(struct f2fs_inode_info), 0,
3117                        SLAB_RECLAIM_ACCOUNT|SLAB_ACCOUNT, NULL);
3118        if (!f2fs_inode_cachep)
3119                return -ENOMEM;
3120        return 0;
3121}
3122
3123static void destroy_inodecache(void)
3124{
3125        /*
3126         * Make sure all delayed rcu free inodes are flushed before we
3127         * destroy cache.
3128         */
3129        rcu_barrier();
3130        kmem_cache_destroy(f2fs_inode_cachep);
3131}
3132
3133static int __init init_f2fs_fs(void)
3134{
3135        int err;
3136
3137        if (PAGE_SIZE != F2FS_BLKSIZE) {
3138                printk("F2FS not supported on PAGE_SIZE(%lu) != %d\n",
3139                                PAGE_SIZE, F2FS_BLKSIZE);
3140                return -EINVAL;
3141        }
3142
3143        f2fs_build_trace_ios();
3144
3145        err = init_inodecache();
3146        if (err)
3147                goto fail;
3148        err = f2fs_create_node_manager_caches();
3149        if (err)
3150                goto free_inodecache;
3151        err = f2fs_create_segment_manager_caches();
3152        if (err)
3153                goto free_node_manager_caches;
3154        err = f2fs_create_checkpoint_caches();
3155        if (err)
3156                goto free_segment_manager_caches;
3157        err = f2fs_create_extent_cache();
3158        if (err)
3159                goto free_checkpoint_caches;
3160        err = f2fs_init_sysfs();
3161        if (err)
3162                goto free_extent_cache;
3163        err = register_shrinker(&f2fs_shrinker_info);
3164        if (err)
3165                goto free_sysfs;
3166        err = register_filesystem(&f2fs_fs_type);
3167        if (err)
3168                goto free_shrinker;
3169        err = f2fs_create_root_stats();
3170        if (err)
3171                goto free_filesystem;
3172        err = f2fs_init_post_read_processing();
3173        if (err)
3174                goto free_root_stats;
3175        return 0;
3176
3177free_root_stats:
3178        f2fs_destroy_root_stats();
3179free_filesystem:
3180        unregister_filesystem(&f2fs_fs_type);
3181free_shrinker:
3182        unregister_shrinker(&f2fs_shrinker_info);
3183free_sysfs:
3184        f2fs_exit_sysfs();
3185free_extent_cache:
3186        f2fs_destroy_extent_cache();
3187free_checkpoint_caches:
3188        f2fs_destroy_checkpoint_caches();
3189free_segment_manager_caches:
3190        f2fs_destroy_segment_manager_caches();
3191free_node_manager_caches:
3192        f2fs_destroy_node_manager_caches();
3193free_inodecache:
3194        destroy_inodecache();
3195fail:
3196        return err;
3197}
3198
3199static void __exit exit_f2fs_fs(void)
3200{
3201        f2fs_destroy_post_read_processing();
3202        f2fs_destroy_root_stats();
3203        unregister_filesystem(&f2fs_fs_type);
3204        unregister_shrinker(&f2fs_shrinker_info);
3205        f2fs_exit_sysfs();
3206        f2fs_destroy_extent_cache();
3207        f2fs_destroy_checkpoint_caches();
3208        f2fs_destroy_segment_manager_caches();
3209        f2fs_destroy_node_manager_caches();
3210        destroy_inodecache();
3211        f2fs_destroy_trace_ios();
3212}
3213
3214module_init(init_f2fs_fs)
3215module_exit(exit_f2fs_fs)
3216
3217MODULE_AUTHOR("Samsung Electronics's Praesto Team");
3218MODULE_DESCRIPTION("Flash Friendly File System");
3219MODULE_LICENSE("GPL");
3220
3221