linux/fs/ext4/super.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2/*
   3 *  linux/fs/ext4/super.c
   4 *
   5 * Copyright (C) 1992, 1993, 1994, 1995
   6 * Remy Card (card@masi.ibp.fr)
   7 * Laboratoire MASI - Institut Blaise Pascal
   8 * Universite Pierre et Marie Curie (Paris VI)
   9 *
  10 *  from
  11 *
  12 *  linux/fs/minix/inode.c
  13 *
  14 *  Copyright (C) 1991, 1992  Linus Torvalds
  15 *
  16 *  Big-endian to little-endian byte-swapping/bitmaps by
  17 *        David S. Miller (davem@caip.rutgers.edu), 1995
  18 */
  19
  20#include <linux/module.h>
  21#include <linux/string.h>
  22#include <linux/fs.h>
  23#include <linux/time.h>
  24#include <linux/vmalloc.h>
  25#include <linux/slab.h>
  26#include <linux/init.h>
  27#include <linux/blkdev.h>
  28#include <linux/backing-dev.h>
  29#include <linux/parser.h>
  30#include <linux/buffer_head.h>
  31#include <linux/exportfs.h>
  32#include <linux/vfs.h>
  33#include <linux/random.h>
  34#include <linux/mount.h>
  35#include <linux/namei.h>
  36#include <linux/quotaops.h>
  37#include <linux/seq_file.h>
  38#include <linux/ctype.h>
  39#include <linux/log2.h>
  40#include <linux/crc16.h>
  41#include <linux/dax.h>
  42#include <linux/cleancache.h>
  43#include <linux/uaccess.h>
  44#include <linux/iversion.h>
  45#include <linux/unicode.h>
  46#include <linux/part_stat.h>
  47#include <linux/kthread.h>
  48#include <linux/freezer.h>
  49
  50#include "ext4.h"
  51#include "ext4_extents.h"       /* Needed for trace points definition */
  52#include "ext4_jbd2.h"
  53#include "xattr.h"
  54#include "acl.h"
  55#include "mballoc.h"
  56#include "fsmap.h"
  57
  58#define CREATE_TRACE_POINTS
  59#include <trace/events/ext4.h>
  60
  61static struct ext4_lazy_init *ext4_li_info;
  62static DEFINE_MUTEX(ext4_li_mtx);
  63static struct ratelimit_state ext4_mount_msg_ratelimit;
  64
  65static int ext4_load_journal(struct super_block *, struct ext4_super_block *,
  66                             unsigned long journal_devnum);
  67static int ext4_show_options(struct seq_file *seq, struct dentry *root);
  68static void ext4_update_super(struct super_block *sb);
  69static int ext4_commit_super(struct super_block *sb);
  70static int ext4_mark_recovery_complete(struct super_block *sb,
  71                                        struct ext4_super_block *es);
  72static int ext4_clear_journal_err(struct super_block *sb,
  73                                  struct ext4_super_block *es);
  74static int ext4_sync_fs(struct super_block *sb, int wait);
  75static int ext4_remount(struct super_block *sb, int *flags, char *data);
  76static int ext4_statfs(struct dentry *dentry, struct kstatfs *buf);
  77static int ext4_unfreeze(struct super_block *sb);
  78static int ext4_freeze(struct super_block *sb);
  79static struct dentry *ext4_mount(struct file_system_type *fs_type, int flags,
  80                       const char *dev_name, void *data);
  81static inline int ext2_feature_set_ok(struct super_block *sb);
  82static inline int ext3_feature_set_ok(struct super_block *sb);
  83static int ext4_feature_set_ok(struct super_block *sb, int readonly);
  84static void ext4_destroy_lazyinit_thread(void);
  85static void ext4_unregister_li_request(struct super_block *sb);
  86static void ext4_clear_request_list(void);
  87static struct inode *ext4_get_journal_inode(struct super_block *sb,
  88                                            unsigned int journal_inum);
  89
  90/*
  91 * Lock ordering
  92 *
  93 * Note the difference between i_mmap_sem (EXT4_I(inode)->i_mmap_sem) and
  94 * i_mmap_rwsem (inode->i_mmap_rwsem)!
  95 *
  96 * page fault path:
  97 * mmap_lock -> sb_start_pagefault -> i_mmap_sem (r) -> transaction start ->
  98 *   page lock -> i_data_sem (rw)
  99 *
 100 * buffered write path:
 101 * sb_start_write -> i_mutex -> mmap_lock
 102 * sb_start_write -> i_mutex -> transaction start -> page lock ->
 103 *   i_data_sem (rw)
 104 *
 105 * truncate:
 106 * sb_start_write -> i_mutex -> i_mmap_sem (w) -> i_mmap_rwsem (w) -> page lock
 107 * sb_start_write -> i_mutex -> i_mmap_sem (w) -> transaction start ->
 108 *   i_data_sem (rw)
 109 *
 110 * direct IO:
 111 * sb_start_write -> i_mutex -> mmap_lock
 112 * sb_start_write -> i_mutex -> transaction start -> i_data_sem (rw)
 113 *
 114 * writepages:
 115 * transaction start -> page lock(s) -> i_data_sem (rw)
 116 */
 117
 118#if !defined(CONFIG_EXT2_FS) && !defined(CONFIG_EXT2_FS_MODULE) && defined(CONFIG_EXT4_USE_FOR_EXT2)
 119static struct file_system_type ext2_fs_type = {
 120        .owner          = THIS_MODULE,
 121        .name           = "ext2",
 122        .mount          = ext4_mount,
 123        .kill_sb        = kill_block_super,
 124        .fs_flags       = FS_REQUIRES_DEV,
 125};
 126MODULE_ALIAS_FS("ext2");
 127MODULE_ALIAS("ext2");
 128#define IS_EXT2_SB(sb) ((sb)->s_bdev->bd_holder == &ext2_fs_type)
 129#else
 130#define IS_EXT2_SB(sb) (0)
 131#endif
 132
 133
 134static struct file_system_type ext3_fs_type = {
 135        .owner          = THIS_MODULE,
 136        .name           = "ext3",
 137        .mount          = ext4_mount,
 138        .kill_sb        = kill_block_super,
 139        .fs_flags       = FS_REQUIRES_DEV,
 140};
 141MODULE_ALIAS_FS("ext3");
 142MODULE_ALIAS("ext3");
 143#define IS_EXT3_SB(sb) ((sb)->s_bdev->bd_holder == &ext3_fs_type)
 144
 145
 146static inline void __ext4_read_bh(struct buffer_head *bh, int op_flags,
 147                                  bh_end_io_t *end_io)
 148{
 149        /*
 150         * buffer's verified bit is no longer valid after reading from
 151         * disk again due to write out error, clear it to make sure we
 152         * recheck the buffer contents.
 153         */
 154        clear_buffer_verified(bh);
 155
 156        bh->b_end_io = end_io ? end_io : end_buffer_read_sync;
 157        get_bh(bh);
 158        submit_bh(REQ_OP_READ, op_flags, bh);
 159}
 160
 161void ext4_read_bh_nowait(struct buffer_head *bh, int op_flags,
 162                         bh_end_io_t *end_io)
 163{
 164        BUG_ON(!buffer_locked(bh));
 165
 166        if (ext4_buffer_uptodate(bh)) {
 167                unlock_buffer(bh);
 168                return;
 169        }
 170        __ext4_read_bh(bh, op_flags, end_io);
 171}
 172
 173int ext4_read_bh(struct buffer_head *bh, int op_flags, bh_end_io_t *end_io)
 174{
 175        BUG_ON(!buffer_locked(bh));
 176
 177        if (ext4_buffer_uptodate(bh)) {
 178                unlock_buffer(bh);
 179                return 0;
 180        }
 181
 182        __ext4_read_bh(bh, op_flags, end_io);
 183
 184        wait_on_buffer(bh);
 185        if (buffer_uptodate(bh))
 186                return 0;
 187        return -EIO;
 188}
 189
 190int ext4_read_bh_lock(struct buffer_head *bh, int op_flags, bool wait)
 191{
 192        if (trylock_buffer(bh)) {
 193                if (wait)
 194                        return ext4_read_bh(bh, op_flags, NULL);
 195                ext4_read_bh_nowait(bh, op_flags, NULL);
 196                return 0;
 197        }
 198        if (wait) {
 199                wait_on_buffer(bh);
 200                if (buffer_uptodate(bh))
 201                        return 0;
 202                return -EIO;
 203        }
 204        return 0;
 205}
 206
 207/*
 208 * This works like __bread_gfp() except it uses ERR_PTR for error
 209 * returns.  Currently with sb_bread it's impossible to distinguish
 210 * between ENOMEM and EIO situations (since both result in a NULL
 211 * return.
 212 */
 213static struct buffer_head *__ext4_sb_bread_gfp(struct super_block *sb,
 214                                               sector_t block, int op_flags,
 215                                               gfp_t gfp)
 216{
 217        struct buffer_head *bh;
 218        int ret;
 219
 220        bh = sb_getblk_gfp(sb, block, gfp);
 221        if (bh == NULL)
 222                return ERR_PTR(-ENOMEM);
 223        if (ext4_buffer_uptodate(bh))
 224                return bh;
 225
 226        ret = ext4_read_bh_lock(bh, REQ_META | op_flags, true);
 227        if (ret) {
 228                put_bh(bh);
 229                return ERR_PTR(ret);
 230        }
 231        return bh;
 232}
 233
 234struct buffer_head *ext4_sb_bread(struct super_block *sb, sector_t block,
 235                                   int op_flags)
 236{
 237        return __ext4_sb_bread_gfp(sb, block, op_flags, __GFP_MOVABLE);
 238}
 239
 240struct buffer_head *ext4_sb_bread_unmovable(struct super_block *sb,
 241                                            sector_t block)
 242{
 243        return __ext4_sb_bread_gfp(sb, block, 0, 0);
 244}
 245
 246void ext4_sb_breadahead_unmovable(struct super_block *sb, sector_t block)
 247{
 248        struct buffer_head *bh = sb_getblk_gfp(sb, block, 0);
 249
 250        if (likely(bh)) {
 251                ext4_read_bh_lock(bh, REQ_RAHEAD, false);
 252                brelse(bh);
 253        }
 254}
 255
 256static int ext4_verify_csum_type(struct super_block *sb,
 257                                 struct ext4_super_block *es)
 258{
 259        if (!ext4_has_feature_metadata_csum(sb))
 260                return 1;
 261
 262        return es->s_checksum_type == EXT4_CRC32C_CHKSUM;
 263}
 264
 265static __le32 ext4_superblock_csum(struct super_block *sb,
 266                                   struct ext4_super_block *es)
 267{
 268        struct ext4_sb_info *sbi = EXT4_SB(sb);
 269        int offset = offsetof(struct ext4_super_block, s_checksum);
 270        __u32 csum;
 271
 272        csum = ext4_chksum(sbi, ~0, (char *)es, offset);
 273
 274        return cpu_to_le32(csum);
 275}
 276
 277static int ext4_superblock_csum_verify(struct super_block *sb,
 278                                       struct ext4_super_block *es)
 279{
 280        if (!ext4_has_metadata_csum(sb))
 281                return 1;
 282
 283        return es->s_checksum == ext4_superblock_csum(sb, es);
 284}
 285
 286void ext4_superblock_csum_set(struct super_block *sb)
 287{
 288        struct ext4_super_block *es = EXT4_SB(sb)->s_es;
 289
 290        if (!ext4_has_metadata_csum(sb))
 291                return;
 292
 293        es->s_checksum = ext4_superblock_csum(sb, es);
 294}
 295
 296ext4_fsblk_t ext4_block_bitmap(struct super_block *sb,
 297                               struct ext4_group_desc *bg)
 298{
 299        return le32_to_cpu(bg->bg_block_bitmap_lo) |
 300                (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ?
 301                 (ext4_fsblk_t)le32_to_cpu(bg->bg_block_bitmap_hi) << 32 : 0);
 302}
 303
 304ext4_fsblk_t ext4_inode_bitmap(struct super_block *sb,
 305                               struct ext4_group_desc *bg)
 306{
 307        return le32_to_cpu(bg->bg_inode_bitmap_lo) |
 308                (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ?
 309                 (ext4_fsblk_t)le32_to_cpu(bg->bg_inode_bitmap_hi) << 32 : 0);
 310}
 311
 312ext4_fsblk_t ext4_inode_table(struct super_block *sb,
 313                              struct ext4_group_desc *bg)
 314{
 315        return le32_to_cpu(bg->bg_inode_table_lo) |
 316                (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ?
 317                 (ext4_fsblk_t)le32_to_cpu(bg->bg_inode_table_hi) << 32 : 0);
 318}
 319
 320__u32 ext4_free_group_clusters(struct super_block *sb,
 321                               struct ext4_group_desc *bg)
 322{
 323        return le16_to_cpu(bg->bg_free_blocks_count_lo) |
 324                (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ?
 325                 (__u32)le16_to_cpu(bg->bg_free_blocks_count_hi) << 16 : 0);
 326}
 327
 328__u32 ext4_free_inodes_count(struct super_block *sb,
 329                              struct ext4_group_desc *bg)
 330{
 331        return le16_to_cpu(bg->bg_free_inodes_count_lo) |
 332                (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ?
 333                 (__u32)le16_to_cpu(bg->bg_free_inodes_count_hi) << 16 : 0);
 334}
 335
 336__u32 ext4_used_dirs_count(struct super_block *sb,
 337                              struct ext4_group_desc *bg)
 338{
 339        return le16_to_cpu(bg->bg_used_dirs_count_lo) |
 340                (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ?
 341                 (__u32)le16_to_cpu(bg->bg_used_dirs_count_hi) << 16 : 0);
 342}
 343
 344__u32 ext4_itable_unused_count(struct super_block *sb,
 345                              struct ext4_group_desc *bg)
 346{
 347        return le16_to_cpu(bg->bg_itable_unused_lo) |
 348                (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ?
 349                 (__u32)le16_to_cpu(bg->bg_itable_unused_hi) << 16 : 0);
 350}
 351
 352void ext4_block_bitmap_set(struct super_block *sb,
 353                           struct ext4_group_desc *bg, ext4_fsblk_t blk)
 354{
 355        bg->bg_block_bitmap_lo = cpu_to_le32((u32)blk);
 356        if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT)
 357                bg->bg_block_bitmap_hi = cpu_to_le32(blk >> 32);
 358}
 359
 360void ext4_inode_bitmap_set(struct super_block *sb,
 361                           struct ext4_group_desc *bg, ext4_fsblk_t blk)
 362{
 363        bg->bg_inode_bitmap_lo  = cpu_to_le32((u32)blk);
 364        if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT)
 365                bg->bg_inode_bitmap_hi = cpu_to_le32(blk >> 32);
 366}
 367
 368void ext4_inode_table_set(struct super_block *sb,
 369                          struct ext4_group_desc *bg, ext4_fsblk_t blk)
 370{
 371        bg->bg_inode_table_lo = cpu_to_le32((u32)blk);
 372        if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT)
 373                bg->bg_inode_table_hi = cpu_to_le32(blk >> 32);
 374}
 375
 376void ext4_free_group_clusters_set(struct super_block *sb,
 377                                  struct ext4_group_desc *bg, __u32 count)
 378{
 379        bg->bg_free_blocks_count_lo = cpu_to_le16((__u16)count);
 380        if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT)
 381                bg->bg_free_blocks_count_hi = cpu_to_le16(count >> 16);
 382}
 383
 384void ext4_free_inodes_set(struct super_block *sb,
 385                          struct ext4_group_desc *bg, __u32 count)
 386{
 387        bg->bg_free_inodes_count_lo = cpu_to_le16((__u16)count);
 388        if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT)
 389                bg->bg_free_inodes_count_hi = cpu_to_le16(count >> 16);
 390}
 391
 392void ext4_used_dirs_set(struct super_block *sb,
 393                          struct ext4_group_desc *bg, __u32 count)
 394{
 395        bg->bg_used_dirs_count_lo = cpu_to_le16((__u16)count);
 396        if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT)
 397                bg->bg_used_dirs_count_hi = cpu_to_le16(count >> 16);
 398}
 399
 400void ext4_itable_unused_set(struct super_block *sb,
 401                          struct ext4_group_desc *bg, __u32 count)
 402{
 403        bg->bg_itable_unused_lo = cpu_to_le16((__u16)count);
 404        if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT)
 405                bg->bg_itable_unused_hi = cpu_to_le16(count >> 16);
 406}
 407
 408static void __ext4_update_tstamp(__le32 *lo, __u8 *hi, time64_t now)
 409{
 410        now = clamp_val(now, 0, (1ull << 40) - 1);
 411
 412        *lo = cpu_to_le32(lower_32_bits(now));
 413        *hi = upper_32_bits(now);
 414}
 415
 416static time64_t __ext4_get_tstamp(__le32 *lo, __u8 *hi)
 417{
 418        return ((time64_t)(*hi) << 32) + le32_to_cpu(*lo);
 419}
 420#define ext4_update_tstamp(es, tstamp) \
 421        __ext4_update_tstamp(&(es)->tstamp, &(es)->tstamp ## _hi, \
 422                             ktime_get_real_seconds())
 423#define ext4_get_tstamp(es, tstamp) \
 424        __ext4_get_tstamp(&(es)->tstamp, &(es)->tstamp ## _hi)
 425
 426/*
 427 * The del_gendisk() function uninitializes the disk-specific data
 428 * structures, including the bdi structure, without telling anyone
 429 * else.  Once this happens, any attempt to call mark_buffer_dirty()
 430 * (for example, by ext4_commit_super), will cause a kernel OOPS.
 431 * This is a kludge to prevent these oops until we can put in a proper
 432 * hook in del_gendisk() to inform the VFS and file system layers.
 433 */
 434static int block_device_ejected(struct super_block *sb)
 435{
 436        struct inode *bd_inode = sb->s_bdev->bd_inode;
 437        struct backing_dev_info *bdi = inode_to_bdi(bd_inode);
 438
 439        return bdi->dev == NULL;
 440}
 441
 442static void ext4_journal_commit_callback(journal_t *journal, transaction_t *txn)
 443{
 444        struct super_block              *sb = journal->j_private;
 445        struct ext4_sb_info             *sbi = EXT4_SB(sb);
 446        int                             error = is_journal_aborted(journal);
 447        struct ext4_journal_cb_entry    *jce;
 448
 449        BUG_ON(txn->t_state == T_FINISHED);
 450
 451        ext4_process_freed_data(sb, txn->t_tid);
 452
 453        spin_lock(&sbi->s_md_lock);
 454        while (!list_empty(&txn->t_private_list)) {
 455                jce = list_entry(txn->t_private_list.next,
 456                                 struct ext4_journal_cb_entry, jce_list);
 457                list_del_init(&jce->jce_list);
 458                spin_unlock(&sbi->s_md_lock);
 459                jce->jce_func(sb, jce, error);
 460                spin_lock(&sbi->s_md_lock);
 461        }
 462        spin_unlock(&sbi->s_md_lock);
 463}
 464
 465/*
 466 * This writepage callback for write_cache_pages()
 467 * takes care of a few cases after page cleaning.
 468 *
 469 * write_cache_pages() already checks for dirty pages
 470 * and calls clear_page_dirty_for_io(), which we want,
 471 * to write protect the pages.
 472 *
 473 * However, we may have to redirty a page (see below.)
 474 */
 475static int ext4_journalled_writepage_callback(struct page *page,
 476                                              struct writeback_control *wbc,
 477                                              void *data)
 478{
 479        transaction_t *transaction = (transaction_t *) data;
 480        struct buffer_head *bh, *head;
 481        struct journal_head *jh;
 482
 483        bh = head = page_buffers(page);
 484        do {
 485                /*
 486                 * We have to redirty a page in these cases:
 487                 * 1) If buffer is dirty, it means the page was dirty because it
 488                 * contains a buffer that needs checkpointing. So the dirty bit
 489                 * needs to be preserved so that checkpointing writes the buffer
 490                 * properly.
 491                 * 2) If buffer is not part of the committing transaction
 492                 * (we may have just accidentally come across this buffer because
 493                 * inode range tracking is not exact) or if the currently running
 494                 * transaction already contains this buffer as well, dirty bit
 495                 * needs to be preserved so that the buffer gets writeprotected
 496                 * properly on running transaction's commit.
 497                 */
 498                jh = bh2jh(bh);
 499                if (buffer_dirty(bh) ||
 500                    (jh && (jh->b_transaction != transaction ||
 501                            jh->b_next_transaction))) {
 502                        redirty_page_for_writepage(wbc, page);
 503                        goto out;
 504                }
 505        } while ((bh = bh->b_this_page) != head);
 506
 507out:
 508        return AOP_WRITEPAGE_ACTIVATE;
 509}
 510
 511static int ext4_journalled_submit_inode_data_buffers(struct jbd2_inode *jinode)
 512{
 513        struct address_space *mapping = jinode->i_vfs_inode->i_mapping;
 514        struct writeback_control wbc = {
 515                .sync_mode =  WB_SYNC_ALL,
 516                .nr_to_write = LONG_MAX,
 517                .range_start = jinode->i_dirty_start,
 518                .range_end = jinode->i_dirty_end,
 519        };
 520
 521        return write_cache_pages(mapping, &wbc,
 522                                 ext4_journalled_writepage_callback,
 523                                 jinode->i_transaction);
 524}
 525
 526static int ext4_journal_submit_inode_data_buffers(struct jbd2_inode *jinode)
 527{
 528        int ret;
 529
 530        if (ext4_should_journal_data(jinode->i_vfs_inode))
 531                ret = ext4_journalled_submit_inode_data_buffers(jinode);
 532        else
 533                ret = jbd2_journal_submit_inode_data_buffers(jinode);
 534
 535        return ret;
 536}
 537
 538static int ext4_journal_finish_inode_data_buffers(struct jbd2_inode *jinode)
 539{
 540        int ret = 0;
 541
 542        if (!ext4_should_journal_data(jinode->i_vfs_inode))
 543                ret = jbd2_journal_finish_inode_data_buffers(jinode);
 544
 545        return ret;
 546}
 547
 548static bool system_going_down(void)
 549{
 550        return system_state == SYSTEM_HALT || system_state == SYSTEM_POWER_OFF
 551                || system_state == SYSTEM_RESTART;
 552}
 553
 554struct ext4_err_translation {
 555        int code;
 556        int errno;
 557};
 558
 559#define EXT4_ERR_TRANSLATE(err) { .code = EXT4_ERR_##err, .errno = err }
 560
 561static struct ext4_err_translation err_translation[] = {
 562        EXT4_ERR_TRANSLATE(EIO),
 563        EXT4_ERR_TRANSLATE(ENOMEM),
 564        EXT4_ERR_TRANSLATE(EFSBADCRC),
 565        EXT4_ERR_TRANSLATE(EFSCORRUPTED),
 566        EXT4_ERR_TRANSLATE(ENOSPC),
 567        EXT4_ERR_TRANSLATE(ENOKEY),
 568        EXT4_ERR_TRANSLATE(EROFS),
 569        EXT4_ERR_TRANSLATE(EFBIG),
 570        EXT4_ERR_TRANSLATE(EEXIST),
 571        EXT4_ERR_TRANSLATE(ERANGE),
 572        EXT4_ERR_TRANSLATE(EOVERFLOW),
 573        EXT4_ERR_TRANSLATE(EBUSY),
 574        EXT4_ERR_TRANSLATE(ENOTDIR),
 575        EXT4_ERR_TRANSLATE(ENOTEMPTY),
 576        EXT4_ERR_TRANSLATE(ESHUTDOWN),
 577        EXT4_ERR_TRANSLATE(EFAULT),
 578};
 579
 580static int ext4_errno_to_code(int errno)
 581{
 582        int i;
 583
 584        for (i = 0; i < ARRAY_SIZE(err_translation); i++)
 585                if (err_translation[i].errno == errno)
 586                        return err_translation[i].code;
 587        return EXT4_ERR_UNKNOWN;
 588}
 589
 590static void save_error_info(struct super_block *sb, int error,
 591                            __u32 ino, __u64 block,
 592                            const char *func, unsigned int line)
 593{
 594        struct ext4_sb_info *sbi = EXT4_SB(sb);
 595
 596        /* We default to EFSCORRUPTED error... */
 597        if (error == 0)
 598                error = EFSCORRUPTED;
 599
 600        spin_lock(&sbi->s_error_lock);
 601        sbi->s_add_error_count++;
 602        sbi->s_last_error_code = error;
 603        sbi->s_last_error_line = line;
 604        sbi->s_last_error_ino = ino;
 605        sbi->s_last_error_block = block;
 606        sbi->s_last_error_func = func;
 607        sbi->s_last_error_time = ktime_get_real_seconds();
 608        if (!sbi->s_first_error_time) {
 609                sbi->s_first_error_code = error;
 610                sbi->s_first_error_line = line;
 611                sbi->s_first_error_ino = ino;
 612                sbi->s_first_error_block = block;
 613                sbi->s_first_error_func = func;
 614                sbi->s_first_error_time = sbi->s_last_error_time;
 615        }
 616        spin_unlock(&sbi->s_error_lock);
 617}
 618
 619/* Deal with the reporting of failure conditions on a filesystem such as
 620 * inconsistencies detected or read IO failures.
 621 *
 622 * On ext2, we can store the error state of the filesystem in the
 623 * superblock.  That is not possible on ext4, because we may have other
 624 * write ordering constraints on the superblock which prevent us from
 625 * writing it out straight away; and given that the journal is about to
 626 * be aborted, we can't rely on the current, or future, transactions to
 627 * write out the superblock safely.
 628 *
 629 * We'll just use the jbd2_journal_abort() error code to record an error in
 630 * the journal instead.  On recovery, the journal will complain about
 631 * that error until we've noted it down and cleared it.
 632 *
 633 * If force_ro is set, we unconditionally force the filesystem into an
 634 * ABORT|READONLY state, unless the error response on the fs has been set to
 635 * panic in which case we take the easy way out and panic immediately. This is
 636 * used to deal with unrecoverable failures such as journal IO errors or ENOMEM
 637 * at a critical moment in log management.
 638 */
 639static void ext4_handle_error(struct super_block *sb, bool force_ro, int error,
 640                              __u32 ino, __u64 block,
 641                              const char *func, unsigned int line)
 642{
 643        journal_t *journal = EXT4_SB(sb)->s_journal;
 644        bool continue_fs = !force_ro && test_opt(sb, ERRORS_CONT);
 645
 646        EXT4_SB(sb)->s_mount_state |= EXT4_ERROR_FS;
 647        if (test_opt(sb, WARN_ON_ERROR))
 648                WARN_ON_ONCE(1);
 649
 650        if (!continue_fs && !sb_rdonly(sb)) {
 651                ext4_set_mount_flag(sb, EXT4_MF_FS_ABORTED);
 652                if (journal)
 653                        jbd2_journal_abort(journal, -EIO);
 654        }
 655
 656        if (!bdev_read_only(sb->s_bdev)) {
 657                save_error_info(sb, error, ino, block, func, line);
 658                /*
 659                 * In case the fs should keep running, we need to writeout
 660                 * superblock through the journal. Due to lock ordering
 661                 * constraints, it may not be safe to do it right here so we
 662                 * defer superblock flushing to a workqueue.
 663                 */
 664                if (continue_fs)
 665                        schedule_work(&EXT4_SB(sb)->s_error_work);
 666                else
 667                        ext4_commit_super(sb);
 668        }
 669
 670        if (sb_rdonly(sb) || continue_fs)
 671                return;
 672
 673        /*
 674         * We force ERRORS_RO behavior when system is rebooting. Otherwise we
 675         * could panic during 'reboot -f' as the underlying device got already
 676         * disabled.
 677         */
 678        if (test_opt(sb, ERRORS_PANIC) && !system_going_down()) {
 679                panic("EXT4-fs (device %s): panic forced after error\n",
 680                        sb->s_id);
 681        }
 682        ext4_msg(sb, KERN_CRIT, "Remounting filesystem read-only");
 683        /*
 684         * Make sure updated value of ->s_mount_flags will be visible before
 685         * ->s_flags update
 686         */
 687        smp_wmb();
 688        sb->s_flags |= SB_RDONLY;
 689}
 690
 691static void flush_stashed_error_work(struct work_struct *work)
 692{
 693        struct ext4_sb_info *sbi = container_of(work, struct ext4_sb_info,
 694                                                s_error_work);
 695        journal_t *journal = sbi->s_journal;
 696        handle_t *handle;
 697
 698        /*
 699         * If the journal is still running, we have to write out superblock
 700         * through the journal to avoid collisions of other journalled sb
 701         * updates.
 702         *
 703         * We use directly jbd2 functions here to avoid recursing back into
 704         * ext4 error handling code during handling of previous errors.
 705         */
 706        if (!sb_rdonly(sbi->s_sb) && journal) {
 707                handle = jbd2_journal_start(journal, 1);
 708                if (IS_ERR(handle))
 709                        goto write_directly;
 710                if (jbd2_journal_get_write_access(handle, sbi->s_sbh)) {
 711                        jbd2_journal_stop(handle);
 712                        goto write_directly;
 713                }
 714                ext4_update_super(sbi->s_sb);
 715                if (jbd2_journal_dirty_metadata(handle, sbi->s_sbh)) {
 716                        jbd2_journal_stop(handle);
 717                        goto write_directly;
 718                }
 719                jbd2_journal_stop(handle);
 720                return;
 721        }
 722write_directly:
 723        /*
 724         * Write through journal failed. Write sb directly to get error info
 725         * out and hope for the best.
 726         */
 727        ext4_commit_super(sbi->s_sb);
 728}
 729
 730#define ext4_error_ratelimit(sb)                                        \
 731                ___ratelimit(&(EXT4_SB(sb)->s_err_ratelimit_state),     \
 732                             "EXT4-fs error")
 733
 734void __ext4_error(struct super_block *sb, const char *function,
 735                  unsigned int line, bool force_ro, int error, __u64 block,
 736                  const char *fmt, ...)
 737{
 738        struct va_format vaf;
 739        va_list args;
 740
 741        if (unlikely(ext4_forced_shutdown(EXT4_SB(sb))))
 742                return;
 743
 744        trace_ext4_error(sb, function, line);
 745        if (ext4_error_ratelimit(sb)) {
 746                va_start(args, fmt);
 747                vaf.fmt = fmt;
 748                vaf.va = &args;
 749                printk(KERN_CRIT
 750                       "EXT4-fs error (device %s): %s:%d: comm %s: %pV\n",
 751                       sb->s_id, function, line, current->comm, &vaf);
 752                va_end(args);
 753        }
 754        ext4_handle_error(sb, force_ro, error, 0, block, function, line);
 755}
 756
 757void __ext4_error_inode(struct inode *inode, const char *function,
 758                        unsigned int line, ext4_fsblk_t block, int error,
 759                        const char *fmt, ...)
 760{
 761        va_list args;
 762        struct va_format vaf;
 763
 764        if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb))))
 765                return;
 766
 767        trace_ext4_error(inode->i_sb, function, line);
 768        if (ext4_error_ratelimit(inode->i_sb)) {
 769                va_start(args, fmt);
 770                vaf.fmt = fmt;
 771                vaf.va = &args;
 772                if (block)
 773                        printk(KERN_CRIT "EXT4-fs error (device %s): %s:%d: "
 774                               "inode #%lu: block %llu: comm %s: %pV\n",
 775                               inode->i_sb->s_id, function, line, inode->i_ino,
 776                               block, current->comm, &vaf);
 777                else
 778                        printk(KERN_CRIT "EXT4-fs error (device %s): %s:%d: "
 779                               "inode #%lu: comm %s: %pV\n",
 780                               inode->i_sb->s_id, function, line, inode->i_ino,
 781                               current->comm, &vaf);
 782                va_end(args);
 783        }
 784        ext4_handle_error(inode->i_sb, false, error, inode->i_ino, block,
 785                          function, line);
 786}
 787
 788void __ext4_error_file(struct file *file, const char *function,
 789                       unsigned int line, ext4_fsblk_t block,
 790                       const char *fmt, ...)
 791{
 792        va_list args;
 793        struct va_format vaf;
 794        struct inode *inode = file_inode(file);
 795        char pathname[80], *path;
 796
 797        if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb))))
 798                return;
 799
 800        trace_ext4_error(inode->i_sb, function, line);
 801        if (ext4_error_ratelimit(inode->i_sb)) {
 802                path = file_path(file, pathname, sizeof(pathname));
 803                if (IS_ERR(path))
 804                        path = "(unknown)";
 805                va_start(args, fmt);
 806                vaf.fmt = fmt;
 807                vaf.va = &args;
 808                if (block)
 809                        printk(KERN_CRIT
 810                               "EXT4-fs error (device %s): %s:%d: inode #%lu: "
 811                               "block %llu: comm %s: path %s: %pV\n",
 812                               inode->i_sb->s_id, function, line, inode->i_ino,
 813                               block, current->comm, path, &vaf);
 814                else
 815                        printk(KERN_CRIT
 816                               "EXT4-fs error (device %s): %s:%d: inode #%lu: "
 817                               "comm %s: path %s: %pV\n",
 818                               inode->i_sb->s_id, function, line, inode->i_ino,
 819                               current->comm, path, &vaf);
 820                va_end(args);
 821        }
 822        ext4_handle_error(inode->i_sb, false, EFSCORRUPTED, inode->i_ino, block,
 823                          function, line);
 824}
 825
 826const char *ext4_decode_error(struct super_block *sb, int errno,
 827                              char nbuf[16])
 828{
 829        char *errstr = NULL;
 830
 831        switch (errno) {
 832        case -EFSCORRUPTED:
 833                errstr = "Corrupt filesystem";
 834                break;
 835        case -EFSBADCRC:
 836                errstr = "Filesystem failed CRC";
 837                break;
 838        case -EIO:
 839                errstr = "IO failure";
 840                break;
 841        case -ENOMEM:
 842                errstr = "Out of memory";
 843                break;
 844        case -EROFS:
 845                if (!sb || (EXT4_SB(sb)->s_journal &&
 846                            EXT4_SB(sb)->s_journal->j_flags & JBD2_ABORT))
 847                        errstr = "Journal has aborted";
 848                else
 849                        errstr = "Readonly filesystem";
 850                break;
 851        default:
 852                /* If the caller passed in an extra buffer for unknown
 853                 * errors, textualise them now.  Else we just return
 854                 * NULL. */
 855                if (nbuf) {
 856                        /* Check for truncated error codes... */
 857                        if (snprintf(nbuf, 16, "error %d", -errno) >= 0)
 858                                errstr = nbuf;
 859                }
 860                break;
 861        }
 862
 863        return errstr;
 864}
 865
 866/* __ext4_std_error decodes expected errors from journaling functions
 867 * automatically and invokes the appropriate error response.  */
 868
 869void __ext4_std_error(struct super_block *sb, const char *function,
 870                      unsigned int line, int errno)
 871{
 872        char nbuf[16];
 873        const char *errstr;
 874
 875        if (unlikely(ext4_forced_shutdown(EXT4_SB(sb))))
 876                return;
 877
 878        /* Special case: if the error is EROFS, and we're not already
 879         * inside a transaction, then there's really no point in logging
 880         * an error. */
 881        if (errno == -EROFS && journal_current_handle() == NULL && sb_rdonly(sb))
 882                return;
 883
 884        if (ext4_error_ratelimit(sb)) {
 885                errstr = ext4_decode_error(sb, errno, nbuf);
 886                printk(KERN_CRIT "EXT4-fs error (device %s) in %s:%d: %s\n",
 887                       sb->s_id, function, line, errstr);
 888        }
 889
 890        ext4_handle_error(sb, false, -errno, 0, 0, function, line);
 891}
 892
 893void __ext4_msg(struct super_block *sb,
 894                const char *prefix, const char *fmt, ...)
 895{
 896        struct va_format vaf;
 897        va_list args;
 898
 899        atomic_inc(&EXT4_SB(sb)->s_msg_count);
 900        if (!___ratelimit(&(EXT4_SB(sb)->s_msg_ratelimit_state), "EXT4-fs"))
 901                return;
 902
 903        va_start(args, fmt);
 904        vaf.fmt = fmt;
 905        vaf.va = &args;
 906        printk("%sEXT4-fs (%s): %pV\n", prefix, sb->s_id, &vaf);
 907        va_end(args);
 908}
 909
 910static int ext4_warning_ratelimit(struct super_block *sb)
 911{
 912        atomic_inc(&EXT4_SB(sb)->s_warning_count);
 913        return ___ratelimit(&(EXT4_SB(sb)->s_warning_ratelimit_state),
 914                            "EXT4-fs warning");
 915}
 916
 917void __ext4_warning(struct super_block *sb, const char *function,
 918                    unsigned int line, const char *fmt, ...)
 919{
 920        struct va_format vaf;
 921        va_list args;
 922
 923        if (!ext4_warning_ratelimit(sb))
 924                return;
 925
 926        va_start(args, fmt);
 927        vaf.fmt = fmt;
 928        vaf.va = &args;
 929        printk(KERN_WARNING "EXT4-fs warning (device %s): %s:%d: %pV\n",
 930               sb->s_id, function, line, &vaf);
 931        va_end(args);
 932}
 933
 934void __ext4_warning_inode(const struct inode *inode, const char *function,
 935                          unsigned int line, const char *fmt, ...)
 936{
 937        struct va_format vaf;
 938        va_list args;
 939
 940        if (!ext4_warning_ratelimit(inode->i_sb))
 941                return;
 942
 943        va_start(args, fmt);
 944        vaf.fmt = fmt;
 945        vaf.va = &args;
 946        printk(KERN_WARNING "EXT4-fs warning (device %s): %s:%d: "
 947               "inode #%lu: comm %s: %pV\n", inode->i_sb->s_id,
 948               function, line, inode->i_ino, current->comm, &vaf);
 949        va_end(args);
 950}
 951
 952void __ext4_grp_locked_error(const char *function, unsigned int line,
 953                             struct super_block *sb, ext4_group_t grp,
 954                             unsigned long ino, ext4_fsblk_t block,
 955                             const char *fmt, ...)
 956__releases(bitlock)
 957__acquires(bitlock)
 958{
 959        struct va_format vaf;
 960        va_list args;
 961
 962        if (unlikely(ext4_forced_shutdown(EXT4_SB(sb))))
 963                return;
 964
 965        trace_ext4_error(sb, function, line);
 966        if (ext4_error_ratelimit(sb)) {
 967                va_start(args, fmt);
 968                vaf.fmt = fmt;
 969                vaf.va = &args;
 970                printk(KERN_CRIT "EXT4-fs error (device %s): %s:%d: group %u, ",
 971                       sb->s_id, function, line, grp);
 972                if (ino)
 973                        printk(KERN_CONT "inode %lu: ", ino);
 974                if (block)
 975                        printk(KERN_CONT "block %llu:",
 976                               (unsigned long long) block);
 977                printk(KERN_CONT "%pV\n", &vaf);
 978                va_end(args);
 979        }
 980
 981        if (test_opt(sb, ERRORS_CONT)) {
 982                if (test_opt(sb, WARN_ON_ERROR))
 983                        WARN_ON_ONCE(1);
 984                EXT4_SB(sb)->s_mount_state |= EXT4_ERROR_FS;
 985                if (!bdev_read_only(sb->s_bdev)) {
 986                        save_error_info(sb, EFSCORRUPTED, ino, block, function,
 987                                        line);
 988                        schedule_work(&EXT4_SB(sb)->s_error_work);
 989                }
 990                return;
 991        }
 992        ext4_unlock_group(sb, grp);
 993        ext4_handle_error(sb, false, EFSCORRUPTED, ino, block, function, line);
 994        /*
 995         * We only get here in the ERRORS_RO case; relocking the group
 996         * may be dangerous, but nothing bad will happen since the
 997         * filesystem will have already been marked read/only and the
 998         * journal has been aborted.  We return 1 as a hint to callers
 999         * who might what to use the return value from
1000         * ext4_grp_locked_error() to distinguish between the
1001         * ERRORS_CONT and ERRORS_RO case, and perhaps return more
1002         * aggressively from the ext4 function in question, with a
1003         * more appropriate error code.
1004         */
1005        ext4_lock_group(sb, grp);
1006        return;
1007}
1008
1009void ext4_mark_group_bitmap_corrupted(struct super_block *sb,
1010                                     ext4_group_t group,
1011                                     unsigned int flags)
1012{
1013        struct ext4_sb_info *sbi = EXT4_SB(sb);
1014        struct ext4_group_info *grp = ext4_get_group_info(sb, group);
1015        struct ext4_group_desc *gdp = ext4_get_group_desc(sb, group, NULL);
1016        int ret;
1017
1018        if (flags & EXT4_GROUP_INFO_BBITMAP_CORRUPT) {
1019                ret = ext4_test_and_set_bit(EXT4_GROUP_INFO_BBITMAP_CORRUPT_BIT,
1020                                            &grp->bb_state);
1021                if (!ret)
1022                        percpu_counter_sub(&sbi->s_freeclusters_counter,
1023                                           grp->bb_free);
1024        }
1025
1026        if (flags & EXT4_GROUP_INFO_IBITMAP_CORRUPT) {
1027                ret = ext4_test_and_set_bit(EXT4_GROUP_INFO_IBITMAP_CORRUPT_BIT,
1028                                            &grp->bb_state);
1029                if (!ret && gdp) {
1030                        int count;
1031
1032                        count = ext4_free_inodes_count(sb, gdp);
1033                        percpu_counter_sub(&sbi->s_freeinodes_counter,
1034                                           count);
1035                }
1036        }
1037}
1038
1039void ext4_update_dynamic_rev(struct super_block *sb)
1040{
1041        struct ext4_super_block *es = EXT4_SB(sb)->s_es;
1042
1043        if (le32_to_cpu(es->s_rev_level) > EXT4_GOOD_OLD_REV)
1044                return;
1045
1046        ext4_warning(sb,
1047                     "updating to rev %d because of new feature flag, "
1048                     "running e2fsck is recommended",
1049                     EXT4_DYNAMIC_REV);
1050
1051        es->s_first_ino = cpu_to_le32(EXT4_GOOD_OLD_FIRST_INO);
1052        es->s_inode_size = cpu_to_le16(EXT4_GOOD_OLD_INODE_SIZE);
1053        es->s_rev_level = cpu_to_le32(EXT4_DYNAMIC_REV);
1054        /* leave es->s_feature_*compat flags alone */
1055        /* es->s_uuid will be set by e2fsck if empty */
1056
1057        /*
1058         * The rest of the superblock fields should be zero, and if not it
1059         * means they are likely already in use, so leave them alone.  We
1060         * can leave it up to e2fsck to clean up any inconsistencies there.
1061         */
1062}
1063
1064/*
1065 * Open the external journal device
1066 */
1067static struct block_device *ext4_blkdev_get(dev_t dev, struct super_block *sb)
1068{
1069        struct block_device *bdev;
1070
1071        bdev = blkdev_get_by_dev(dev, FMODE_READ|FMODE_WRITE|FMODE_EXCL, sb);
1072        if (IS_ERR(bdev))
1073                goto fail;
1074        return bdev;
1075
1076fail:
1077        ext4_msg(sb, KERN_ERR,
1078                 "failed to open journal device unknown-block(%u,%u) %ld",
1079                 MAJOR(dev), MINOR(dev), PTR_ERR(bdev));
1080        return NULL;
1081}
1082
1083/*
1084 * Release the journal device
1085 */
1086static void ext4_blkdev_put(struct block_device *bdev)
1087{
1088        blkdev_put(bdev, FMODE_READ|FMODE_WRITE|FMODE_EXCL);
1089}
1090
1091static void ext4_blkdev_remove(struct ext4_sb_info *sbi)
1092{
1093        struct block_device *bdev;
1094        bdev = sbi->s_journal_bdev;
1095        if (bdev) {
1096                ext4_blkdev_put(bdev);
1097                sbi->s_journal_bdev = NULL;
1098        }
1099}
1100
1101static inline struct inode *orphan_list_entry(struct list_head *l)
1102{
1103        return &list_entry(l, struct ext4_inode_info, i_orphan)->vfs_inode;
1104}
1105
1106static void dump_orphan_list(struct super_block *sb, struct ext4_sb_info *sbi)
1107{
1108        struct list_head *l;
1109
1110        ext4_msg(sb, KERN_ERR, "sb orphan head is %d",
1111                 le32_to_cpu(sbi->s_es->s_last_orphan));
1112
1113        printk(KERN_ERR "sb_info orphan list:\n");
1114        list_for_each(l, &sbi->s_orphan) {
1115                struct inode *inode = orphan_list_entry(l);
1116                printk(KERN_ERR "  "
1117                       "inode %s:%lu at %p: mode %o, nlink %d, next %d\n",
1118                       inode->i_sb->s_id, inode->i_ino, inode,
1119                       inode->i_mode, inode->i_nlink,
1120                       NEXT_ORPHAN(inode));
1121        }
1122}
1123
1124#ifdef CONFIG_QUOTA
1125static int ext4_quota_off(struct super_block *sb, int type);
1126
1127static inline void ext4_quota_off_umount(struct super_block *sb)
1128{
1129        int type;
1130
1131        /* Use our quota_off function to clear inode flags etc. */
1132        for (type = 0; type < EXT4_MAXQUOTAS; type++)
1133                ext4_quota_off(sb, type);
1134}
1135
1136/*
1137 * This is a helper function which is used in the mount/remount
1138 * codepaths (which holds s_umount) to fetch the quota file name.
1139 */
1140static inline char *get_qf_name(struct super_block *sb,
1141                                struct ext4_sb_info *sbi,
1142                                int type)
1143{
1144        return rcu_dereference_protected(sbi->s_qf_names[type],
1145                                         lockdep_is_held(&sb->s_umount));
1146}
1147#else
1148static inline void ext4_quota_off_umount(struct super_block *sb)
1149{
1150}
1151#endif
1152
1153static void ext4_put_super(struct super_block *sb)
1154{
1155        struct ext4_sb_info *sbi = EXT4_SB(sb);
1156        struct ext4_super_block *es = sbi->s_es;
1157        struct buffer_head **group_desc;
1158        struct flex_groups **flex_groups;
1159        int aborted = 0;
1160        int i, err;
1161
1162        ext4_unregister_li_request(sb);
1163        ext4_quota_off_umount(sb);
1164
1165        flush_work(&sbi->s_error_work);
1166        destroy_workqueue(sbi->rsv_conversion_wq);
1167
1168        /*
1169         * Unregister sysfs before destroying jbd2 journal.
1170         * Since we could still access attr_journal_task attribute via sysfs
1171         * path which could have sbi->s_journal->j_task as NULL
1172         */
1173        ext4_unregister_sysfs(sb);
1174
1175        if (sbi->s_journal) {
1176                aborted = is_journal_aborted(sbi->s_journal);
1177                err = jbd2_journal_destroy(sbi->s_journal);
1178                sbi->s_journal = NULL;
1179                if ((err < 0) && !aborted) {
1180                        ext4_abort(sb, -err, "Couldn't clean up the journal");
1181                }
1182        }
1183
1184        ext4_es_unregister_shrinker(sbi);
1185        del_timer_sync(&sbi->s_err_report);
1186        ext4_release_system_zone(sb);
1187        ext4_mb_release(sb);
1188        ext4_ext_release(sb);
1189
1190        if (!sb_rdonly(sb) && !aborted) {
1191                ext4_clear_feature_journal_needs_recovery(sb);
1192                es->s_state = cpu_to_le16(sbi->s_mount_state);
1193        }
1194        if (!sb_rdonly(sb))
1195                ext4_commit_super(sb);
1196
1197        rcu_read_lock();
1198        group_desc = rcu_dereference(sbi->s_group_desc);
1199        for (i = 0; i < sbi->s_gdb_count; i++)
1200                brelse(group_desc[i]);
1201        kvfree(group_desc);
1202        flex_groups = rcu_dereference(sbi->s_flex_groups);
1203        if (flex_groups) {
1204                for (i = 0; i < sbi->s_flex_groups_allocated; i++)
1205                        kvfree(flex_groups[i]);
1206                kvfree(flex_groups);
1207        }
1208        rcu_read_unlock();
1209        percpu_counter_destroy(&sbi->s_freeclusters_counter);
1210        percpu_counter_destroy(&sbi->s_freeinodes_counter);
1211        percpu_counter_destroy(&sbi->s_dirs_counter);
1212        percpu_counter_destroy(&sbi->s_dirtyclusters_counter);
1213        percpu_counter_destroy(&sbi->s_sra_exceeded_retry_limit);
1214        percpu_free_rwsem(&sbi->s_writepages_rwsem);
1215#ifdef CONFIG_QUOTA
1216        for (i = 0; i < EXT4_MAXQUOTAS; i++)
1217                kfree(get_qf_name(sb, sbi, i));
1218#endif
1219
1220        /* Debugging code just in case the in-memory inode orphan list
1221         * isn't empty.  The on-disk one can be non-empty if we've
1222         * detected an error and taken the fs readonly, but the
1223         * in-memory list had better be clean by this point. */
1224        if (!list_empty(&sbi->s_orphan))
1225                dump_orphan_list(sb, sbi);
1226        ASSERT(list_empty(&sbi->s_orphan));
1227
1228        sync_blockdev(sb->s_bdev);
1229        invalidate_bdev(sb->s_bdev);
1230        if (sbi->s_journal_bdev && sbi->s_journal_bdev != sb->s_bdev) {
1231                /*
1232                 * Invalidate the journal device's buffers.  We don't want them
1233                 * floating about in memory - the physical journal device may
1234                 * hotswapped, and it breaks the `ro-after' testing code.
1235                 */
1236                sync_blockdev(sbi->s_journal_bdev);
1237                invalidate_bdev(sbi->s_journal_bdev);
1238                ext4_blkdev_remove(sbi);
1239        }
1240
1241        ext4_xattr_destroy_cache(sbi->s_ea_inode_cache);
1242        sbi->s_ea_inode_cache = NULL;
1243
1244        ext4_xattr_destroy_cache(sbi->s_ea_block_cache);
1245        sbi->s_ea_block_cache = NULL;
1246
1247        if (sbi->s_mmp_tsk)
1248                kthread_stop(sbi->s_mmp_tsk);
1249        brelse(sbi->s_sbh);
1250        sb->s_fs_info = NULL;
1251        /*
1252         * Now that we are completely done shutting down the
1253         * superblock, we need to actually destroy the kobject.
1254         */
1255        kobject_put(&sbi->s_kobj);
1256        wait_for_completion(&sbi->s_kobj_unregister);
1257        if (sbi->s_chksum_driver)
1258                crypto_free_shash(sbi->s_chksum_driver);
1259        kfree(sbi->s_blockgroup_lock);
1260        fs_put_dax(sbi->s_daxdev);
1261        fscrypt_free_dummy_policy(&sbi->s_dummy_enc_policy);
1262#ifdef CONFIG_UNICODE
1263        utf8_unload(sb->s_encoding);
1264#endif
1265        kfree(sbi);
1266}
1267
1268static struct kmem_cache *ext4_inode_cachep;
1269
1270/*
1271 * Called inside transaction, so use GFP_NOFS
1272 */
1273static struct inode *ext4_alloc_inode(struct super_block *sb)
1274{
1275        struct ext4_inode_info *ei;
1276
1277        ei = kmem_cache_alloc(ext4_inode_cachep, GFP_NOFS);
1278        if (!ei)
1279                return NULL;
1280
1281        inode_set_iversion(&ei->vfs_inode, 1);
1282        spin_lock_init(&ei->i_raw_lock);
1283        INIT_LIST_HEAD(&ei->i_prealloc_list);
1284        atomic_set(&ei->i_prealloc_active, 0);
1285        spin_lock_init(&ei->i_prealloc_lock);
1286        ext4_es_init_tree(&ei->i_es_tree);
1287        rwlock_init(&ei->i_es_lock);
1288        INIT_LIST_HEAD(&ei->i_es_list);
1289        ei->i_es_all_nr = 0;
1290        ei->i_es_shk_nr = 0;
1291        ei->i_es_shrink_lblk = 0;
1292        ei->i_reserved_data_blocks = 0;
1293        spin_lock_init(&(ei->i_block_reservation_lock));
1294        ext4_init_pending_tree(&ei->i_pending_tree);
1295#ifdef CONFIG_QUOTA
1296        ei->i_reserved_quota = 0;
1297        memset(&ei->i_dquot, 0, sizeof(ei->i_dquot));
1298#endif
1299        ei->jinode = NULL;
1300        INIT_LIST_HEAD(&ei->i_rsv_conversion_list);
1301        spin_lock_init(&ei->i_completed_io_lock);
1302        ei->i_sync_tid = 0;
1303        ei->i_datasync_tid = 0;
1304        atomic_set(&ei->i_unwritten, 0);
1305        INIT_WORK(&ei->i_rsv_conversion_work, ext4_end_io_rsv_work);
1306        ext4_fc_init_inode(&ei->vfs_inode);
1307        mutex_init(&ei->i_fc_lock);
1308        return &ei->vfs_inode;
1309}
1310
1311static int ext4_drop_inode(struct inode *inode)
1312{
1313        int drop = generic_drop_inode(inode);
1314
1315        if (!drop)
1316                drop = fscrypt_drop_inode(inode);
1317
1318        trace_ext4_drop_inode(inode, drop);
1319        return drop;
1320}
1321
1322static void ext4_free_in_core_inode(struct inode *inode)
1323{
1324        fscrypt_free_inode(inode);
1325        if (!list_empty(&(EXT4_I(inode)->i_fc_list))) {
1326                pr_warn("%s: inode %ld still in fc list",
1327                        __func__, inode->i_ino);
1328        }
1329        kmem_cache_free(ext4_inode_cachep, EXT4_I(inode));
1330}
1331
1332static void ext4_destroy_inode(struct inode *inode)
1333{
1334        if (!list_empty(&(EXT4_I(inode)->i_orphan))) {
1335                ext4_msg(inode->i_sb, KERN_ERR,
1336                         "Inode %lu (%p): orphan list check failed!",
1337                         inode->i_ino, EXT4_I(inode));
1338                print_hex_dump(KERN_INFO, "", DUMP_PREFIX_ADDRESS, 16, 4,
1339                                EXT4_I(inode), sizeof(struct ext4_inode_info),
1340                                true);
1341                dump_stack();
1342        }
1343}
1344
1345static void init_once(void *foo)
1346{
1347        struct ext4_inode_info *ei = (struct ext4_inode_info *) foo;
1348
1349        INIT_LIST_HEAD(&ei->i_orphan);
1350        init_rwsem(&ei->xattr_sem);
1351        init_rwsem(&ei->i_data_sem);
1352        init_rwsem(&ei->i_mmap_sem);
1353        inode_init_once(&ei->vfs_inode);
1354        ext4_fc_init_inode(&ei->vfs_inode);
1355}
1356
1357static int __init init_inodecache(void)
1358{
1359        ext4_inode_cachep = kmem_cache_create_usercopy("ext4_inode_cache",
1360                                sizeof(struct ext4_inode_info), 0,
1361                                (SLAB_RECLAIM_ACCOUNT|SLAB_MEM_SPREAD|
1362                                        SLAB_ACCOUNT),
1363                                offsetof(struct ext4_inode_info, i_data),
1364                                sizeof_field(struct ext4_inode_info, i_data),
1365                                init_once);
1366        if (ext4_inode_cachep == NULL)
1367                return -ENOMEM;
1368        return 0;
1369}
1370
1371static void destroy_inodecache(void)
1372{
1373        /*
1374         * Make sure all delayed rcu free inodes are flushed before we
1375         * destroy cache.
1376         */
1377        rcu_barrier();
1378        kmem_cache_destroy(ext4_inode_cachep);
1379}
1380
1381void ext4_clear_inode(struct inode *inode)
1382{
1383        ext4_fc_del(inode);
1384        invalidate_inode_buffers(inode);
1385        clear_inode(inode);
1386        ext4_discard_preallocations(inode, 0);
1387        ext4_es_remove_extent(inode, 0, EXT_MAX_BLOCKS);
1388        dquot_drop(inode);
1389        if (EXT4_I(inode)->jinode) {
1390                jbd2_journal_release_jbd_inode(EXT4_JOURNAL(inode),
1391                                               EXT4_I(inode)->jinode);
1392                jbd2_free_inode(EXT4_I(inode)->jinode);
1393                EXT4_I(inode)->jinode = NULL;
1394        }
1395        fscrypt_put_encryption_info(inode);
1396        fsverity_cleanup_inode(inode);
1397}
1398
1399static struct inode *ext4_nfs_get_inode(struct super_block *sb,
1400                                        u64 ino, u32 generation)
1401{
1402        struct inode *inode;
1403
1404        /*
1405         * Currently we don't know the generation for parent directory, so
1406         * a generation of 0 means "accept any"
1407         */
1408        inode = ext4_iget(sb, ino, EXT4_IGET_HANDLE);
1409        if (IS_ERR(inode))
1410                return ERR_CAST(inode);
1411        if (generation && inode->i_generation != generation) {
1412                iput(inode);
1413                return ERR_PTR(-ESTALE);
1414        }
1415
1416        return inode;
1417}
1418
1419static struct dentry *ext4_fh_to_dentry(struct super_block *sb, struct fid *fid,
1420                                        int fh_len, int fh_type)
1421{
1422        return generic_fh_to_dentry(sb, fid, fh_len, fh_type,
1423                                    ext4_nfs_get_inode);
1424}
1425
1426static struct dentry *ext4_fh_to_parent(struct super_block *sb, struct fid *fid,
1427                                        int fh_len, int fh_type)
1428{
1429        return generic_fh_to_parent(sb, fid, fh_len, fh_type,
1430                                    ext4_nfs_get_inode);
1431}
1432
1433static int ext4_nfs_commit_metadata(struct inode *inode)
1434{
1435        struct writeback_control wbc = {
1436                .sync_mode = WB_SYNC_ALL
1437        };
1438
1439        trace_ext4_nfs_commit_metadata(inode);
1440        return ext4_write_inode(inode, &wbc);
1441}
1442
1443/*
1444 * Try to release metadata pages (indirect blocks, directories) which are
1445 * mapped via the block device.  Since these pages could have journal heads
1446 * which would prevent try_to_free_buffers() from freeing them, we must use
1447 * jbd2 layer's try_to_free_buffers() function to release them.
1448 */
1449static int bdev_try_to_free_page(struct super_block *sb, struct page *page,
1450                                 gfp_t wait)
1451{
1452        journal_t *journal = EXT4_SB(sb)->s_journal;
1453
1454        WARN_ON(PageChecked(page));
1455        if (!page_has_buffers(page))
1456                return 0;
1457        if (journal)
1458                return jbd2_journal_try_to_free_buffers(journal, page);
1459
1460        return try_to_free_buffers(page);
1461}
1462
1463#ifdef CONFIG_FS_ENCRYPTION
1464static int ext4_get_context(struct inode *inode, void *ctx, size_t len)
1465{
1466        return ext4_xattr_get(inode, EXT4_XATTR_INDEX_ENCRYPTION,
1467                                 EXT4_XATTR_NAME_ENCRYPTION_CONTEXT, ctx, len);
1468}
1469
1470static int ext4_set_context(struct inode *inode, const void *ctx, size_t len,
1471                                                        void *fs_data)
1472{
1473        handle_t *handle = fs_data;
1474        int res, res2, credits, retries = 0;
1475
1476        /*
1477         * Encrypting the root directory is not allowed because e2fsck expects
1478         * lost+found to exist and be unencrypted, and encrypting the root
1479         * directory would imply encrypting the lost+found directory as well as
1480         * the filename "lost+found" itself.
1481         */
1482        if (inode->i_ino == EXT4_ROOT_INO)
1483                return -EPERM;
1484
1485        if (WARN_ON_ONCE(IS_DAX(inode) && i_size_read(inode)))
1486                return -EINVAL;
1487
1488        if (ext4_test_inode_flag(inode, EXT4_INODE_DAX))
1489                return -EOPNOTSUPP;
1490
1491        res = ext4_convert_inline_data(inode);
1492        if (res)
1493                return res;
1494
1495        /*
1496         * If a journal handle was specified, then the encryption context is
1497         * being set on a new inode via inheritance and is part of a larger
1498         * transaction to create the inode.  Otherwise the encryption context is
1499         * being set on an existing inode in its own transaction.  Only in the
1500         * latter case should the "retry on ENOSPC" logic be used.
1501         */
1502
1503        if (handle) {
1504                res = ext4_xattr_set_handle(handle, inode,
1505                                            EXT4_XATTR_INDEX_ENCRYPTION,
1506                                            EXT4_XATTR_NAME_ENCRYPTION_CONTEXT,
1507                                            ctx, len, 0);
1508                if (!res) {
1509                        ext4_set_inode_flag(inode, EXT4_INODE_ENCRYPT);
1510                        ext4_clear_inode_state(inode,
1511                                        EXT4_STATE_MAY_INLINE_DATA);
1512                        /*
1513                         * Update inode->i_flags - S_ENCRYPTED will be enabled,
1514                         * S_DAX may be disabled
1515                         */
1516                        ext4_set_inode_flags(inode, false);
1517                }
1518                return res;
1519        }
1520
1521        res = dquot_initialize(inode);
1522        if (res)
1523                return res;
1524retry:
1525        res = ext4_xattr_set_credits(inode, len, false /* is_create */,
1526                                     &credits);
1527        if (res)
1528                return res;
1529
1530        handle = ext4_journal_start(inode, EXT4_HT_MISC, credits);
1531        if (IS_ERR(handle))
1532                return PTR_ERR(handle);
1533
1534        res = ext4_xattr_set_handle(handle, inode, EXT4_XATTR_INDEX_ENCRYPTION,
1535                                    EXT4_XATTR_NAME_ENCRYPTION_CONTEXT,
1536                                    ctx, len, 0);
1537        if (!res) {
1538                ext4_set_inode_flag(inode, EXT4_INODE_ENCRYPT);
1539                /*
1540                 * Update inode->i_flags - S_ENCRYPTED will be enabled,
1541                 * S_DAX may be disabled
1542                 */
1543                ext4_set_inode_flags(inode, false);
1544                res = ext4_mark_inode_dirty(handle, inode);
1545                if (res)
1546                        EXT4_ERROR_INODE(inode, "Failed to mark inode dirty");
1547        }
1548        res2 = ext4_journal_stop(handle);
1549
1550        if (res == -ENOSPC && ext4_should_retry_alloc(inode->i_sb, &retries))
1551                goto retry;
1552        if (!res)
1553                res = res2;
1554        return res;
1555}
1556
1557static const union fscrypt_policy *ext4_get_dummy_policy(struct super_block *sb)
1558{
1559        return EXT4_SB(sb)->s_dummy_enc_policy.policy;
1560}
1561
1562static bool ext4_has_stable_inodes(struct super_block *sb)
1563{
1564        return ext4_has_feature_stable_inodes(sb);
1565}
1566
1567static void ext4_get_ino_and_lblk_bits(struct super_block *sb,
1568                                       int *ino_bits_ret, int *lblk_bits_ret)
1569{
1570        *ino_bits_ret = 8 * sizeof(EXT4_SB(sb)->s_es->s_inodes_count);
1571        *lblk_bits_ret = 8 * sizeof(ext4_lblk_t);
1572}
1573
1574static const struct fscrypt_operations ext4_cryptops = {
1575        .key_prefix             = "ext4:",
1576        .get_context            = ext4_get_context,
1577        .set_context            = ext4_set_context,
1578        .get_dummy_policy       = ext4_get_dummy_policy,
1579        .empty_dir              = ext4_empty_dir,
1580        .max_namelen            = EXT4_NAME_LEN,
1581        .has_stable_inodes      = ext4_has_stable_inodes,
1582        .get_ino_and_lblk_bits  = ext4_get_ino_and_lblk_bits,
1583};
1584#endif
1585
1586#ifdef CONFIG_QUOTA
1587static const char * const quotatypes[] = INITQFNAMES;
1588#define QTYPE2NAME(t) (quotatypes[t])
1589
1590static int ext4_write_dquot(struct dquot *dquot);
1591static int ext4_acquire_dquot(struct dquot *dquot);
1592static int ext4_release_dquot(struct dquot *dquot);
1593static int ext4_mark_dquot_dirty(struct dquot *dquot);
1594static int ext4_write_info(struct super_block *sb, int type);
1595static int ext4_quota_on(struct super_block *sb, int type, int format_id,
1596                         const struct path *path);
1597static int ext4_quota_on_mount(struct super_block *sb, int type);
1598static ssize_t ext4_quota_read(struct super_block *sb, int type, char *data,
1599                               size_t len, loff_t off);
1600static ssize_t ext4_quota_write(struct super_block *sb, int type,
1601                                const char *data, size_t len, loff_t off);
1602static int ext4_quota_enable(struct super_block *sb, int type, int format_id,
1603                             unsigned int flags);
1604static int ext4_enable_quotas(struct super_block *sb);
1605
1606static struct dquot **ext4_get_dquots(struct inode *inode)
1607{
1608        return EXT4_I(inode)->i_dquot;
1609}
1610
1611static const struct dquot_operations ext4_quota_operations = {
1612        .get_reserved_space     = ext4_get_reserved_space,
1613        .write_dquot            = ext4_write_dquot,
1614        .acquire_dquot          = ext4_acquire_dquot,
1615        .release_dquot          = ext4_release_dquot,
1616        .mark_dirty             = ext4_mark_dquot_dirty,
1617        .write_info             = ext4_write_info,
1618        .alloc_dquot            = dquot_alloc,
1619        .destroy_dquot          = dquot_destroy,
1620        .get_projid             = ext4_get_projid,
1621        .get_inode_usage        = ext4_get_inode_usage,
1622        .get_next_id            = dquot_get_next_id,
1623};
1624
1625static const struct quotactl_ops ext4_qctl_operations = {
1626        .quota_on       = ext4_quota_on,
1627        .quota_off      = ext4_quota_off,
1628        .quota_sync     = dquot_quota_sync,
1629        .get_state      = dquot_get_state,
1630        .set_info       = dquot_set_dqinfo,
1631        .get_dqblk      = dquot_get_dqblk,
1632        .set_dqblk      = dquot_set_dqblk,
1633        .get_nextdqblk  = dquot_get_next_dqblk,
1634};
1635#endif
1636
1637static const struct super_operations ext4_sops = {
1638        .alloc_inode    = ext4_alloc_inode,
1639        .free_inode     = ext4_free_in_core_inode,
1640        .destroy_inode  = ext4_destroy_inode,
1641        .write_inode    = ext4_write_inode,
1642        .dirty_inode    = ext4_dirty_inode,
1643        .drop_inode     = ext4_drop_inode,
1644        .evict_inode    = ext4_evict_inode,
1645        .put_super      = ext4_put_super,
1646        .sync_fs        = ext4_sync_fs,
1647        .freeze_fs      = ext4_freeze,
1648        .unfreeze_fs    = ext4_unfreeze,
1649        .statfs         = ext4_statfs,
1650        .remount_fs     = ext4_remount,
1651        .show_options   = ext4_show_options,
1652#ifdef CONFIG_QUOTA
1653        .quota_read     = ext4_quota_read,
1654        .quota_write    = ext4_quota_write,
1655        .get_dquots     = ext4_get_dquots,
1656#endif
1657        .bdev_try_to_free_page = bdev_try_to_free_page,
1658};
1659
1660static const struct export_operations ext4_export_ops = {
1661        .fh_to_dentry = ext4_fh_to_dentry,
1662        .fh_to_parent = ext4_fh_to_parent,
1663        .get_parent = ext4_get_parent,
1664        .commit_metadata = ext4_nfs_commit_metadata,
1665};
1666
1667enum {
1668        Opt_bsd_df, Opt_minix_df, Opt_grpid, Opt_nogrpid,
1669        Opt_resgid, Opt_resuid, Opt_sb, Opt_err_cont, Opt_err_panic, Opt_err_ro,
1670        Opt_nouid32, Opt_debug, Opt_removed,
1671        Opt_user_xattr, Opt_nouser_xattr, Opt_acl, Opt_noacl,
1672        Opt_auto_da_alloc, Opt_noauto_da_alloc, Opt_noload,
1673        Opt_commit, Opt_min_batch_time, Opt_max_batch_time, Opt_journal_dev,
1674        Opt_journal_path, Opt_journal_checksum, Opt_journal_async_commit,
1675        Opt_abort, Opt_data_journal, Opt_data_ordered, Opt_data_writeback,
1676        Opt_data_err_abort, Opt_data_err_ignore, Opt_test_dummy_encryption,
1677        Opt_inlinecrypt,
1678        Opt_usrjquota, Opt_grpjquota, Opt_offusrjquota, Opt_offgrpjquota,
1679        Opt_jqfmt_vfsold, Opt_jqfmt_vfsv0, Opt_jqfmt_vfsv1, Opt_quota,
1680        Opt_noquota, Opt_barrier, Opt_nobarrier, Opt_err,
1681        Opt_usrquota, Opt_grpquota, Opt_prjquota, Opt_i_version,
1682        Opt_dax, Opt_dax_always, Opt_dax_inode, Opt_dax_never,
1683        Opt_stripe, Opt_delalloc, Opt_nodelalloc, Opt_warn_on_error,
1684        Opt_nowarn_on_error, Opt_mblk_io_submit,
1685        Opt_lazytime, Opt_nolazytime, Opt_debug_want_extra_isize,
1686        Opt_nomblk_io_submit, Opt_block_validity, Opt_noblock_validity,
1687        Opt_inode_readahead_blks, Opt_journal_ioprio,
1688        Opt_dioread_nolock, Opt_dioread_lock,
1689        Opt_discard, Opt_nodiscard, Opt_init_itable, Opt_noinit_itable,
1690        Opt_max_dir_size_kb, Opt_nojournal_checksum, Opt_nombcache,
1691        Opt_prefetch_block_bitmaps,
1692#ifdef CONFIG_EXT4_DEBUG
1693        Opt_fc_debug_max_replay, Opt_fc_debug_force
1694#endif
1695};
1696
1697static const match_table_t tokens = {
1698        {Opt_bsd_df, "bsddf"},
1699        {Opt_minix_df, "minixdf"},
1700        {Opt_grpid, "grpid"},
1701        {Opt_grpid, "bsdgroups"},
1702        {Opt_nogrpid, "nogrpid"},
1703        {Opt_nogrpid, "sysvgroups"},
1704        {Opt_resgid, "resgid=%u"},
1705        {Opt_resuid, "resuid=%u"},
1706        {Opt_sb, "sb=%u"},
1707        {Opt_err_cont, "errors=continue"},
1708        {Opt_err_panic, "errors=panic"},
1709        {Opt_err_ro, "errors=remount-ro"},
1710        {Opt_nouid32, "nouid32"},
1711        {Opt_debug, "debug"},
1712        {Opt_removed, "oldalloc"},
1713        {Opt_removed, "orlov"},
1714        {Opt_user_xattr, "user_xattr"},
1715        {Opt_nouser_xattr, "nouser_xattr"},
1716        {Opt_acl, "acl"},
1717        {Opt_noacl, "noacl"},
1718        {Opt_noload, "norecovery"},
1719        {Opt_noload, "noload"},
1720        {Opt_removed, "nobh"},
1721        {Opt_removed, "bh"},
1722        {Opt_commit, "commit=%u"},
1723        {Opt_min_batch_time, "min_batch_time=%u"},
1724        {Opt_max_batch_time, "max_batch_time=%u"},
1725        {Opt_journal_dev, "journal_dev=%u"},
1726        {Opt_journal_path, "journal_path=%s"},
1727        {Opt_journal_checksum, "journal_checksum"},
1728        {Opt_nojournal_checksum, "nojournal_checksum"},
1729        {Opt_journal_async_commit, "journal_async_commit"},
1730        {Opt_abort, "abort"},
1731        {Opt_data_journal, "data=journal"},
1732        {Opt_data_ordered, "data=ordered"},
1733        {Opt_data_writeback, "data=writeback"},
1734        {Opt_data_err_abort, "data_err=abort"},
1735        {Opt_data_err_ignore, "data_err=ignore"},
1736        {Opt_offusrjquota, "usrjquota="},
1737        {Opt_usrjquota, "usrjquota=%s"},
1738        {Opt_offgrpjquota, "grpjquota="},
1739        {Opt_grpjquota, "grpjquota=%s"},
1740        {Opt_jqfmt_vfsold, "jqfmt=vfsold"},
1741        {Opt_jqfmt_vfsv0, "jqfmt=vfsv0"},
1742        {Opt_jqfmt_vfsv1, "jqfmt=vfsv1"},
1743        {Opt_grpquota, "grpquota"},
1744        {Opt_noquota, "noquota"},
1745        {Opt_quota, "quota"},
1746        {Opt_usrquota, "usrquota"},
1747        {Opt_prjquota, "prjquota"},
1748        {Opt_barrier, "barrier=%u"},
1749        {Opt_barrier, "barrier"},
1750        {Opt_nobarrier, "nobarrier"},
1751        {Opt_i_version, "i_version"},
1752        {Opt_dax, "dax"},
1753        {Opt_dax_always, "dax=always"},
1754        {Opt_dax_inode, "dax=inode"},
1755        {Opt_dax_never, "dax=never"},
1756        {Opt_stripe, "stripe=%u"},
1757        {Opt_delalloc, "delalloc"},
1758        {Opt_warn_on_error, "warn_on_error"},
1759        {Opt_nowarn_on_error, "nowarn_on_error"},
1760        {Opt_lazytime, "lazytime"},
1761        {Opt_nolazytime, "nolazytime"},
1762        {Opt_debug_want_extra_isize, "debug_want_extra_isize=%u"},
1763        {Opt_nodelalloc, "nodelalloc"},
1764        {Opt_removed, "mblk_io_submit"},
1765        {Opt_removed, "nomblk_io_submit"},
1766        {Opt_block_validity, "block_validity"},
1767        {Opt_noblock_validity, "noblock_validity"},
1768        {Opt_inode_readahead_blks, "inode_readahead_blks=%u"},
1769        {Opt_journal_ioprio, "journal_ioprio=%u"},
1770        {Opt_auto_da_alloc, "auto_da_alloc=%u"},
1771        {Opt_auto_da_alloc, "auto_da_alloc"},
1772        {Opt_noauto_da_alloc, "noauto_da_alloc"},
1773        {Opt_dioread_nolock, "dioread_nolock"},
1774        {Opt_dioread_lock, "nodioread_nolock"},
1775        {Opt_dioread_lock, "dioread_lock"},
1776        {Opt_discard, "discard"},
1777        {Opt_nodiscard, "nodiscard"},
1778        {Opt_init_itable, "init_itable=%u"},
1779        {Opt_init_itable, "init_itable"},
1780        {Opt_noinit_itable, "noinit_itable"},
1781#ifdef CONFIG_EXT4_DEBUG
1782        {Opt_fc_debug_force, "fc_debug_force"},
1783        {Opt_fc_debug_max_replay, "fc_debug_max_replay=%u"},
1784#endif
1785        {Opt_max_dir_size_kb, "max_dir_size_kb=%u"},
1786        {Opt_test_dummy_encryption, "test_dummy_encryption=%s"},
1787        {Opt_test_dummy_encryption, "test_dummy_encryption"},
1788        {Opt_inlinecrypt, "inlinecrypt"},
1789        {Opt_nombcache, "nombcache"},
1790        {Opt_nombcache, "no_mbcache"},  /* for backward compatibility */
1791        {Opt_prefetch_block_bitmaps, "prefetch_block_bitmaps"},
1792        {Opt_removed, "check=none"},    /* mount option from ext2/3 */
1793        {Opt_removed, "nocheck"},       /* mount option from ext2/3 */
1794        {Opt_removed, "reservation"},   /* mount option from ext2/3 */
1795        {Opt_removed, "noreservation"}, /* mount option from ext2/3 */
1796        {Opt_removed, "journal=%u"},    /* mount option from ext2/3 */
1797        {Opt_err, NULL},
1798};
1799
1800static ext4_fsblk_t get_sb_block(void **data)
1801{
1802        ext4_fsblk_t    sb_block;
1803        char            *options = (char *) *data;
1804
1805        if (!options || strncmp(options, "sb=", 3) != 0)
1806                return 1;       /* Default location */
1807
1808        options += 3;
1809        /* TODO: use simple_strtoll with >32bit ext4 */
1810        sb_block = simple_strtoul(options, &options, 0);
1811        if (*options && *options != ',') {
1812                printk(KERN_ERR "EXT4-fs: Invalid sb specification: %s\n",
1813                       (char *) *data);
1814                return 1;
1815        }
1816        if (*options == ',')
1817                options++;
1818        *data = (void *) options;
1819
1820        return sb_block;
1821}
1822
1823#define DEFAULT_JOURNAL_IOPRIO (IOPRIO_PRIO_VALUE(IOPRIO_CLASS_BE, 3))
1824static const char deprecated_msg[] =
1825        "Mount option \"%s\" will be removed by %s\n"
1826        "Contact linux-ext4@vger.kernel.org if you think we should keep it.\n";
1827
1828#ifdef CONFIG_QUOTA
1829static int set_qf_name(struct super_block *sb, int qtype, substring_t *args)
1830{
1831        struct ext4_sb_info *sbi = EXT4_SB(sb);
1832        char *qname, *old_qname = get_qf_name(sb, sbi, qtype);
1833        int ret = -1;
1834
1835        if (sb_any_quota_loaded(sb) && !old_qname) {
1836                ext4_msg(sb, KERN_ERR,
1837                        "Cannot change journaled "
1838                        "quota options when quota turned on");
1839                return -1;
1840        }
1841        if (ext4_has_feature_quota(sb)) {
1842                ext4_msg(sb, KERN_INFO, "Journaled quota options "
1843                         "ignored when QUOTA feature is enabled");
1844                return 1;
1845        }
1846        qname = match_strdup(args);
1847        if (!qname) {
1848                ext4_msg(sb, KERN_ERR,
1849                        "Not enough memory for storing quotafile name");
1850                return -1;
1851        }
1852        if (old_qname) {
1853                if (strcmp(old_qname, qname) == 0)
1854                        ret = 1;
1855                else
1856                        ext4_msg(sb, KERN_ERR,
1857                                 "%s quota file already specified",
1858                                 QTYPE2NAME(qtype));
1859                goto errout;
1860        }
1861        if (strchr(qname, '/')) {
1862                ext4_msg(sb, KERN_ERR,
1863                        "quotafile must be on filesystem root");
1864                goto errout;
1865        }
1866        rcu_assign_pointer(sbi->s_qf_names[qtype], qname);
1867        set_opt(sb, QUOTA);
1868        return 1;
1869errout:
1870        kfree(qname);
1871        return ret;
1872}
1873
1874static int clear_qf_name(struct super_block *sb, int qtype)
1875{
1876
1877        struct ext4_sb_info *sbi = EXT4_SB(sb);
1878        char *old_qname = get_qf_name(sb, sbi, qtype);
1879
1880        if (sb_any_quota_loaded(sb) && old_qname) {
1881                ext4_msg(sb, KERN_ERR, "Cannot change journaled quota options"
1882                        " when quota turned on");
1883                return -1;
1884        }
1885        rcu_assign_pointer(sbi->s_qf_names[qtype], NULL);
1886        synchronize_rcu();
1887        kfree(old_qname);
1888        return 1;
1889}
1890#endif
1891
1892#define MOPT_SET        0x0001
1893#define MOPT_CLEAR      0x0002
1894#define MOPT_NOSUPPORT  0x0004
1895#define MOPT_EXPLICIT   0x0008
1896#define MOPT_CLEAR_ERR  0x0010
1897#define MOPT_GTE0       0x0020
1898#ifdef CONFIG_QUOTA
1899#define MOPT_Q          0
1900#define MOPT_QFMT       0x0040
1901#else
1902#define MOPT_Q          MOPT_NOSUPPORT
1903#define MOPT_QFMT       MOPT_NOSUPPORT
1904#endif
1905#define MOPT_DATAJ      0x0080
1906#define MOPT_NO_EXT2    0x0100
1907#define MOPT_NO_EXT3    0x0200
1908#define MOPT_EXT4_ONLY  (MOPT_NO_EXT2 | MOPT_NO_EXT3)
1909#define MOPT_STRING     0x0400
1910#define MOPT_SKIP       0x0800
1911#define MOPT_2          0x1000
1912
1913static const struct mount_opts {
1914        int     token;
1915        int     mount_opt;
1916        int     flags;
1917} ext4_mount_opts[] = {
1918        {Opt_minix_df, EXT4_MOUNT_MINIX_DF, MOPT_SET},
1919        {Opt_bsd_df, EXT4_MOUNT_MINIX_DF, MOPT_CLEAR},
1920        {Opt_grpid, EXT4_MOUNT_GRPID, MOPT_SET},
1921        {Opt_nogrpid, EXT4_MOUNT_GRPID, MOPT_CLEAR},
1922        {Opt_block_validity, EXT4_MOUNT_BLOCK_VALIDITY, MOPT_SET},
1923        {Opt_noblock_validity, EXT4_MOUNT_BLOCK_VALIDITY, MOPT_CLEAR},
1924        {Opt_dioread_nolock, EXT4_MOUNT_DIOREAD_NOLOCK,
1925         MOPT_EXT4_ONLY | MOPT_SET},
1926        {Opt_dioread_lock, EXT4_MOUNT_DIOREAD_NOLOCK,
1927         MOPT_EXT4_ONLY | MOPT_CLEAR},
1928        {Opt_discard, EXT4_MOUNT_DISCARD, MOPT_SET},
1929        {Opt_nodiscard, EXT4_MOUNT_DISCARD, MOPT_CLEAR},
1930        {Opt_delalloc, EXT4_MOUNT_DELALLOC,
1931         MOPT_EXT4_ONLY | MOPT_SET | MOPT_EXPLICIT},
1932        {Opt_nodelalloc, EXT4_MOUNT_DELALLOC,
1933         MOPT_EXT4_ONLY | MOPT_CLEAR},
1934        {Opt_warn_on_error, EXT4_MOUNT_WARN_ON_ERROR, MOPT_SET},
1935        {Opt_nowarn_on_error, EXT4_MOUNT_WARN_ON_ERROR, MOPT_CLEAR},
1936        {Opt_nojournal_checksum, EXT4_MOUNT_JOURNAL_CHECKSUM,
1937         MOPT_EXT4_ONLY | MOPT_CLEAR},
1938        {Opt_journal_checksum, EXT4_MOUNT_JOURNAL_CHECKSUM,
1939         MOPT_EXT4_ONLY | MOPT_SET | MOPT_EXPLICIT},
1940        {Opt_journal_async_commit, (EXT4_MOUNT_JOURNAL_ASYNC_COMMIT |
1941                                    EXT4_MOUNT_JOURNAL_CHECKSUM),
1942         MOPT_EXT4_ONLY | MOPT_SET | MOPT_EXPLICIT},
1943        {Opt_noload, EXT4_MOUNT_NOLOAD, MOPT_NO_EXT2 | MOPT_SET},
1944        {Opt_err_panic, EXT4_MOUNT_ERRORS_PANIC, MOPT_SET | MOPT_CLEAR_ERR},
1945        {Opt_err_ro, EXT4_MOUNT_ERRORS_RO, MOPT_SET | MOPT_CLEAR_ERR},
1946        {Opt_err_cont, EXT4_MOUNT_ERRORS_CONT, MOPT_SET | MOPT_CLEAR_ERR},
1947        {Opt_data_err_abort, EXT4_MOUNT_DATA_ERR_ABORT,
1948         MOPT_NO_EXT2},
1949        {Opt_data_err_ignore, EXT4_MOUNT_DATA_ERR_ABORT,
1950         MOPT_NO_EXT2},
1951        {Opt_barrier, EXT4_MOUNT_BARRIER, MOPT_SET},
1952        {Opt_nobarrier, EXT4_MOUNT_BARRIER, MOPT_CLEAR},
1953        {Opt_noauto_da_alloc, EXT4_MOUNT_NO_AUTO_DA_ALLOC, MOPT_SET},
1954        {Opt_auto_da_alloc, EXT4_MOUNT_NO_AUTO_DA_ALLOC, MOPT_CLEAR},
1955        {Opt_noinit_itable, EXT4_MOUNT_INIT_INODE_TABLE, MOPT_CLEAR},
1956        {Opt_commit, 0, MOPT_GTE0},
1957        {Opt_max_batch_time, 0, MOPT_GTE0},
1958        {Opt_min_batch_time, 0, MOPT_GTE0},
1959        {Opt_inode_readahead_blks, 0, MOPT_GTE0},
1960        {Opt_init_itable, 0, MOPT_GTE0},
1961        {Opt_dax, EXT4_MOUNT_DAX_ALWAYS, MOPT_SET | MOPT_SKIP},
1962        {Opt_dax_always, EXT4_MOUNT_DAX_ALWAYS,
1963                MOPT_EXT4_ONLY | MOPT_SET | MOPT_SKIP},
1964        {Opt_dax_inode, EXT4_MOUNT2_DAX_INODE,
1965                MOPT_EXT4_ONLY | MOPT_SET | MOPT_SKIP},
1966        {Opt_dax_never, EXT4_MOUNT2_DAX_NEVER,
1967                MOPT_EXT4_ONLY | MOPT_SET | MOPT_SKIP},
1968        {Opt_stripe, 0, MOPT_GTE0},
1969        {Opt_resuid, 0, MOPT_GTE0},
1970        {Opt_resgid, 0, MOPT_GTE0},
1971        {Opt_journal_dev, 0, MOPT_NO_EXT2 | MOPT_GTE0},
1972        {Opt_journal_path, 0, MOPT_NO_EXT2 | MOPT_STRING},
1973        {Opt_journal_ioprio, 0, MOPT_NO_EXT2 | MOPT_GTE0},
1974        {Opt_data_journal, EXT4_MOUNT_JOURNAL_DATA, MOPT_NO_EXT2 | MOPT_DATAJ},
1975        {Opt_data_ordered, EXT4_MOUNT_ORDERED_DATA, MOPT_NO_EXT2 | MOPT_DATAJ},
1976        {Opt_data_writeback, EXT4_MOUNT_WRITEBACK_DATA,
1977         MOPT_NO_EXT2 | MOPT_DATAJ},
1978        {Opt_user_xattr, EXT4_MOUNT_XATTR_USER, MOPT_SET},
1979        {Opt_nouser_xattr, EXT4_MOUNT_XATTR_USER, MOPT_CLEAR},
1980#ifdef CONFIG_EXT4_FS_POSIX_ACL
1981        {Opt_acl, EXT4_MOUNT_POSIX_ACL, MOPT_SET},
1982        {Opt_noacl, EXT4_MOUNT_POSIX_ACL, MOPT_CLEAR},
1983#else
1984        {Opt_acl, 0, MOPT_NOSUPPORT},
1985        {Opt_noacl, 0, MOPT_NOSUPPORT},
1986#endif
1987        {Opt_nouid32, EXT4_MOUNT_NO_UID32, MOPT_SET},
1988        {Opt_debug, EXT4_MOUNT_DEBUG, MOPT_SET},
1989        {Opt_debug_want_extra_isize, 0, MOPT_GTE0},
1990        {Opt_quota, EXT4_MOUNT_QUOTA | EXT4_MOUNT_USRQUOTA, MOPT_SET | MOPT_Q},
1991        {Opt_usrquota, EXT4_MOUNT_QUOTA | EXT4_MOUNT_USRQUOTA,
1992                                                        MOPT_SET | MOPT_Q},
1993        {Opt_grpquota, EXT4_MOUNT_QUOTA | EXT4_MOUNT_GRPQUOTA,
1994                                                        MOPT_SET | MOPT_Q},
1995        {Opt_prjquota, EXT4_MOUNT_QUOTA | EXT4_MOUNT_PRJQUOTA,
1996                                                        MOPT_SET | MOPT_Q},
1997        {Opt_noquota, (EXT4_MOUNT_QUOTA | EXT4_MOUNT_USRQUOTA |
1998                       EXT4_MOUNT_GRPQUOTA | EXT4_MOUNT_PRJQUOTA),
1999                                                        MOPT_CLEAR | MOPT_Q},
2000        {Opt_usrjquota, 0, MOPT_Q | MOPT_STRING},
2001        {Opt_grpjquota, 0, MOPT_Q | MOPT_STRING},
2002        {Opt_offusrjquota, 0, MOPT_Q},
2003        {Opt_offgrpjquota, 0, MOPT_Q},
2004        {Opt_jqfmt_vfsold, QFMT_VFS_OLD, MOPT_QFMT},
2005        {Opt_jqfmt_vfsv0, QFMT_VFS_V0, MOPT_QFMT},
2006        {Opt_jqfmt_vfsv1, QFMT_VFS_V1, MOPT_QFMT},
2007        {Opt_max_dir_size_kb, 0, MOPT_GTE0},
2008        {Opt_test_dummy_encryption, 0, MOPT_STRING},
2009        {Opt_nombcache, EXT4_MOUNT_NO_MBCACHE, MOPT_SET},
2010        {Opt_prefetch_block_bitmaps, EXT4_MOUNT_PREFETCH_BLOCK_BITMAPS,
2011         MOPT_SET},
2012#ifdef CONFIG_EXT4_DEBUG
2013        {Opt_fc_debug_force, EXT4_MOUNT2_JOURNAL_FAST_COMMIT,
2014         MOPT_SET | MOPT_2 | MOPT_EXT4_ONLY},
2015        {Opt_fc_debug_max_replay, 0, MOPT_GTE0},
2016#endif
2017        {Opt_err, 0, 0}
2018};
2019
2020#ifdef CONFIG_UNICODE
2021static const struct ext4_sb_encodings {
2022        __u16 magic;
2023        char *name;
2024        char *version;
2025} ext4_sb_encoding_map[] = {
2026        {EXT4_ENC_UTF8_12_1, "utf8", "12.1.0"},
2027};
2028
2029static int ext4_sb_read_encoding(const struct ext4_super_block *es,
2030                                 const struct ext4_sb_encodings **encoding,
2031                                 __u16 *flags)
2032{
2033        __u16 magic = le16_to_cpu(es->s_encoding);
2034        int i;
2035
2036        for (i = 0; i < ARRAY_SIZE(ext4_sb_encoding_map); i++)
2037                if (magic == ext4_sb_encoding_map[i].magic)
2038                        break;
2039
2040        if (i >= ARRAY_SIZE(ext4_sb_encoding_map))
2041                return -EINVAL;
2042
2043        *encoding = &ext4_sb_encoding_map[i];
2044        *flags = le16_to_cpu(es->s_encoding_flags);
2045
2046        return 0;
2047}
2048#endif
2049
2050static int ext4_set_test_dummy_encryption(struct super_block *sb,
2051                                          const char *opt,
2052                                          const substring_t *arg,
2053                                          bool is_remount)
2054{
2055#ifdef CONFIG_FS_ENCRYPTION
2056        struct ext4_sb_info *sbi = EXT4_SB(sb);
2057        int err;
2058
2059        /*
2060         * This mount option is just for testing, and it's not worthwhile to
2061         * implement the extra complexity (e.g. RCU protection) that would be
2062         * needed to allow it to be set or changed during remount.  We do allow
2063         * it to be specified during remount, but only if there is no change.
2064         */
2065        if (is_remount && !sbi->s_dummy_enc_policy.policy) {
2066                ext4_msg(sb, KERN_WARNING,
2067                         "Can't set test_dummy_encryption on remount");
2068                return -1;
2069        }
2070        err = fscrypt_set_test_dummy_encryption(sb, arg->from,
2071                                                &sbi->s_dummy_enc_policy);
2072        if (err) {
2073                if (err == -EEXIST)
2074                        ext4_msg(sb, KERN_WARNING,
2075                                 "Can't change test_dummy_encryption on remount");
2076                else if (err == -EINVAL)
2077                        ext4_msg(sb, KERN_WARNING,
2078                                 "Value of option \"%s\" is unrecognized", opt);
2079                else
2080                        ext4_msg(sb, KERN_WARNING,
2081                                 "Error processing option \"%s\" [%d]",
2082                                 opt, err);
2083                return -1;
2084        }
2085        ext4_msg(sb, KERN_WARNING, "Test dummy encryption mode enabled");
2086#else
2087        ext4_msg(sb, KERN_WARNING,
2088                 "Test dummy encryption mount option ignored");
2089#endif
2090        return 1;
2091}
2092
2093static int handle_mount_opt(struct super_block *sb, char *opt, int token,
2094                            substring_t *args, unsigned long *journal_devnum,
2095                            unsigned int *journal_ioprio, int is_remount)
2096{
2097        struct ext4_sb_info *sbi = EXT4_SB(sb);
2098        const struct mount_opts *m;
2099        kuid_t uid;
2100        kgid_t gid;
2101        int arg = 0;
2102
2103#ifdef CONFIG_QUOTA
2104        if (token == Opt_usrjquota)
2105                return set_qf_name(sb, USRQUOTA, &args[0]);
2106        else if (token == Opt_grpjquota)
2107                return set_qf_name(sb, GRPQUOTA, &args[0]);
2108        else if (token == Opt_offusrjquota)
2109                return clear_qf_name(sb, USRQUOTA);
2110        else if (token == Opt_offgrpjquota)
2111                return clear_qf_name(sb, GRPQUOTA);
2112#endif
2113        switch (token) {
2114        case Opt_noacl:
2115        case Opt_nouser_xattr:
2116                ext4_msg(sb, KERN_WARNING, deprecated_msg, opt, "3.5");
2117                break;
2118        case Opt_sb:
2119                return 1;       /* handled by get_sb_block() */
2120        case Opt_removed:
2121                ext4_msg(sb, KERN_WARNING, "Ignoring removed %s option", opt);
2122                return 1;
2123        case Opt_abort:
2124                ext4_set_mount_flag(sb, EXT4_MF_FS_ABORTED);
2125                return 1;
2126        case Opt_i_version:
2127                sb->s_flags |= SB_I_VERSION;
2128                return 1;
2129        case Opt_lazytime:
2130                sb->s_flags |= SB_LAZYTIME;
2131                return 1;
2132        case Opt_nolazytime:
2133                sb->s_flags &= ~SB_LAZYTIME;
2134                return 1;
2135        case Opt_inlinecrypt:
2136#ifdef CONFIG_FS_ENCRYPTION_INLINE_CRYPT
2137                sb->s_flags |= SB_INLINECRYPT;
2138#else
2139                ext4_msg(sb, KERN_ERR, "inline encryption not supported");
2140#endif
2141                return 1;
2142        }
2143
2144        for (m = ext4_mount_opts; m->token != Opt_err; m++)
2145                if (token == m->token)
2146                        break;
2147
2148        if (m->token == Opt_err) {
2149                ext4_msg(sb, KERN_ERR, "Unrecognized mount option \"%s\" "
2150                         "or missing value", opt);
2151                return -1;
2152        }
2153
2154        if ((m->flags & MOPT_NO_EXT2) && IS_EXT2_SB(sb)) {
2155                ext4_msg(sb, KERN_ERR,
2156                         "Mount option \"%s\" incompatible with ext2", opt);
2157                return -1;
2158        }
2159        if ((m->flags & MOPT_NO_EXT3) && IS_EXT3_SB(sb)) {
2160                ext4_msg(sb, KERN_ERR,
2161                         "Mount option \"%s\" incompatible with ext3", opt);
2162                return -1;
2163        }
2164
2165        if (args->from && !(m->flags & MOPT_STRING) && match_int(args, &arg))
2166                return -1;
2167        if (args->from && (m->flags & MOPT_GTE0) && (arg < 0))
2168                return -1;
2169        if (m->flags & MOPT_EXPLICIT) {
2170                if (m->mount_opt & EXT4_MOUNT_DELALLOC) {
2171                        set_opt2(sb, EXPLICIT_DELALLOC);
2172                } else if (m->mount_opt & EXT4_MOUNT_JOURNAL_CHECKSUM) {
2173                        set_opt2(sb, EXPLICIT_JOURNAL_CHECKSUM);
2174                } else
2175                        return -1;
2176        }
2177        if (m->flags & MOPT_CLEAR_ERR)
2178                clear_opt(sb, ERRORS_MASK);
2179        if (token == Opt_noquota && sb_any_quota_loaded(sb)) {
2180                ext4_msg(sb, KERN_ERR, "Cannot change quota "
2181                         "options when quota turned on");
2182                return -1;
2183        }
2184
2185        if (m->flags & MOPT_NOSUPPORT) {
2186                ext4_msg(sb, KERN_ERR, "%s option not supported", opt);
2187        } else if (token == Opt_commit) {
2188                if (arg == 0)
2189                        arg = JBD2_DEFAULT_MAX_COMMIT_AGE;
2190                else if (arg > INT_MAX / HZ) {
2191                        ext4_msg(sb, KERN_ERR,
2192                                 "Invalid commit interval %d, "
2193                                 "must be smaller than %d",
2194                                 arg, INT_MAX / HZ);
2195                        return -1;
2196                }
2197                sbi->s_commit_interval = HZ * arg;
2198        } else if (token == Opt_debug_want_extra_isize) {
2199                if ((arg & 1) ||
2200                    (arg < 4) ||
2201                    (arg > (sbi->s_inode_size - EXT4_GOOD_OLD_INODE_SIZE))) {
2202                        ext4_msg(sb, KERN_ERR,
2203                                 "Invalid want_extra_isize %d", arg);
2204                        return -1;
2205                }
2206                sbi->s_want_extra_isize = arg;
2207        } else if (token == Opt_max_batch_time) {
2208                sbi->s_max_batch_time = arg;
2209        } else if (token == Opt_min_batch_time) {
2210                sbi->s_min_batch_time = arg;
2211        } else if (token == Opt_inode_readahead_blks) {
2212                if (arg && (arg > (1 << 30) || !is_power_of_2(arg))) {
2213                        ext4_msg(sb, KERN_ERR,
2214                                 "EXT4-fs: inode_readahead_blks must be "
2215                                 "0 or a power of 2 smaller than 2^31");
2216                        return -1;
2217                }
2218                sbi->s_inode_readahead_blks = arg;
2219        } else if (token == Opt_init_itable) {
2220                set_opt(sb, INIT_INODE_TABLE);
2221                if (!args->from)
2222                        arg = EXT4_DEF_LI_WAIT_MULT;
2223                sbi->s_li_wait_mult = arg;
2224        } else if (token == Opt_max_dir_size_kb) {
2225                sbi->s_max_dir_size_kb = arg;
2226#ifdef CONFIG_EXT4_DEBUG
2227        } else if (token == Opt_fc_debug_max_replay) {
2228                sbi->s_fc_debug_max_replay = arg;
2229#endif
2230        } else if (token == Opt_stripe) {
2231                sbi->s_stripe = arg;
2232        } else if (token == Opt_resuid) {
2233                uid = make_kuid(current_user_ns(), arg);
2234                if (!uid_valid(uid)) {
2235                        ext4_msg(sb, KERN_ERR, "Invalid uid value %d", arg);
2236                        return -1;
2237                }
2238                sbi->s_resuid = uid;
2239        } else if (token == Opt_resgid) {
2240                gid = make_kgid(current_user_ns(), arg);
2241                if (!gid_valid(gid)) {
2242                        ext4_msg(sb, KERN_ERR, "Invalid gid value %d", arg);
2243                        return -1;
2244                }
2245                sbi->s_resgid = gid;
2246        } else if (token == Opt_journal_dev) {
2247                if (is_remount) {
2248                        ext4_msg(sb, KERN_ERR,
2249                                 "Cannot specify journal on remount");
2250                        return -1;
2251                }
2252                *journal_devnum = arg;
2253        } else if (token == Opt_journal_path) {
2254                char *journal_path;
2255                struct inode *journal_inode;
2256                struct path path;
2257                int error;
2258
2259                if (is_remount) {
2260                        ext4_msg(sb, KERN_ERR,
2261                                 "Cannot specify journal on remount");
2262                        return -1;
2263                }
2264                journal_path = match_strdup(&args[0]);
2265                if (!journal_path) {
2266                        ext4_msg(sb, KERN_ERR, "error: could not dup "
2267                                "journal device string");
2268                        return -1;
2269                }
2270
2271                error = kern_path(journal_path, LOOKUP_FOLLOW, &path);
2272                if (error) {
2273                        ext4_msg(sb, KERN_ERR, "error: could not find "
2274                                "journal device path: error %d", error);
2275                        kfree(journal_path);
2276                        return -1;
2277                }
2278
2279                journal_inode = d_inode(path.dentry);
2280                if (!S_ISBLK(journal_inode->i_mode)) {
2281                        ext4_msg(sb, KERN_ERR, "error: journal path %s "
2282                                "is not a block device", journal_path);
2283                        path_put(&path);
2284                        kfree(journal_path);
2285                        return -1;
2286                }
2287
2288                *journal_devnum = new_encode_dev(journal_inode->i_rdev);
2289                path_put(&path);
2290                kfree(journal_path);
2291        } else if (token == Opt_journal_ioprio) {
2292                if (arg > 7) {
2293                        ext4_msg(sb, KERN_ERR, "Invalid journal IO priority"
2294                                 " (must be 0-7)");
2295                        return -1;
2296                }
2297                *journal_ioprio =
2298                        IOPRIO_PRIO_VALUE(IOPRIO_CLASS_BE, arg);
2299        } else if (token == Opt_test_dummy_encryption) {
2300                return ext4_set_test_dummy_encryption(sb, opt, &args[0],
2301                                                      is_remount);
2302        } else if (m->flags & MOPT_DATAJ) {
2303                if (is_remount) {
2304                        if (!sbi->s_journal)
2305                                ext4_msg(sb, KERN_WARNING, "Remounting file system with no journal so ignoring journalled data option");
2306                        else if (test_opt(sb, DATA_FLAGS) != m->mount_opt) {
2307                                ext4_msg(sb, KERN_ERR,
2308                                         "Cannot change data mode on remount");
2309                                return -1;
2310                        }
2311                } else {
2312                        clear_opt(sb, DATA_FLAGS);
2313                        sbi->s_mount_opt |= m->mount_opt;
2314                }
2315#ifdef CONFIG_QUOTA
2316        } else if (m->flags & MOPT_QFMT) {
2317                if (sb_any_quota_loaded(sb) &&
2318                    sbi->s_jquota_fmt != m->mount_opt) {
2319                        ext4_msg(sb, KERN_ERR, "Cannot change journaled "
2320                                 "quota options when quota turned on");
2321                        return -1;
2322                }
2323                if (ext4_has_feature_quota(sb)) {
2324                        ext4_msg(sb, KERN_INFO,
2325                                 "Quota format mount options ignored "
2326                                 "when QUOTA feature is enabled");
2327                        return 1;
2328                }
2329                sbi->s_jquota_fmt = m->mount_opt;
2330#endif
2331        } else if (token == Opt_dax || token == Opt_dax_always ||
2332                   token == Opt_dax_inode || token == Opt_dax_never) {
2333#ifdef CONFIG_FS_DAX
2334                switch (token) {
2335                case Opt_dax:
2336                case Opt_dax_always:
2337                        if (is_remount &&
2338                            (!(sbi->s_mount_opt & EXT4_MOUNT_DAX_ALWAYS) ||
2339                             (sbi->s_mount_opt2 & EXT4_MOUNT2_DAX_NEVER))) {
2340                        fail_dax_change_remount:
2341                                ext4_msg(sb, KERN_ERR, "can't change "
2342                                         "dax mount option while remounting");
2343                                return -1;
2344                        }
2345                        if (is_remount &&
2346                            (test_opt(sb, DATA_FLAGS) ==
2347                             EXT4_MOUNT_JOURNAL_DATA)) {
2348                                    ext4_msg(sb, KERN_ERR, "can't mount with "
2349                                             "both data=journal and dax");
2350                                    return -1;
2351                        }
2352                        ext4_msg(sb, KERN_WARNING,
2353                                "DAX enabled. Warning: EXPERIMENTAL, use at your own risk");
2354                        sbi->s_mount_opt |= EXT4_MOUNT_DAX_ALWAYS;
2355                        sbi->s_mount_opt2 &= ~EXT4_MOUNT2_DAX_NEVER;
2356                        break;
2357                case Opt_dax_never:
2358                        if (is_remount &&
2359                            (!(sbi->s_mount_opt2 & EXT4_MOUNT2_DAX_NEVER) ||
2360                             (sbi->s_mount_opt & EXT4_MOUNT_DAX_ALWAYS)))
2361                                goto fail_dax_change_remount;
2362                        sbi->s_mount_opt2 |= EXT4_MOUNT2_DAX_NEVER;
2363                        sbi->s_mount_opt &= ~EXT4_MOUNT_DAX_ALWAYS;
2364                        break;
2365                case Opt_dax_inode:
2366                        if (is_remount &&
2367                            ((sbi->s_mount_opt & EXT4_MOUNT_DAX_ALWAYS) ||
2368                             (sbi->s_mount_opt2 & EXT4_MOUNT2_DAX_NEVER) ||
2369                             !(sbi->s_mount_opt2 & EXT4_MOUNT2_DAX_INODE)))
2370                                goto fail_dax_change_remount;
2371                        sbi->s_mount_opt &= ~EXT4_MOUNT_DAX_ALWAYS;
2372                        sbi->s_mount_opt2 &= ~EXT4_MOUNT2_DAX_NEVER;
2373                        /* Strictly for printing options */
2374                        sbi->s_mount_opt2 |= EXT4_MOUNT2_DAX_INODE;
2375                        break;
2376                }
2377#else
2378                ext4_msg(sb, KERN_INFO, "dax option not supported");
2379                sbi->s_mount_opt2 |= EXT4_MOUNT2_DAX_NEVER;
2380                sbi->s_mount_opt &= ~EXT4_MOUNT_DAX_ALWAYS;
2381                return -1;
2382#endif
2383        } else if (token == Opt_data_err_abort) {
2384                sbi->s_mount_opt |= m->mount_opt;
2385        } else if (token == Opt_data_err_ignore) {
2386                sbi->s_mount_opt &= ~m->mount_opt;
2387        } else {
2388                if (!args->from)
2389                        arg = 1;
2390                if (m->flags & MOPT_CLEAR)
2391                        arg = !arg;
2392                else if (unlikely(!(m->flags & MOPT_SET))) {
2393                        ext4_msg(sb, KERN_WARNING,
2394                                 "buggy handling of option %s", opt);
2395                        WARN_ON(1);
2396                        return -1;
2397                }
2398                if (m->flags & MOPT_2) {
2399                        if (arg != 0)
2400                                sbi->s_mount_opt2 |= m->mount_opt;
2401                        else
2402                                sbi->s_mount_opt2 &= ~m->mount_opt;
2403                } else {
2404                        if (arg != 0)
2405                                sbi->s_mount_opt |= m->mount_opt;
2406                        else
2407                                sbi->s_mount_opt &= ~m->mount_opt;
2408                }
2409        }
2410        return 1;
2411}
2412
2413static int parse_options(char *options, struct super_block *sb,
2414                         unsigned long *journal_devnum,
2415                         unsigned int *journal_ioprio,
2416                         int is_remount)
2417{
2418        struct ext4_sb_info __maybe_unused *sbi = EXT4_SB(sb);
2419        char *p, __maybe_unused *usr_qf_name, __maybe_unused *grp_qf_name;
2420        substring_t args[MAX_OPT_ARGS];
2421        int token;
2422
2423        if (!options)
2424                return 1;
2425
2426        while ((p = strsep(&options, ",")) != NULL) {
2427                if (!*p)
2428                        continue;
2429                /*
2430                 * Initialize args struct so we know whether arg was
2431                 * found; some options take optional arguments.
2432                 */
2433                args[0].to = args[0].from = NULL;
2434                token = match_token(p, tokens, args);
2435                if (handle_mount_opt(sb, p, token, args, journal_devnum,
2436                                     journal_ioprio, is_remount) < 0)
2437                        return 0;
2438        }
2439#ifdef CONFIG_QUOTA
2440        /*
2441         * We do the test below only for project quotas. 'usrquota' and
2442         * 'grpquota' mount options are allowed even without quota feature
2443         * to support legacy quotas in quota files.
2444         */
2445        if (test_opt(sb, PRJQUOTA) && !ext4_has_feature_project(sb)) {
2446                ext4_msg(sb, KERN_ERR, "Project quota feature not enabled. "
2447                         "Cannot enable project quota enforcement.");
2448                return 0;
2449        }
2450        usr_qf_name = get_qf_name(sb, sbi, USRQUOTA);
2451        grp_qf_name = get_qf_name(sb, sbi, GRPQUOTA);
2452        if (usr_qf_name || grp_qf_name) {
2453                if (test_opt(sb, USRQUOTA) && usr_qf_name)
2454                        clear_opt(sb, USRQUOTA);
2455
2456                if (test_opt(sb, GRPQUOTA) && grp_qf_name)
2457                        clear_opt(sb, GRPQUOTA);
2458
2459                if (test_opt(sb, GRPQUOTA) || test_opt(sb, USRQUOTA)) {
2460                        ext4_msg(sb, KERN_ERR, "old and new quota "
2461                                        "format mixing");
2462                        return 0;
2463                }
2464
2465                if (!sbi->s_jquota_fmt) {
2466                        ext4_msg(sb, KERN_ERR, "journaled quota format "
2467                                        "not specified");
2468                        return 0;
2469                }
2470        }
2471#endif
2472        if (test_opt(sb, DIOREAD_NOLOCK)) {
2473                int blocksize =
2474                        BLOCK_SIZE << le32_to_cpu(sbi->s_es->s_log_block_size);
2475                if (blocksize < PAGE_SIZE)
2476                        ext4_msg(sb, KERN_WARNING, "Warning: mounting with an "
2477                                 "experimental mount option 'dioread_nolock' "
2478                                 "for blocksize < PAGE_SIZE");
2479        }
2480        return 1;
2481}
2482
2483static inline void ext4_show_quota_options(struct seq_file *seq,
2484                                           struct super_block *sb)
2485{
2486#if defined(CONFIG_QUOTA)
2487        struct ext4_sb_info *sbi = EXT4_SB(sb);
2488        char *usr_qf_name, *grp_qf_name;
2489
2490        if (sbi->s_jquota_fmt) {
2491                char *fmtname = "";
2492
2493                switch (sbi->s_jquota_fmt) {
2494                case QFMT_VFS_OLD:
2495                        fmtname = "vfsold";
2496                        break;
2497                case QFMT_VFS_V0:
2498                        fmtname = "vfsv0";
2499                        break;
2500                case QFMT_VFS_V1:
2501                        fmtname = "vfsv1";
2502                        break;
2503                }
2504                seq_printf(seq, ",jqfmt=%s", fmtname);
2505        }
2506
2507        rcu_read_lock();
2508        usr_qf_name = rcu_dereference(sbi->s_qf_names[USRQUOTA]);
2509        grp_qf_name = rcu_dereference(sbi->s_qf_names[GRPQUOTA]);
2510        if (usr_qf_name)
2511                seq_show_option(seq, "usrjquota", usr_qf_name);
2512        if (grp_qf_name)
2513                seq_show_option(seq, "grpjquota", grp_qf_name);
2514        rcu_read_unlock();
2515#endif
2516}
2517
2518static const char *token2str(int token)
2519{
2520        const struct match_token *t;
2521
2522        for (t = tokens; t->token != Opt_err; t++)
2523                if (t->token == token && !strchr(t->pattern, '='))
2524                        break;
2525        return t->pattern;
2526}
2527
2528/*
2529 * Show an option if
2530 *  - it's set to a non-default value OR
2531 *  - if the per-sb default is different from the global default
2532 */
2533static int _ext4_show_options(struct seq_file *seq, struct super_block *sb,
2534                              int nodefs)
2535{
2536        struct ext4_sb_info *sbi = EXT4_SB(sb);
2537        struct ext4_super_block *es = sbi->s_es;
2538        int def_errors, def_mount_opt = sbi->s_def_mount_opt;
2539        const struct mount_opts *m;
2540        char sep = nodefs ? '\n' : ',';
2541
2542#define SEQ_OPTS_PUTS(str) seq_printf(seq, "%c" str, sep)
2543#define SEQ_OPTS_PRINT(str, arg) seq_printf(seq, "%c" str, sep, arg)
2544
2545        if (sbi->s_sb_block != 1)
2546                SEQ_OPTS_PRINT("sb=%llu", sbi->s_sb_block);
2547
2548        for (m = ext4_mount_opts; m->token != Opt_err; m++) {
2549                int want_set = m->flags & MOPT_SET;
2550                if (((m->flags & (MOPT_SET|MOPT_CLEAR)) == 0) ||
2551                    (m->flags & MOPT_CLEAR_ERR) || m->flags & MOPT_SKIP)
2552                        continue;
2553                if (!nodefs && !(m->mount_opt & (sbi->s_mount_opt ^ def_mount_opt)))
2554                        continue; /* skip if same as the default */
2555                if ((want_set &&
2556                     (sbi->s_mount_opt & m->mount_opt) != m->mount_opt) ||
2557                    (!want_set && (sbi->s_mount_opt & m->mount_opt)))
2558                        continue; /* select Opt_noFoo vs Opt_Foo */
2559                SEQ_OPTS_PRINT("%s", token2str(m->token));
2560        }
2561
2562        if (nodefs || !uid_eq(sbi->s_resuid, make_kuid(&init_user_ns, EXT4_DEF_RESUID)) ||
2563            le16_to_cpu(es->s_def_resuid) != EXT4_DEF_RESUID)
2564                SEQ_OPTS_PRINT("resuid=%u",
2565                                from_kuid_munged(&init_user_ns, sbi->s_resuid));
2566        if (nodefs || !gid_eq(sbi->s_resgid, make_kgid(&init_user_ns, EXT4_DEF_RESGID)) ||
2567            le16_to_cpu(es->s_def_resgid) != EXT4_DEF_RESGID)
2568                SEQ_OPTS_PRINT("resgid=%u",
2569                                from_kgid_munged(&init_user_ns, sbi->s_resgid));
2570        def_errors = nodefs ? -1 : le16_to_cpu(es->s_errors);
2571        if (test_opt(sb, ERRORS_RO) && def_errors != EXT4_ERRORS_RO)
2572                SEQ_OPTS_PUTS("errors=remount-ro");
2573        if (test_opt(sb, ERRORS_CONT) && def_errors != EXT4_ERRORS_CONTINUE)
2574                SEQ_OPTS_PUTS("errors=continue");
2575        if (test_opt(sb, ERRORS_PANIC) && def_errors != EXT4_ERRORS_PANIC)
2576                SEQ_OPTS_PUTS("errors=panic");
2577        if (nodefs || sbi->s_commit_interval != JBD2_DEFAULT_MAX_COMMIT_AGE*HZ)
2578                SEQ_OPTS_PRINT("commit=%lu", sbi->s_commit_interval / HZ);
2579        if (nodefs || sbi->s_min_batch_time != EXT4_DEF_MIN_BATCH_TIME)
2580                SEQ_OPTS_PRINT("min_batch_time=%u", sbi->s_min_batch_time);
2581        if (nodefs || sbi->s_max_batch_time != EXT4_DEF_MAX_BATCH_TIME)
2582                SEQ_OPTS_PRINT("max_batch_time=%u", sbi->s_max_batch_time);
2583        if (sb->s_flags & SB_I_VERSION)
2584                SEQ_OPTS_PUTS("i_version");
2585        if (nodefs || sbi->s_stripe)
2586                SEQ_OPTS_PRINT("stripe=%lu", sbi->s_stripe);
2587        if (nodefs || EXT4_MOUNT_DATA_FLAGS &
2588                        (sbi->s_mount_opt ^ def_mount_opt)) {
2589                if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA)
2590                        SEQ_OPTS_PUTS("data=journal");
2591                else if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_ORDERED_DATA)
2592                        SEQ_OPTS_PUTS("data=ordered");
2593                else if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_WRITEBACK_DATA)
2594                        SEQ_OPTS_PUTS("data=writeback");
2595        }
2596        if (nodefs ||
2597            sbi->s_inode_readahead_blks != EXT4_DEF_INODE_READAHEAD_BLKS)
2598                SEQ_OPTS_PRINT("inode_readahead_blks=%u",
2599                               sbi->s_inode_readahead_blks);
2600
2601        if (test_opt(sb, INIT_INODE_TABLE) && (nodefs ||
2602                       (sbi->s_li_wait_mult != EXT4_DEF_LI_WAIT_MULT)))
2603                SEQ_OPTS_PRINT("init_itable=%u", sbi->s_li_wait_mult);
2604        if (nodefs || sbi->s_max_dir_size_kb)
2605                SEQ_OPTS_PRINT("max_dir_size_kb=%u", sbi->s_max_dir_size_kb);
2606        if (test_opt(sb, DATA_ERR_ABORT))
2607                SEQ_OPTS_PUTS("data_err=abort");
2608
2609        fscrypt_show_test_dummy_encryption(seq, sep, sb);
2610
2611        if (sb->s_flags & SB_INLINECRYPT)
2612                SEQ_OPTS_PUTS("inlinecrypt");
2613
2614        if (test_opt(sb, DAX_ALWAYS)) {
2615                if (IS_EXT2_SB(sb))
2616                        SEQ_OPTS_PUTS("dax");
2617                else
2618                        SEQ_OPTS_PUTS("dax=always");
2619        } else if (test_opt2(sb, DAX_NEVER)) {
2620                SEQ_OPTS_PUTS("dax=never");
2621        } else if (test_opt2(sb, DAX_INODE)) {
2622                SEQ_OPTS_PUTS("dax=inode");
2623        }
2624        ext4_show_quota_options(seq, sb);
2625        return 0;
2626}
2627
2628static int ext4_show_options(struct seq_file *seq, struct dentry *root)
2629{
2630        return _ext4_show_options(seq, root->d_sb, 0);
2631}
2632
2633int ext4_seq_options_show(struct seq_file *seq, void *offset)
2634{
2635        struct super_block *sb = seq->private;
2636        int rc;
2637
2638        seq_puts(seq, sb_rdonly(sb) ? "ro" : "rw");
2639        rc = _ext4_show_options(seq, sb, 1);
2640        seq_puts(seq, "\n");
2641        return rc;
2642}
2643
2644static int ext4_setup_super(struct super_block *sb, struct ext4_super_block *es,
2645                            int read_only)
2646{
2647        struct ext4_sb_info *sbi = EXT4_SB(sb);
2648        int err = 0;
2649
2650        if (le32_to_cpu(es->s_rev_level) > EXT4_MAX_SUPP_REV) {
2651                ext4_msg(sb, KERN_ERR, "revision level too high, "
2652                         "forcing read-only mode");
2653                err = -EROFS;
2654                goto done;
2655        }
2656        if (read_only)
2657                goto done;
2658        if (!(sbi->s_mount_state & EXT4_VALID_FS))
2659                ext4_msg(sb, KERN_WARNING, "warning: mounting unchecked fs, "
2660                         "running e2fsck is recommended");
2661        else if (sbi->s_mount_state & EXT4_ERROR_FS)
2662                ext4_msg(sb, KERN_WARNING,
2663                         "warning: mounting fs with errors, "
2664                         "running e2fsck is recommended");
2665        else if ((__s16) le16_to_cpu(es->s_max_mnt_count) > 0 &&
2666                 le16_to_cpu(es->s_mnt_count) >=
2667                 (unsigned short) (__s16) le16_to_cpu(es->s_max_mnt_count))
2668                ext4_msg(sb, KERN_WARNING,
2669                         "warning: maximal mount count reached, "
2670                         "running e2fsck is recommended");
2671        else if (le32_to_cpu(es->s_checkinterval) &&
2672                 (ext4_get_tstamp(es, s_lastcheck) +
2673                  le32_to_cpu(es->s_checkinterval) <= ktime_get_real_seconds()))
2674                ext4_msg(sb, KERN_WARNING,
2675                         "warning: checktime reached, "
2676                         "running e2fsck is recommended");
2677        if (!sbi->s_journal)
2678                es->s_state &= cpu_to_le16(~EXT4_VALID_FS);
2679        if (!(__s16) le16_to_cpu(es->s_max_mnt_count))
2680                es->s_max_mnt_count = cpu_to_le16(EXT4_DFL_MAX_MNT_COUNT);
2681        le16_add_cpu(&es->s_mnt_count, 1);
2682        ext4_update_tstamp(es, s_mtime);
2683        if (sbi->s_journal)
2684                ext4_set_feature_journal_needs_recovery(sb);
2685
2686        err = ext4_commit_super(sb);
2687done:
2688        if (test_opt(sb, DEBUG))
2689                printk(KERN_INFO "[EXT4 FS bs=%lu, gc=%u, "
2690                                "bpg=%lu, ipg=%lu, mo=%04x, mo2=%04x]\n",
2691                        sb->s_blocksize,
2692                        sbi->s_groups_count,
2693                        EXT4_BLOCKS_PER_GROUP(sb),
2694                        EXT4_INODES_PER_GROUP(sb),
2695                        sbi->s_mount_opt, sbi->s_mount_opt2);
2696
2697        cleancache_init_fs(sb);
2698        return err;
2699}
2700
2701int ext4_alloc_flex_bg_array(struct super_block *sb, ext4_group_t ngroup)
2702{
2703        struct ext4_sb_info *sbi = EXT4_SB(sb);
2704        struct flex_groups **old_groups, **new_groups;
2705        int size, i, j;
2706
2707        if (!sbi->s_log_groups_per_flex)
2708                return 0;
2709
2710        size = ext4_flex_group(sbi, ngroup - 1) + 1;
2711        if (size <= sbi->s_flex_groups_allocated)
2712                return 0;
2713
2714        new_groups = kvzalloc(roundup_pow_of_two(size *
2715                              sizeof(*sbi->s_flex_groups)), GFP_KERNEL);
2716        if (!new_groups) {
2717                ext4_msg(sb, KERN_ERR,
2718                         "not enough memory for %d flex group pointers", size);
2719                return -ENOMEM;
2720        }
2721        for (i = sbi->s_flex_groups_allocated; i < size; i++) {
2722                new_groups[i] = kvzalloc(roundup_pow_of_two(
2723                                         sizeof(struct flex_groups)),
2724                                         GFP_KERNEL);
2725                if (!new_groups[i]) {
2726                        for (j = sbi->s_flex_groups_allocated; j < i; j++)
2727                                kvfree(new_groups[j]);
2728                        kvfree(new_groups);
2729                        ext4_msg(sb, KERN_ERR,
2730                                 "not enough memory for %d flex groups", size);
2731                        return -ENOMEM;
2732                }
2733        }
2734        rcu_read_lock();
2735        old_groups = rcu_dereference(sbi->s_flex_groups);
2736        if (old_groups)
2737                memcpy(new_groups, old_groups,
2738                       (sbi->s_flex_groups_allocated *
2739                        sizeof(struct flex_groups *)));
2740        rcu_read_unlock();
2741        rcu_assign_pointer(sbi->s_flex_groups, new_groups);
2742        sbi->s_flex_groups_allocated = size;
2743        if (old_groups)
2744                ext4_kvfree_array_rcu(old_groups);
2745        return 0;
2746}
2747
2748static int ext4_fill_flex_info(struct super_block *sb)
2749{
2750        struct ext4_sb_info *sbi = EXT4_SB(sb);
2751        struct ext4_group_desc *gdp = NULL;
2752        struct flex_groups *fg;
2753        ext4_group_t flex_group;
2754        int i, err;
2755
2756        sbi->s_log_groups_per_flex = sbi->s_es->s_log_groups_per_flex;
2757        if (sbi->s_log_groups_per_flex < 1 || sbi->s_log_groups_per_flex > 31) {
2758                sbi->s_log_groups_per_flex = 0;
2759                return 1;
2760        }
2761
2762        err = ext4_alloc_flex_bg_array(sb, sbi->s_groups_count);
2763        if (err)
2764                goto failed;
2765
2766        for (i = 0; i < sbi->s_groups_count; i++) {
2767                gdp = ext4_get_group_desc(sb, i, NULL);
2768
2769                flex_group = ext4_flex_group(sbi, i);
2770                fg = sbi_array_rcu_deref(sbi, s_flex_groups, flex_group);
2771                atomic_add(ext4_free_inodes_count(sb, gdp), &fg->free_inodes);
2772                atomic64_add(ext4_free_group_clusters(sb, gdp),
2773                             &fg->free_clusters);
2774                atomic_add(ext4_used_dirs_count(sb, gdp), &fg->used_dirs);
2775        }
2776
2777        return 1;
2778failed:
2779        return 0;
2780}
2781
2782static __le16 ext4_group_desc_csum(struct super_block *sb, __u32 block_group,
2783                                   struct ext4_group_desc *gdp)
2784{
2785        int offset = offsetof(struct ext4_group_desc, bg_checksum);
2786        __u16 crc = 0;
2787        __le32 le_group = cpu_to_le32(block_group);
2788        struct ext4_sb_info *sbi = EXT4_SB(sb);
2789
2790        if (ext4_has_metadata_csum(sbi->s_sb)) {
2791                /* Use new metadata_csum algorithm */
2792                __u32 csum32;
2793                __u16 dummy_csum = 0;
2794
2795                csum32 = ext4_chksum(sbi, sbi->s_csum_seed, (__u8 *)&le_group,
2796                                     sizeof(le_group));
2797                csum32 = ext4_chksum(sbi, csum32, (__u8 *)gdp, offset);
2798                csum32 = ext4_chksum(sbi, csum32, (__u8 *)&dummy_csum,
2799                                     sizeof(dummy_csum));
2800                offset += sizeof(dummy_csum);
2801                if (offset < sbi->s_desc_size)
2802                        csum32 = ext4_chksum(sbi, csum32, (__u8 *)gdp + offset,
2803                                             sbi->s_desc_size - offset);
2804
2805                crc = csum32 & 0xFFFF;
2806                goto out;
2807        }
2808
2809        /* old crc16 code */
2810        if (!ext4_has_feature_gdt_csum(sb))
2811                return 0;
2812
2813        crc = crc16(~0, sbi->s_es->s_uuid, sizeof(sbi->s_es->s_uuid));
2814        crc = crc16(crc, (__u8 *)&le_group, sizeof(le_group));
2815        crc = crc16(crc, (__u8 *)gdp, offset);
2816        offset += sizeof(gdp->bg_checksum); /* skip checksum */
2817        /* for checksum of struct ext4_group_desc do the rest...*/
2818        if (ext4_has_feature_64bit(sb) &&
2819            offset < le16_to_cpu(sbi->s_es->s_desc_size))
2820                crc = crc16(crc, (__u8 *)gdp + offset,
2821                            le16_to_cpu(sbi->s_es->s_desc_size) -
2822                                offset);
2823
2824out:
2825        return cpu_to_le16(crc);
2826}
2827
2828int ext4_group_desc_csum_verify(struct super_block *sb, __u32 block_group,
2829                                struct ext4_group_desc *gdp)
2830{
2831        if (ext4_has_group_desc_csum(sb) &&
2832            (gdp->bg_checksum != ext4_group_desc_csum(sb, block_group, gdp)))
2833                return 0;
2834
2835        return 1;
2836}
2837
2838void ext4_group_desc_csum_set(struct super_block *sb, __u32 block_group,
2839                              struct ext4_group_desc *gdp)
2840{
2841        if (!ext4_has_group_desc_csum(sb))
2842                return;
2843        gdp->bg_checksum = ext4_group_desc_csum(sb, block_group, gdp);
2844}
2845
2846/* Called at mount-time, super-block is locked */
2847static int ext4_check_descriptors(struct super_block *sb,
2848                                  ext4_fsblk_t sb_block,
2849                                  ext4_group_t *first_not_zeroed)
2850{
2851        struct ext4_sb_info *sbi = EXT4_SB(sb);
2852        ext4_fsblk_t first_block = le32_to_cpu(sbi->s_es->s_first_data_block);
2853        ext4_fsblk_t last_block;
2854        ext4_fsblk_t last_bg_block = sb_block + ext4_bg_num_gdb(sb, 0);
2855        ext4_fsblk_t block_bitmap;
2856        ext4_fsblk_t inode_bitmap;
2857        ext4_fsblk_t inode_table;
2858        int flexbg_flag = 0;
2859        ext4_group_t i, grp = sbi->s_groups_count;
2860
2861        if (ext4_has_feature_flex_bg(sb))
2862                flexbg_flag = 1;
2863
2864        ext4_debug("Checking group descriptors");
2865
2866        for (i = 0; i < sbi->s_groups_count; i++) {
2867                struct ext4_group_desc *gdp = ext4_get_group_desc(sb, i, NULL);
2868
2869                if (i == sbi->s_groups_count - 1 || flexbg_flag)
2870                        last_block = ext4_blocks_count(sbi->s_es) - 1;
2871                else
2872                        last_block = first_block +
2873                                (EXT4_BLOCKS_PER_GROUP(sb) - 1);
2874
2875                if ((grp == sbi->s_groups_count) &&
2876                   !(gdp->bg_flags & cpu_to_le16(EXT4_BG_INODE_ZEROED)))
2877                        grp = i;
2878
2879                block_bitmap = ext4_block_bitmap(sb, gdp);
2880                if (block_bitmap == sb_block) {
2881                        ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: "
2882                                 "Block bitmap for group %u overlaps "
2883                                 "superblock", i);
2884                        if (!sb_rdonly(sb))
2885                                return 0;
2886                }
2887                if (block_bitmap >= sb_block + 1 &&
2888                    block_bitmap <= last_bg_block) {
2889                        ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: "
2890                                 "Block bitmap for group %u overlaps "
2891                                 "block group descriptors", i);
2892                        if (!sb_rdonly(sb))
2893                                return 0;
2894                }
2895                if (block_bitmap < first_block || block_bitmap > last_block) {
2896                        ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: "
2897                               "Block bitmap for group %u not in group "
2898                               "(block %llu)!", i, block_bitmap);
2899                        return 0;
2900                }
2901                inode_bitmap = ext4_inode_bitmap(sb, gdp);
2902                if (inode_bitmap == sb_block) {
2903                        ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: "
2904                                 "Inode bitmap for group %u overlaps "
2905                                 "superblock", i);
2906                        if (!sb_rdonly(sb))
2907                                return 0;
2908                }
2909                if (inode_bitmap >= sb_block + 1 &&
2910                    inode_bitmap <= last_bg_block) {
2911                        ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: "
2912                                 "Inode bitmap for group %u overlaps "
2913                                 "block group descriptors", i);
2914                        if (!sb_rdonly(sb))
2915                                return 0;
2916                }
2917                if (inode_bitmap < first_block || inode_bitmap > last_block) {
2918                        ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: "
2919                               "Inode bitmap for group %u not in group "
2920                               "(block %llu)!", i, inode_bitmap);
2921                        return 0;
2922                }
2923                inode_table = ext4_inode_table(sb, gdp);
2924                if (inode_table == sb_block) {
2925                        ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: "
2926                                 "Inode table for group %u overlaps "
2927                                 "superblock", i);
2928                        if (!sb_rdonly(sb))
2929                                return 0;
2930                }
2931                if (inode_table >= sb_block + 1 &&
2932                    inode_table <= last_bg_block) {
2933                        ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: "
2934                                 "Inode table for group %u overlaps "
2935                                 "block group descriptors", i);
2936                        if (!sb_rdonly(sb))
2937                                return 0;
2938                }
2939                if (inode_table < first_block ||
2940                    inode_table + sbi->s_itb_per_group - 1 > last_block) {
2941                        ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: "
2942                               "Inode table for group %u not in group "
2943                               "(block %llu)!", i, inode_table);
2944                        return 0;
2945                }
2946                ext4_lock_group(sb, i);
2947                if (!ext4_group_desc_csum_verify(sb, i, gdp)) {
2948                        ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: "
2949                                 "Checksum for group %u failed (%u!=%u)",
2950                                 i, le16_to_cpu(ext4_group_desc_csum(sb, i,
2951                                     gdp)), le16_to_cpu(gdp->bg_checksum));
2952                        if (!sb_rdonly(sb)) {
2953                                ext4_unlock_group(sb, i);
2954                                return 0;
2955                        }
2956                }
2957                ext4_unlock_group(sb, i);
2958                if (!flexbg_flag)
2959                        first_block += EXT4_BLOCKS_PER_GROUP(sb);
2960        }
2961        if (NULL != first_not_zeroed)
2962                *first_not_zeroed = grp;
2963        return 1;
2964}
2965
2966/* ext4_orphan_cleanup() walks a singly-linked list of inodes (starting at
2967 * the superblock) which were deleted from all directories, but held open by
2968 * a process at the time of a crash.  We walk the list and try to delete these
2969 * inodes at recovery time (only with a read-write filesystem).
2970 *
2971 * In order to keep the orphan inode chain consistent during traversal (in
2972 * case of crash during recovery), we link each inode into the superblock
2973 * orphan list_head and handle it the same way as an inode deletion during
2974 * normal operation (which journals the operations for us).
2975 *
2976 * We only do an iget() and an iput() on each inode, which is very safe if we
2977 * accidentally point at an in-use or already deleted inode.  The worst that
2978 * can happen in this case is that we get a "bit already cleared" message from
2979 * ext4_free_inode().  The only reason we would point at a wrong inode is if
2980 * e2fsck was run on this filesystem, and it must have already done the orphan
2981 * inode cleanup for us, so we can safely abort without any further action.
2982 */
2983static void ext4_orphan_cleanup(struct super_block *sb,
2984                                struct ext4_super_block *es)
2985{
2986        unsigned int s_flags = sb->s_flags;
2987        int ret, nr_orphans = 0, nr_truncates = 0;
2988#ifdef CONFIG_QUOTA
2989        int quota_update = 0;
2990        int i;
2991#endif
2992        if (!es->s_last_orphan) {
2993                jbd_debug(4, "no orphan inodes to clean up\n");
2994                return;
2995        }
2996
2997        if (bdev_read_only(sb->s_bdev)) {
2998                ext4_msg(sb, KERN_ERR, "write access "
2999                        "unavailable, skipping orphan cleanup");
3000                return;
3001        }
3002
3003        /* Check if feature set would not allow a r/w mount */
3004        if (!ext4_feature_set_ok(sb, 0)) {
3005                ext4_msg(sb, KERN_INFO, "Skipping orphan cleanup due to "
3006                         "unknown ROCOMPAT features");
3007                return;
3008        }
3009
3010        if (EXT4_SB(sb)->s_mount_state & EXT4_ERROR_FS) {
3011                /* don't clear list on RO mount w/ errors */
3012                if (es->s_last_orphan && !(s_flags & SB_RDONLY)) {
3013                        ext4_msg(sb, KERN_INFO, "Errors on filesystem, "
3014                                  "clearing orphan list.\n");
3015                        es->s_last_orphan = 0;
3016                }
3017                jbd_debug(1, "Skipping orphan recovery on fs with errors.\n");
3018                return;
3019        }
3020
3021        if (s_flags & SB_RDONLY) {
3022                ext4_msg(sb, KERN_INFO, "orphan cleanup on readonly fs");
3023                sb->s_flags &= ~SB_RDONLY;
3024        }
3025#ifdef CONFIG_QUOTA
3026        /* Needed for iput() to work correctly and not trash data */
3027        sb->s_flags |= SB_ACTIVE;
3028
3029        /*
3030         * Turn on quotas which were not enabled for read-only mounts if
3031         * filesystem has quota feature, so that they are updated correctly.
3032         */
3033        if (ext4_has_feature_quota(sb) && (s_flags & SB_RDONLY)) {
3034                int ret = ext4_enable_quotas(sb);
3035
3036                if (!ret)
3037                        quota_update = 1;
3038                else
3039                        ext4_msg(sb, KERN_ERR,
3040                                "Cannot turn on quotas: error %d", ret);
3041        }
3042
3043        /* Turn on journaled quotas used for old sytle */
3044        for (i = 0; i < EXT4_MAXQUOTAS; i++) {
3045                if (EXT4_SB(sb)->s_qf_names[i]) {
3046                        int ret = ext4_quota_on_mount(sb, i);
3047
3048                        if (!ret)
3049                                quota_update = 1;
3050                        else
3051                                ext4_msg(sb, KERN_ERR,
3052                                        "Cannot turn on journaled "
3053                                        "quota: type %d: error %d", i, ret);
3054                }
3055        }
3056#endif
3057
3058        while (es->s_last_orphan) {
3059                struct inode *inode;
3060
3061                /*
3062                 * We may have encountered an error during cleanup; if
3063                 * so, skip the rest.
3064                 */
3065                if (EXT4_SB(sb)->s_mount_state & EXT4_ERROR_FS) {
3066                        jbd_debug(1, "Skipping orphan recovery on fs with errors.\n");
3067                        es->s_last_orphan = 0;
3068                        break;
3069                }
3070
3071                inode = ext4_orphan_get(sb, le32_to_cpu(es->s_last_orphan));
3072                if (IS_ERR(inode)) {
3073                        es->s_last_orphan = 0;
3074                        break;
3075                }
3076
3077                list_add(&EXT4_I(inode)->i_orphan, &EXT4_SB(sb)->s_orphan);
3078                dquot_initialize(inode);
3079                if (inode->i_nlink) {
3080                        if (test_opt(sb, DEBUG))
3081                                ext4_msg(sb, KERN_DEBUG,
3082                                        "%s: truncating inode %lu to %lld bytes",
3083                                        __func__, inode->i_ino, inode->i_size);
3084                        jbd_debug(2, "truncating inode %lu to %lld bytes\n",
3085                                  inode->i_ino, inode->i_size);
3086                        inode_lock(inode);
3087                        truncate_inode_pages(inode->i_mapping, inode->i_size);
3088                        ret = ext4_truncate(inode);
3089                        if (ret)
3090                                ext4_std_error(inode->i_sb, ret);
3091                        inode_unlock(inode);
3092                        nr_truncates++;
3093                } else {
3094                        if (test_opt(sb, DEBUG))
3095                                ext4_msg(sb, KERN_DEBUG,
3096                                        "%s: deleting unreferenced inode %lu",
3097                                        __func__, inode->i_ino);
3098                        jbd_debug(2, "deleting unreferenced inode %lu\n",
3099                                  inode->i_ino);
3100                        nr_orphans++;
3101                }
3102                iput(inode);  /* The delete magic happens here! */
3103        }
3104
3105#define PLURAL(x) (x), ((x) == 1) ? "" : "s"
3106
3107        if (nr_orphans)
3108                ext4_msg(sb, KERN_INFO, "%d orphan inode%s deleted",
3109                       PLURAL(nr_orphans));
3110        if (nr_truncates)
3111                ext4_msg(sb, KERN_INFO, "%d truncate%s cleaned up",
3112                       PLURAL(nr_truncates));
3113#ifdef CONFIG_QUOTA
3114        /* Turn off quotas if they were enabled for orphan cleanup */
3115        if (quota_update) {
3116                for (i = 0; i < EXT4_MAXQUOTAS; i++) {
3117                        if (sb_dqopt(sb)->files[i])
3118                                dquot_quota_off(sb, i);
3119                }
3120        }
3121#endif
3122        sb->s_flags = s_flags; /* Restore SB_RDONLY status */
3123}
3124
3125/*
3126 * Maximal extent format file size.
3127 * Resulting logical blkno at s_maxbytes must fit in our on-disk
3128 * extent format containers, within a sector_t, and within i_blocks
3129 * in the vfs.  ext4 inode has 48 bits of i_block in fsblock units,
3130 * so that won't be a limiting factor.
3131 *
3132 * However there is other limiting factor. We do store extents in the form
3133 * of starting block and length, hence the resulting length of the extent
3134 * covering maximum file size must fit into on-disk format containers as
3135 * well. Given that length is always by 1 unit bigger than max unit (because
3136 * we count 0 as well) we have to lower the s_maxbytes by one fs block.
3137 *
3138 * Note, this does *not* consider any metadata overhead for vfs i_blocks.
3139 */
3140static loff_t ext4_max_size(int blkbits, int has_huge_files)
3141{
3142        loff_t res;
3143        loff_t upper_limit = MAX_LFS_FILESIZE;
3144
3145        BUILD_BUG_ON(sizeof(blkcnt_t) < sizeof(u64));
3146
3147        if (!has_huge_files) {
3148                upper_limit = (1LL << 32) - 1;
3149
3150                /* total blocks in file system block size */
3151                upper_limit >>= (blkbits - 9);
3152                upper_limit <<= blkbits;
3153        }
3154
3155        /*
3156         * 32-bit extent-start container, ee_block. We lower the maxbytes
3157         * by one fs block, so ee_len can cover the extent of maximum file
3158         * size
3159         */
3160        res = (1LL << 32) - 1;
3161        res <<= blkbits;
3162
3163        /* Sanity check against vm- & vfs- imposed limits */
3164        if (res > upper_limit)
3165                res = upper_limit;
3166
3167        return res;
3168}
3169
3170/*
3171 * Maximal bitmap file size.  There is a direct, and {,double-,triple-}indirect
3172 * block limit, and also a limit of (2^48 - 1) 512-byte sectors in i_blocks.
3173 * We need to be 1 filesystem block less than the 2^48 sector limit.
3174 */
3175static loff_t ext4_max_bitmap_size(int bits, int has_huge_files)
3176{
3177        loff_t res = EXT4_NDIR_BLOCKS;
3178        int meta_blocks;
3179        loff_t upper_limit;
3180        /* This is calculated to be the largest file size for a dense, block
3181         * mapped file such that the file's total number of 512-byte sectors,
3182         * including data and all indirect blocks, does not exceed (2^48 - 1).
3183         *
3184         * __u32 i_blocks_lo and _u16 i_blocks_high represent the total
3185         * number of 512-byte sectors of the file.
3186         */
3187
3188        if (!has_huge_files) {
3189                /*
3190                 * !has_huge_files or implies that the inode i_block field
3191                 * represents total file blocks in 2^32 512-byte sectors ==
3192                 * size of vfs inode i_blocks * 8
3193                 */
3194                upper_limit = (1LL << 32) - 1;
3195
3196                /* total blocks in file system block size */
3197                upper_limit >>= (bits - 9);
3198
3199        } else {
3200                /*
3201                 * We use 48 bit ext4_inode i_blocks
3202                 * With EXT4_HUGE_FILE_FL set the i_blocks
3203                 * represent total number of blocks in
3204                 * file system block size
3205                 */
3206                upper_limit = (1LL << 48) - 1;
3207
3208        }
3209
3210        /* indirect blocks */
3211        meta_blocks = 1;
3212        /* double indirect blocks */
3213        meta_blocks += 1 + (1LL << (bits-2));
3214        /* tripple indirect blocks */
3215        meta_blocks += 1 + (1LL << (bits-2)) + (1LL << (2*(bits-2)));
3216
3217        upper_limit -= meta_blocks;
3218        upper_limit <<= bits;
3219
3220        res += 1LL << (bits-2);
3221        res += 1LL << (2*(bits-2));
3222        res += 1LL << (3*(bits-2));
3223        res <<= bits;
3224        if (res > upper_limit)
3225                res = upper_limit;
3226
3227        if (res > MAX_LFS_FILESIZE)
3228                res = MAX_LFS_FILESIZE;
3229
3230        return res;
3231}
3232
3233static ext4_fsblk_t descriptor_loc(struct super_block *sb,
3234                                   ext4_fsblk_t logical_sb_block, int nr)
3235{
3236        struct ext4_sb_info *sbi = EXT4_SB(sb);
3237        ext4_group_t bg, first_meta_bg;
3238        int has_super = 0;
3239
3240        first_meta_bg = le32_to_cpu(sbi->s_es->s_first_meta_bg);
3241
3242        if (!ext4_has_feature_meta_bg(sb) || nr < first_meta_bg)
3243                return logical_sb_block + nr + 1;
3244        bg = sbi->s_desc_per_block * nr;
3245        if (ext4_bg_has_super(sb, bg))
3246                has_super = 1;
3247
3248        /*
3249         * If we have a meta_bg fs with 1k blocks, group 0's GDT is at
3250         * block 2, not 1.  If s_first_data_block == 0 (bigalloc is enabled
3251         * on modern mke2fs or blksize > 1k on older mke2fs) then we must
3252         * compensate.
3253         */
3254        if (sb->s_blocksize == 1024 && nr == 0 &&
3255            le32_to_cpu(sbi->s_es->s_first_data_block) == 0)
3256                has_super++;
3257
3258        return (has_super + ext4_group_first_block_no(sb, bg));
3259}
3260
3261/**
3262 * ext4_get_stripe_size: Get the stripe size.
3263 * @sbi: In memory super block info
3264 *
3265 * If we have specified it via mount option, then
3266 * use the mount option value. If the value specified at mount time is
3267 * greater than the blocks per group use the super block value.
3268 * If the super block value is greater than blocks per group return 0.
3269 * Allocator needs it be less than blocks per group.
3270 *
3271 */
3272static unsigned long ext4_get_stripe_size(struct ext4_sb_info *sbi)
3273{
3274        unsigned long stride = le16_to_cpu(sbi->s_es->s_raid_stride);
3275        unsigned long stripe_width =
3276                        le32_to_cpu(sbi->s_es->s_raid_stripe_width);
3277        int ret;
3278
3279        if (sbi->s_stripe && sbi->s_stripe <= sbi->s_blocks_per_group)
3280                ret = sbi->s_stripe;
3281        else if (stripe_width && stripe_width <= sbi->s_blocks_per_group)
3282                ret = stripe_width;
3283        else if (stride && stride <= sbi->s_blocks_per_group)
3284                ret = stride;
3285        else
3286                ret = 0;
3287
3288        /*
3289         * If the stripe width is 1, this makes no sense and
3290         * we set it to 0 to turn off stripe handling code.
3291         */
3292        if (ret <= 1)
3293                ret = 0;
3294
3295        return ret;
3296}
3297
3298/*
3299 * Check whether this filesystem can be mounted based on
3300 * the features present and the RDONLY/RDWR mount requested.
3301 * Returns 1 if this filesystem can be mounted as requested,
3302 * 0 if it cannot be.
3303 */
3304static int ext4_feature_set_ok(struct super_block *sb, int readonly)
3305{
3306        if (ext4_has_unknown_ext4_incompat_features(sb)) {
3307                ext4_msg(sb, KERN_ERR,
3308                        "Couldn't mount because of "
3309                        "unsupported optional features (%x)",
3310                        (le32_to_cpu(EXT4_SB(sb)->s_es->s_feature_incompat) &
3311                        ~EXT4_FEATURE_INCOMPAT_SUPP));
3312                return 0;
3313        }
3314
3315#ifndef CONFIG_UNICODE
3316        if (ext4_has_feature_casefold(sb)) {
3317                ext4_msg(sb, KERN_ERR,
3318                         "Filesystem with casefold feature cannot be "
3319                         "mounted without CONFIG_UNICODE");
3320                return 0;
3321        }
3322#endif
3323
3324        if (readonly)
3325                return 1;
3326
3327        if (ext4_has_feature_readonly(sb)) {
3328                ext4_msg(sb, KERN_INFO, "filesystem is read-only");
3329                sb->s_flags |= SB_RDONLY;
3330                return 1;
3331        }
3332
3333        /* Check that feature set is OK for a read-write mount */
3334        if (ext4_has_unknown_ext4_ro_compat_features(sb)) {
3335                ext4_msg(sb, KERN_ERR, "couldn't mount RDWR because of "
3336                         "unsupported optional features (%x)",
3337                         (le32_to_cpu(EXT4_SB(sb)->s_es->s_feature_ro_compat) &
3338                                ~EXT4_FEATURE_RO_COMPAT_SUPP));
3339                return 0;
3340        }
3341        if (ext4_has_feature_bigalloc(sb) && !ext4_has_feature_extents(sb)) {
3342                ext4_msg(sb, KERN_ERR,
3343                         "Can't support bigalloc feature without "
3344                         "extents feature\n");
3345                return 0;
3346        }
3347
3348#if !IS_ENABLED(CONFIG_QUOTA) || !IS_ENABLED(CONFIG_QFMT_V2)
3349        if (!readonly && (ext4_has_feature_quota(sb) ||
3350                          ext4_has_feature_project(sb))) {
3351                ext4_msg(sb, KERN_ERR,
3352                         "The kernel was not built with CONFIG_QUOTA and CONFIG_QFMT_V2");
3353                return 0;
3354        }
3355#endif  /* CONFIG_QUOTA */
3356        return 1;
3357}
3358
3359/*
3360 * This function is called once a day if we have errors logged
3361 * on the file system
3362 */
3363static void print_daily_error_info(struct timer_list *t)
3364{
3365        struct ext4_sb_info *sbi = from_timer(sbi, t, s_err_report);
3366        struct super_block *sb = sbi->s_sb;
3367        struct ext4_super_block *es = sbi->s_es;
3368
3369        if (es->s_error_count)
3370                /* fsck newer than v1.41.13 is needed to clean this condition. */
3371                ext4_msg(sb, KERN_NOTICE, "error count since last fsck: %u",
3372                         le32_to_cpu(es->s_error_count));
3373        if (es->s_first_error_time) {
3374                printk(KERN_NOTICE "EXT4-fs (%s): initial error at time %llu: %.*s:%d",
3375                       sb->s_id,
3376                       ext4_get_tstamp(es, s_first_error_time),
3377                       (int) sizeof(es->s_first_error_func),
3378                       es->s_first_error_func,
3379                       le32_to_cpu(es->s_first_error_line));
3380                if (es->s_first_error_ino)
3381                        printk(KERN_CONT ": inode %u",
3382                               le32_to_cpu(es->s_first_error_ino));
3383                if (es->s_first_error_block)
3384                        printk(KERN_CONT ": block %llu", (unsigned long long)
3385                               le64_to_cpu(es->s_first_error_block));
3386                printk(KERN_CONT "\n");
3387        }
3388        if (es->s_last_error_time) {
3389                printk(KERN_NOTICE "EXT4-fs (%s): last error at time %llu: %.*s:%d",
3390                       sb->s_id,
3391                       ext4_get_tstamp(es, s_last_error_time),
3392                       (int) sizeof(es->s_last_error_func),
3393                       es->s_last_error_func,
3394                       le32_to_cpu(es->s_last_error_line));
3395                if (es->s_last_error_ino)
3396                        printk(KERN_CONT ": inode %u",
3397                               le32_to_cpu(es->s_last_error_ino));
3398                if (es->s_last_error_block)
3399                        printk(KERN_CONT ": block %llu", (unsigned long long)
3400                               le64_to_cpu(es->s_last_error_block));
3401                printk(KERN_CONT "\n");
3402        }
3403        mod_timer(&sbi->s_err_report, jiffies + 24*60*60*HZ);  /* Once a day */
3404}
3405
3406/* Find next suitable group and run ext4_init_inode_table */
3407static int ext4_run_li_request(struct ext4_li_request *elr)
3408{
3409        struct ext4_group_desc *gdp = NULL;
3410        struct super_block *sb = elr->lr_super;
3411        ext4_group_t ngroups = EXT4_SB(sb)->s_groups_count;
3412        ext4_group_t group = elr->lr_next_group;
3413        unsigned long timeout = 0;
3414        unsigned int prefetch_ios = 0;
3415        int ret = 0;
3416
3417        if (elr->lr_mode == EXT4_LI_MODE_PREFETCH_BBITMAP) {
3418                elr->lr_next_group = ext4_mb_prefetch(sb, group,
3419                                EXT4_SB(sb)->s_mb_prefetch, &prefetch_ios);
3420                if (prefetch_ios)
3421                        ext4_mb_prefetch_fini(sb, elr->lr_next_group,
3422                                              prefetch_ios);
3423                trace_ext4_prefetch_bitmaps(sb, group, elr->lr_next_group,
3424                                            prefetch_ios);
3425                if (group >= elr->lr_next_group) {
3426                        ret = 1;
3427                        if (elr->lr_first_not_zeroed != ngroups &&
3428                            !sb_rdonly(sb) && test_opt(sb, INIT_INODE_TABLE)) {
3429                                elr->lr_next_group = elr->lr_first_not_zeroed;
3430                                elr->lr_mode = EXT4_LI_MODE_ITABLE;
3431                                ret = 0;
3432                        }
3433                }
3434                return ret;
3435        }
3436
3437        for (; group < ngroups; group++) {
3438                gdp = ext4_get_group_desc(sb, group, NULL);
3439                if (!gdp) {
3440                        ret = 1;
3441                        break;
3442                }
3443
3444                if (!(gdp->bg_flags & cpu_to_le16(EXT4_BG_INODE_ZEROED)))
3445                        break;
3446        }
3447
3448        if (group >= ngroups)
3449                ret = 1;
3450
3451        if (!ret) {
3452                timeout = jiffies;
3453                ret = ext4_init_inode_table(sb, group,
3454                                            elr->lr_timeout ? 0 : 1);
3455                trace_ext4_lazy_itable_init(sb, group);
3456                if (elr->lr_timeout == 0) {
3457                        timeout = (jiffies - timeout) *
3458                                EXT4_SB(elr->lr_super)->s_li_wait_mult;
3459                        elr->lr_timeout = timeout;
3460                }
3461                elr->lr_next_sched = jiffies + elr->lr_timeout;
3462                elr->lr_next_group = group + 1;
3463        }
3464        return ret;
3465}
3466
3467/*
3468 * Remove lr_request from the list_request and free the
3469 * request structure. Should be called with li_list_mtx held
3470 */
3471static void ext4_remove_li_request(struct ext4_li_request *elr)
3472{
3473        if (!elr)
3474                return;
3475
3476        list_del(&elr->lr_request);
3477        EXT4_SB(elr->lr_super)->s_li_request = NULL;
3478        kfree(elr);
3479}
3480
3481static void ext4_unregister_li_request(struct super_block *sb)
3482{
3483        mutex_lock(&ext4_li_mtx);
3484        if (!ext4_li_info) {
3485                mutex_unlock(&ext4_li_mtx);
3486                return;
3487        }
3488
3489        mutex_lock(&ext4_li_info->li_list_mtx);
3490        ext4_remove_li_request(EXT4_SB(sb)->s_li_request);
3491        mutex_unlock(&ext4_li_info->li_list_mtx);
3492        mutex_unlock(&ext4_li_mtx);
3493}
3494
3495static struct task_struct *ext4_lazyinit_task;
3496
3497/*
3498 * This is the function where ext4lazyinit thread lives. It walks
3499 * through the request list searching for next scheduled filesystem.
3500 * When such a fs is found, run the lazy initialization request
3501 * (ext4_rn_li_request) and keep track of the time spend in this
3502 * function. Based on that time we compute next schedule time of
3503 * the request. When walking through the list is complete, compute
3504 * next waking time and put itself into sleep.
3505 */
3506static int ext4_lazyinit_thread(void *arg)
3507{
3508        struct ext4_lazy_init *eli = (struct ext4_lazy_init *)arg;
3509        struct list_head *pos, *n;
3510        struct ext4_li_request *elr;
3511        unsigned long next_wakeup, cur;
3512
3513        BUG_ON(NULL == eli);
3514
3515cont_thread:
3516        while (true) {
3517                next_wakeup = MAX_JIFFY_OFFSET;
3518
3519                mutex_lock(&eli->li_list_mtx);
3520                if (list_empty(&eli->li_request_list)) {
3521                        mutex_unlock(&eli->li_list_mtx);
3522                        goto exit_thread;
3523                }
3524                list_for_each_safe(pos, n, &eli->li_request_list) {
3525                        int err = 0;
3526                        int progress = 0;
3527                        elr = list_entry(pos, struct ext4_li_request,
3528                                         lr_request);
3529
3530                        if (time_before(jiffies, elr->lr_next_sched)) {
3531                                if (time_before(elr->lr_next_sched, next_wakeup))
3532                                        next_wakeup = elr->lr_next_sched;
3533                                continue;
3534                        }
3535                        if (down_read_trylock(&elr->lr_super->s_umount)) {
3536                                if (sb_start_write_trylock(elr->lr_super)) {
3537                                        progress = 1;
3538                                        /*
3539                                         * We hold sb->s_umount, sb can not
3540                                         * be removed from the list, it is
3541                                         * now safe to drop li_list_mtx
3542                                         */
3543                                        mutex_unlock(&eli->li_list_mtx);
3544                                        err = ext4_run_li_request(elr);
3545                                        sb_end_write(elr->lr_super);
3546                                        mutex_lock(&eli->li_list_mtx);
3547                                        n = pos->next;
3548                                }
3549                                up_read((&elr->lr_super->s_umount));
3550                        }
3551                        /* error, remove the lazy_init job */
3552                        if (err) {
3553                                ext4_remove_li_request(elr);
3554                                continue;
3555                        }
3556                        if (!progress) {
3557                                elr->lr_next_sched = jiffies +
3558                                        (prandom_u32()
3559                                         % (EXT4_DEF_LI_MAX_START_DELAY * HZ));
3560                        }
3561                        if (time_before(elr->lr_next_sched, next_wakeup))
3562                                next_wakeup = elr->lr_next_sched;
3563                }
3564                mutex_unlock(&eli->li_list_mtx);
3565
3566                try_to_freeze();
3567
3568                cur = jiffies;
3569                if ((time_after_eq(cur, next_wakeup)) ||
3570                    (MAX_JIFFY_OFFSET == next_wakeup)) {
3571                        cond_resched();
3572                        continue;
3573                }
3574
3575                schedule_timeout_interruptible(next_wakeup - cur);
3576
3577                if (kthread_should_stop()) {
3578                        ext4_clear_request_list();
3579                        goto exit_thread;
3580                }
3581        }
3582
3583exit_thread:
3584        /*
3585         * It looks like the request list is empty, but we need
3586         * to check it under the li_list_mtx lock, to prevent any
3587         * additions into it, and of course we should lock ext4_li_mtx
3588         * to atomically free the list and ext4_li_info, because at
3589         * this point another ext4 filesystem could be registering
3590         * new one.
3591         */
3592        mutex_lock(&ext4_li_mtx);
3593        mutex_lock(&eli->li_list_mtx);
3594        if (!list_empty(&eli->li_request_list)) {
3595                mutex_unlock(&eli->li_list_mtx);
3596                mutex_unlock(&ext4_li_mtx);
3597                goto cont_thread;
3598        }
3599        mutex_unlock(&eli->li_list_mtx);
3600        kfree(ext4_li_info);
3601        ext4_li_info = NULL;
3602        mutex_unlock(&ext4_li_mtx);
3603
3604        return 0;
3605}
3606
3607static void ext4_clear_request_list(void)
3608{
3609        struct list_head *pos, *n;
3610        struct ext4_li_request *elr;
3611
3612        mutex_lock(&ext4_li_info->li_list_mtx);
3613        list_for_each_safe(pos, n, &ext4_li_info->li_request_list) {
3614                elr = list_entry(pos, struct ext4_li_request,
3615                                 lr_request);
3616                ext4_remove_li_request(elr);
3617        }
3618        mutex_unlock(&ext4_li_info->li_list_mtx);
3619}
3620
3621static int ext4_run_lazyinit_thread(void)
3622{
3623        ext4_lazyinit_task = kthread_run(ext4_lazyinit_thread,
3624                                         ext4_li_info, "ext4lazyinit");
3625        if (IS_ERR(ext4_lazyinit_task)) {
3626                int err = PTR_ERR(ext4_lazyinit_task);
3627                ext4_clear_request_list();
3628                kfree(ext4_li_info);
3629                ext4_li_info = NULL;
3630                printk(KERN_CRIT "EXT4-fs: error %d creating inode table "
3631                                 "initialization thread\n",
3632                                 err);
3633                return err;
3634        }
3635        ext4_li_info->li_state |= EXT4_LAZYINIT_RUNNING;
3636        return 0;
3637}
3638
3639/*
3640 * Check whether it make sense to run itable init. thread or not.
3641 * If there is at least one uninitialized inode table, return
3642 * corresponding group number, else the loop goes through all
3643 * groups and return total number of groups.
3644 */
3645static ext4_group_t ext4_has_uninit_itable(struct super_block *sb)
3646{
3647        ext4_group_t group, ngroups = EXT4_SB(sb)->s_groups_count;
3648        struct ext4_group_desc *gdp = NULL;
3649
3650        if (!ext4_has_group_desc_csum(sb))
3651                return ngroups;
3652
3653        for (group = 0; group < ngroups; group++) {
3654                gdp = ext4_get_group_desc(sb, group, NULL);
3655                if (!gdp)
3656                        continue;
3657
3658                if (!(gdp->bg_flags & cpu_to_le16(EXT4_BG_INODE_ZEROED)))
3659                        break;
3660        }
3661
3662        return group;
3663}
3664
3665static int ext4_li_info_new(void)
3666{
3667        struct ext4_lazy_init *eli = NULL;
3668
3669        eli = kzalloc(sizeof(*eli), GFP_KERNEL);
3670        if (!eli)
3671                return -ENOMEM;
3672
3673        INIT_LIST_HEAD(&eli->li_request_list);
3674        mutex_init(&eli->li_list_mtx);
3675
3676        eli->li_state |= EXT4_LAZYINIT_QUIT;
3677
3678        ext4_li_info = eli;
3679
3680        return 0;
3681}
3682
3683static struct ext4_li_request *ext4_li_request_new(struct super_block *sb,
3684                                            ext4_group_t start)
3685{
3686        struct ext4_li_request *elr;
3687
3688        elr = kzalloc(sizeof(*elr), GFP_KERNEL);
3689        if (!elr)
3690                return NULL;
3691
3692        elr->lr_super = sb;
3693        elr->lr_first_not_zeroed = start;
3694        if (test_opt(sb, PREFETCH_BLOCK_BITMAPS))
3695                elr->lr_mode = EXT4_LI_MODE_PREFETCH_BBITMAP;
3696        else {
3697                elr->lr_mode = EXT4_LI_MODE_ITABLE;
3698                elr->lr_next_group = start;
3699        }
3700
3701        /*
3702         * Randomize first schedule time of the request to
3703         * spread the inode table initialization requests
3704         * better.
3705         */
3706        elr->lr_next_sched = jiffies + (prandom_u32() %
3707                                (EXT4_DEF_LI_MAX_START_DELAY * HZ));
3708        return elr;
3709}
3710
3711int ext4_register_li_request(struct super_block *sb,
3712                             ext4_group_t first_not_zeroed)
3713{
3714        struct ext4_sb_info *sbi = EXT4_SB(sb);
3715        struct ext4_li_request *elr = NULL;
3716        ext4_group_t ngroups = sbi->s_groups_count;
3717        int ret = 0;
3718
3719        mutex_lock(&ext4_li_mtx);
3720        if (sbi->s_li_request != NULL) {
3721                /*
3722                 * Reset timeout so it can be computed again, because
3723                 * s_li_wait_mult might have changed.
3724                 */
3725                sbi->s_li_request->lr_timeout = 0;
3726                goto out;
3727        }
3728
3729        if (!test_opt(sb, PREFETCH_BLOCK_BITMAPS) &&
3730            (first_not_zeroed == ngroups || sb_rdonly(sb) ||
3731             !test_opt(sb, INIT_INODE_TABLE)))
3732                goto out;
3733
3734        elr = ext4_li_request_new(sb, first_not_zeroed);
3735        if (!elr) {
3736                ret = -ENOMEM;
3737                goto out;
3738        }
3739
3740        if (NULL == ext4_li_info) {
3741                ret = ext4_li_info_new();
3742                if (ret)
3743                        goto out;
3744        }
3745
3746        mutex_lock(&ext4_li_info->li_list_mtx);
3747        list_add(&elr->lr_request, &ext4_li_info->li_request_list);
3748        mutex_unlock(&ext4_li_info->li_list_mtx);
3749
3750        sbi->s_li_request = elr;
3751        /*
3752         * set elr to NULL here since it has been inserted to
3753         * the request_list and the removal and free of it is
3754         * handled by ext4_clear_request_list from now on.
3755         */
3756        elr = NULL;
3757
3758        if (!(ext4_li_info->li_state & EXT4_LAZYINIT_RUNNING)) {
3759                ret = ext4_run_lazyinit_thread();
3760                if (ret)
3761                        goto out;
3762        }
3763out:
3764        mutex_unlock(&ext4_li_mtx);
3765        if (ret)
3766                kfree(elr);
3767        return ret;
3768}
3769
3770/*
3771 * We do not need to lock anything since this is called on
3772 * module unload.
3773 */
3774static void ext4_destroy_lazyinit_thread(void)
3775{
3776        /*
3777         * If thread exited earlier
3778         * there's nothing to be done.
3779         */
3780        if (!ext4_li_info || !ext4_lazyinit_task)
3781                return;
3782
3783        kthread_stop(ext4_lazyinit_task);
3784}
3785
3786static int set_journal_csum_feature_set(struct super_block *sb)
3787{
3788        int ret = 1;
3789        int compat, incompat;
3790        struct ext4_sb_info *sbi = EXT4_SB(sb);
3791
3792        if (ext4_has_metadata_csum(sb)) {
3793                /* journal checksum v3 */
3794                compat = 0;
3795                incompat = JBD2_FEATURE_INCOMPAT_CSUM_V3;
3796        } else {
3797                /* journal checksum v1 */
3798                compat = JBD2_FEATURE_COMPAT_CHECKSUM;
3799                incompat = 0;
3800        }
3801
3802        jbd2_journal_clear_features(sbi->s_journal,
3803                        JBD2_FEATURE_COMPAT_CHECKSUM, 0,
3804                        JBD2_FEATURE_INCOMPAT_CSUM_V3 |
3805                        JBD2_FEATURE_INCOMPAT_CSUM_V2);
3806        if (test_opt(sb, JOURNAL_ASYNC_COMMIT)) {
3807                ret = jbd2_journal_set_features(sbi->s_journal,
3808                                compat, 0,
3809                                JBD2_FEATURE_INCOMPAT_ASYNC_COMMIT |
3810                                incompat);
3811        } else if (test_opt(sb, JOURNAL_CHECKSUM)) {
3812                ret = jbd2_journal_set_features(sbi->s_journal,
3813                                compat, 0,
3814                                incompat);
3815                jbd2_journal_clear_features(sbi->s_journal, 0, 0,
3816                                JBD2_FEATURE_INCOMPAT_ASYNC_COMMIT);
3817        } else {
3818                jbd2_journal_clear_features(sbi->s_journal, 0, 0,
3819                                JBD2_FEATURE_INCOMPAT_ASYNC_COMMIT);
3820        }
3821
3822        return ret;
3823}
3824
3825/*
3826 * Note: calculating the overhead so we can be compatible with
3827 * historical BSD practice is quite difficult in the face of
3828 * clusters/bigalloc.  This is because multiple metadata blocks from
3829 * different block group can end up in the same allocation cluster.
3830 * Calculating the exact overhead in the face of clustered allocation
3831 * requires either O(all block bitmaps) in memory or O(number of block
3832 * groups**2) in time.  We will still calculate the superblock for
3833 * older file systems --- and if we come across with a bigalloc file
3834 * system with zero in s_overhead_clusters the estimate will be close to
3835 * correct especially for very large cluster sizes --- but for newer
3836 * file systems, it's better to calculate this figure once at mkfs
3837 * time, and store it in the superblock.  If the superblock value is
3838 * present (even for non-bigalloc file systems), we will use it.
3839 */
3840static int count_overhead(struct super_block *sb, ext4_group_t grp,
3841                          char *buf)
3842{
3843        struct ext4_sb_info     *sbi = EXT4_SB(sb);
3844        struct ext4_group_desc  *gdp;
3845        ext4_fsblk_t            first_block, last_block, b;
3846        ext4_group_t            i, ngroups = ext4_get_groups_count(sb);
3847        int                     s, j, count = 0;
3848
3849        if (!ext4_has_feature_bigalloc(sb))
3850                return (ext4_bg_has_super(sb, grp) + ext4_bg_num_gdb(sb, grp) +
3851                        sbi->s_itb_per_group + 2);
3852
3853        first_block = le32_to_cpu(sbi->s_es->s_first_data_block) +
3854                (grp * EXT4_BLOCKS_PER_GROUP(sb));
3855        last_block = first_block + EXT4_BLOCKS_PER_GROUP(sb) - 1;
3856        for (i = 0; i < ngroups; i++) {
3857                gdp = ext4_get_group_desc(sb, i, NULL);
3858                b = ext4_block_bitmap(sb, gdp);
3859                if (b >= first_block && b <= last_block) {
3860                        ext4_set_bit(EXT4_B2C(sbi, b - first_block), buf);
3861                        count++;
3862                }
3863                b = ext4_inode_bitmap(sb, gdp);
3864                if (b >= first_block && b <= last_block) {
3865                        ext4_set_bit(EXT4_B2C(sbi, b - first_block), buf);
3866                        count++;
3867                }
3868                b = ext4_inode_table(sb, gdp);
3869                if (b >= first_block && b + sbi->s_itb_per_group <= last_block)
3870                        for (j = 0; j < sbi->s_itb_per_group; j++, b++) {
3871                                int c = EXT4_B2C(sbi, b - first_block);
3872                                ext4_set_bit(c, buf);
3873                                count++;
3874                        }
3875                if (i != grp)
3876                        continue;
3877                s = 0;
3878                if (ext4_bg_has_super(sb, grp)) {
3879                        ext4_set_bit(s++, buf);
3880                        count++;
3881                }
3882                j = ext4_bg_num_gdb(sb, grp);
3883                if (s + j > EXT4_BLOCKS_PER_GROUP(sb)) {
3884                        ext4_error(sb, "Invalid number of block group "
3885                                   "descriptor blocks: %d", j);
3886                        j = EXT4_BLOCKS_PER_GROUP(sb) - s;
3887                }
3888                count += j;
3889                for (; j > 0; j--)
3890                        ext4_set_bit(EXT4_B2C(sbi, s++), buf);
3891        }
3892        if (!count)
3893                return 0;
3894        return EXT4_CLUSTERS_PER_GROUP(sb) -
3895                ext4_count_free(buf, EXT4_CLUSTERS_PER_GROUP(sb) / 8);
3896}
3897
3898/*
3899 * Compute the overhead and stash it in sbi->s_overhead
3900 */
3901int ext4_calculate_overhead(struct super_block *sb)
3902{
3903        struct ext4_sb_info *sbi = EXT4_SB(sb);
3904        struct ext4_super_block *es = sbi->s_es;
3905        struct inode *j_inode;
3906        unsigned int j_blocks, j_inum = le32_to_cpu(es->s_journal_inum);
3907        ext4_group_t i, ngroups = ext4_get_groups_count(sb);
3908        ext4_fsblk_t overhead = 0;
3909        char *buf = (char *) get_zeroed_page(GFP_NOFS);
3910
3911        if (!buf)
3912                return -ENOMEM;
3913
3914        /*
3915         * Compute the overhead (FS structures).  This is constant
3916         * for a given filesystem unless the number of block groups
3917         * changes so we cache the previous value until it does.
3918         */
3919
3920        /*
3921         * All of the blocks before first_data_block are overhead
3922         */
3923        overhead = EXT4_B2C(sbi, le32_to_cpu(es->s_first_data_block));
3924
3925        /*
3926         * Add the overhead found in each block group
3927         */
3928        for (i = 0; i < ngroups; i++) {
3929                int blks;
3930
3931                blks = count_overhead(sb, i, buf);
3932                overhead += blks;
3933                if (blks)
3934                        memset(buf, 0, PAGE_SIZE);
3935                cond_resched();
3936        }
3937
3938        /*
3939         * Add the internal journal blocks whether the journal has been
3940         * loaded or not
3941         */
3942        if (sbi->s_journal && !sbi->s_journal_bdev)
3943                overhead += EXT4_NUM_B2C(sbi, sbi->s_journal->j_total_len);
3944        else if (ext4_has_feature_journal(sb) && !sbi->s_journal && j_inum) {
3945                /* j_inum for internal journal is non-zero */
3946                j_inode = ext4_get_journal_inode(sb, j_inum);
3947                if (j_inode) {
3948                        j_blocks = j_inode->i_size >> sb->s_blocksize_bits;
3949                        overhead += EXT4_NUM_B2C(sbi, j_blocks);
3950                        iput(j_inode);
3951                } else {
3952                        ext4_msg(sb, KERN_ERR, "can't get journal size");
3953                }
3954        }
3955        sbi->s_overhead = overhead;
3956        smp_wmb();
3957        free_page((unsigned long) buf);
3958        return 0;
3959}
3960
3961static void ext4_set_resv_clusters(struct super_block *sb)
3962{
3963        ext4_fsblk_t resv_clusters;
3964        struct ext4_sb_info *sbi = EXT4_SB(sb);
3965
3966        /*
3967         * There's no need to reserve anything when we aren't using extents.
3968         * The space estimates are exact, there are no unwritten extents,
3969         * hole punching doesn't need new metadata... This is needed especially
3970         * to keep ext2/3 backward compatibility.
3971         */
3972        if (!ext4_has_feature_extents(sb))
3973                return;
3974        /*
3975         * By default we reserve 2% or 4096 clusters, whichever is smaller.
3976         * This should cover the situations where we can not afford to run
3977         * out of space like for example punch hole, or converting
3978         * unwritten extents in delalloc path. In most cases such
3979         * allocation would require 1, or 2 blocks, higher numbers are
3980         * very rare.
3981         */
3982        resv_clusters = (ext4_blocks_count(sbi->s_es) >>
3983                         sbi->s_cluster_bits);
3984
3985        do_div(resv_clusters, 50);
3986        resv_clusters = min_t(ext4_fsblk_t, resv_clusters, 4096);
3987
3988        atomic64_set(&sbi->s_resv_clusters, resv_clusters);
3989}
3990
3991static const char *ext4_quota_mode(struct super_block *sb)
3992{
3993#ifdef CONFIG_QUOTA
3994        if (!ext4_quota_capable(sb))
3995                return "none";
3996
3997        if (EXT4_SB(sb)->s_journal && ext4_is_quota_journalled(sb))
3998                return "journalled";
3999        else
4000                return "writeback";
4001#else
4002        return "disabled";
4003#endif
4004}
4005
4006static int ext4_fill_super(struct super_block *sb, void *data, int silent)
4007{
4008        struct dax_device *dax_dev = fs_dax_get_by_bdev(sb->s_bdev);
4009        char *orig_data = kstrdup(data, GFP_KERNEL);
4010        struct buffer_head *bh, **group_desc;
4011        struct ext4_super_block *es = NULL;
4012        struct ext4_sb_info *sbi = kzalloc(sizeof(*sbi), GFP_KERNEL);
4013        struct flex_groups **flex_groups;
4014        ext4_fsblk_t block;
4015        ext4_fsblk_t sb_block = get_sb_block(&data);
4016        ext4_fsblk_t logical_sb_block;
4017        unsigned long offset = 0;
4018        unsigned long journal_devnum = 0;
4019        unsigned long def_mount_opts;
4020        struct inode *root;
4021        const char *descr;
4022        int ret = -ENOMEM;
4023        int blocksize, clustersize;
4024        unsigned int db_count;
4025        unsigned int i;
4026        int needs_recovery, has_huge_files;
4027        __u64 blocks_count;
4028        int err = 0;
4029        unsigned int journal_ioprio = DEFAULT_JOURNAL_IOPRIO;
4030        ext4_group_t first_not_zeroed;
4031
4032        if ((data && !orig_data) || !sbi)
4033                goto out_free_base;
4034
4035        sbi->s_daxdev = dax_dev;
4036        sbi->s_blockgroup_lock =
4037                kzalloc(sizeof(struct blockgroup_lock), GFP_KERNEL);
4038        if (!sbi->s_blockgroup_lock)
4039                goto out_free_base;
4040
4041        sb->s_fs_info = sbi;
4042        sbi->s_sb = sb;
4043        sbi->s_inode_readahead_blks = EXT4_DEF_INODE_READAHEAD_BLKS;
4044        sbi->s_sb_block = sb_block;
4045        sbi->s_sectors_written_start =
4046                part_stat_read(sb->s_bdev, sectors[STAT_WRITE]);
4047
4048        /* Cleanup superblock name */
4049        strreplace(sb->s_id, '/', '!');
4050
4051        /* -EINVAL is default */
4052        ret = -EINVAL;
4053        blocksize = sb_min_blocksize(sb, EXT4_MIN_BLOCK_SIZE);
4054        if (!blocksize) {
4055                ext4_msg(sb, KERN_ERR, "unable to set blocksize");
4056                goto out_fail;
4057        }
4058
4059        /*
4060         * The ext4 superblock will not be buffer aligned for other than 1kB
4061         * block sizes.  We need to calculate the offset from buffer start.
4062         */
4063        if (blocksize != EXT4_MIN_BLOCK_SIZE) {
4064                logical_sb_block = sb_block * EXT4_MIN_BLOCK_SIZE;
4065                offset = do_div(logical_sb_block, blocksize);
4066        } else {
4067                logical_sb_block = sb_block;
4068        }
4069
4070        bh = ext4_sb_bread_unmovable(sb, logical_sb_block);
4071        if (IS_ERR(bh)) {
4072                ext4_msg(sb, KERN_ERR, "unable to read superblock");
4073                ret = PTR_ERR(bh);
4074                goto out_fail;
4075        }
4076        /*
4077         * Note: s_es must be initialized as soon as possible because
4078         *       some ext4 macro-instructions depend on its value
4079         */
4080        es = (struct ext4_super_block *) (bh->b_data + offset);
4081        sbi->s_es = es;
4082        sb->s_magic = le16_to_cpu(es->s_magic);
4083        if (sb->s_magic != EXT4_SUPER_MAGIC)
4084                goto cantfind_ext4;
4085        sbi->s_kbytes_written = le64_to_cpu(es->s_kbytes_written);
4086
4087        /* Warn if metadata_csum and gdt_csum are both set. */
4088        if (ext4_has_feature_metadata_csum(sb) &&
4089            ext4_has_feature_gdt_csum(sb))
4090                ext4_warning(sb, "metadata_csum and uninit_bg are "
4091                             "redundant flags; please run fsck.");
4092
4093        /* Check for a known checksum algorithm */
4094        if (!ext4_verify_csum_type(sb, es)) {
4095                ext4_msg(sb, KERN_ERR, "VFS: Found ext4 filesystem with "
4096                         "unknown checksum algorithm.");
4097                silent = 1;
4098                goto cantfind_ext4;
4099        }
4100
4101        /* Load the checksum driver */
4102        sbi->s_chksum_driver = crypto_alloc_shash("crc32c", 0, 0);
4103        if (IS_ERR(sbi->s_chksum_driver)) {
4104                ext4_msg(sb, KERN_ERR, "Cannot load crc32c driver.");
4105                ret = PTR_ERR(sbi->s_chksum_driver);
4106                sbi->s_chksum_driver = NULL;
4107                goto failed_mount;
4108        }
4109
4110        /* Check superblock checksum */
4111        if (!ext4_superblock_csum_verify(sb, es)) {
4112                ext4_msg(sb, KERN_ERR, "VFS: Found ext4 filesystem with "
4113                         "invalid superblock checksum.  Run e2fsck?");
4114                silent = 1;
4115                ret = -EFSBADCRC;
4116                goto cantfind_ext4;
4117        }
4118
4119        /* Precompute checksum seed for all metadata */
4120        if (ext4_has_feature_csum_seed(sb))
4121                sbi->s_csum_seed = le32_to_cpu(es->s_checksum_seed);
4122        else if (ext4_has_metadata_csum(sb) || ext4_has_feature_ea_inode(sb))
4123                sbi->s_csum_seed = ext4_chksum(sbi, ~0, es->s_uuid,
4124                                               sizeof(es->s_uuid));
4125
4126        /* Set defaults before we parse the mount options */
4127        def_mount_opts = le32_to_cpu(es->s_default_mount_opts);
4128        set_opt(sb, INIT_INODE_TABLE);
4129        if (def_mount_opts & EXT4_DEFM_DEBUG)
4130                set_opt(sb, DEBUG);
4131        if (def_mount_opts & EXT4_DEFM_BSDGROUPS)
4132                set_opt(sb, GRPID);
4133        if (def_mount_opts & EXT4_DEFM_UID16)
4134                set_opt(sb, NO_UID32);
4135        /* xattr user namespace & acls are now defaulted on */
4136        set_opt(sb, XATTR_USER);
4137#ifdef CONFIG_EXT4_FS_POSIX_ACL
4138        set_opt(sb, POSIX_ACL);
4139#endif
4140        if (ext4_has_feature_fast_commit(sb))
4141                set_opt2(sb, JOURNAL_FAST_COMMIT);
4142        /* don't forget to enable journal_csum when metadata_csum is enabled. */
4143        if (ext4_has_metadata_csum(sb))
4144                set_opt(sb, JOURNAL_CHECKSUM);
4145
4146        if ((def_mount_opts & EXT4_DEFM_JMODE) == EXT4_DEFM_JMODE_DATA)
4147                set_opt(sb, JOURNAL_DATA);
4148        else if ((def_mount_opts & EXT4_DEFM_JMODE) == EXT4_DEFM_JMODE_ORDERED)
4149                set_opt(sb, ORDERED_DATA);
4150        else if ((def_mount_opts & EXT4_DEFM_JMODE) == EXT4_DEFM_JMODE_WBACK)
4151                set_opt(sb, WRITEBACK_DATA);
4152
4153        if (le16_to_cpu(sbi->s_es->s_errors) == EXT4_ERRORS_PANIC)
4154                set_opt(sb, ERRORS_PANIC);
4155        else if (le16_to_cpu(sbi->s_es->s_errors) == EXT4_ERRORS_CONTINUE)
4156                set_opt(sb, ERRORS_CONT);
4157        else
4158                set_opt(sb, ERRORS_RO);
4159        /* block_validity enabled by default; disable with noblock_validity */
4160        set_opt(sb, BLOCK_VALIDITY);
4161        if (def_mount_opts & EXT4_DEFM_DISCARD)
4162                set_opt(sb, DISCARD);
4163
4164        sbi->s_resuid = make_kuid(&init_user_ns, le16_to_cpu(es->s_def_resuid));
4165        sbi->s_resgid = make_kgid(&init_user_ns, le16_to_cpu(es->s_def_resgid));
4166        sbi->s_commit_interval = JBD2_DEFAULT_MAX_COMMIT_AGE * HZ;
4167        sbi->s_min_batch_time = EXT4_DEF_MIN_BATCH_TIME;
4168        sbi->s_max_batch_time = EXT4_DEF_MAX_BATCH_TIME;
4169
4170        if ((def_mount_opts & EXT4_DEFM_NOBARRIER) == 0)
4171                set_opt(sb, BARRIER);
4172
4173        /*
4174         * enable delayed allocation by default
4175         * Use -o nodelalloc to turn it off
4176         */
4177        if (!IS_EXT3_SB(sb) && !IS_EXT2_SB(sb) &&
4178            ((def_mount_opts & EXT4_DEFM_NODELALLOC) == 0))
4179                set_opt(sb, DELALLOC);
4180
4181        /*
4182         * set default s_li_wait_mult for lazyinit, for the case there is
4183         * no mount option specified.
4184         */
4185        sbi->s_li_wait_mult = EXT4_DEF_LI_WAIT_MULT;
4186
4187        if (le32_to_cpu(es->s_log_block_size) >
4188            (EXT4_MAX_BLOCK_LOG_SIZE - EXT4_MIN_BLOCK_LOG_SIZE)) {
4189                ext4_msg(sb, KERN_ERR,
4190                         "Invalid log block size: %u",
4191                         le32_to_cpu(es->s_log_block_size));
4192                goto failed_mount;
4193        }
4194        if (le32_to_cpu(es->s_log_cluster_size) >
4195            (EXT4_MAX_CLUSTER_LOG_SIZE - EXT4_MIN_BLOCK_LOG_SIZE)) {
4196                ext4_msg(sb, KERN_ERR,
4197                         "Invalid log cluster size: %u",
4198                         le32_to_cpu(es->s_log_cluster_size));
4199                goto failed_mount;
4200        }
4201
4202        blocksize = EXT4_MIN_BLOCK_SIZE << le32_to_cpu(es->s_log_block_size);
4203
4204        if (blocksize == PAGE_SIZE)
4205                set_opt(sb, DIOREAD_NOLOCK);
4206
4207        if (le32_to_cpu(es->s_rev_level) == EXT4_GOOD_OLD_REV) {
4208                sbi->s_inode_size = EXT4_GOOD_OLD_INODE_SIZE;
4209                sbi->s_first_ino = EXT4_GOOD_OLD_FIRST_INO;
4210        } else {
4211                sbi->s_inode_size = le16_to_cpu(es->s_inode_size);
4212                sbi->s_first_ino = le32_to_cpu(es->s_first_ino);
4213                if (sbi->s_first_ino < EXT4_GOOD_OLD_FIRST_INO) {
4214                        ext4_msg(sb, KERN_ERR, "invalid first ino: %u",
4215                                 sbi->s_first_ino);
4216                        goto failed_mount;
4217                }
4218                if ((sbi->s_inode_size < EXT4_GOOD_OLD_INODE_SIZE) ||
4219                    (!is_power_of_2(sbi->s_inode_size)) ||
4220                    (sbi->s_inode_size > blocksize)) {
4221                        ext4_msg(sb, KERN_ERR,
4222                               "unsupported inode size: %d",
4223                               sbi->s_inode_size);
4224                        ext4_msg(sb, KERN_ERR, "blocksize: %d", blocksize);
4225                        goto failed_mount;
4226                }
4227                /*
4228                 * i_atime_extra is the last extra field available for
4229                 * [acm]times in struct ext4_inode. Checking for that
4230                 * field should suffice to ensure we have extra space
4231                 * for all three.
4232                 */
4233                if (sbi->s_inode_size >= offsetof(struct ext4_inode, i_atime_extra) +
4234                        sizeof(((struct ext4_inode *)0)->i_atime_extra)) {
4235                        sb->s_time_gran = 1;
4236                        sb->s_time_max = EXT4_EXTRA_TIMESTAMP_MAX;
4237                } else {
4238                        sb->s_time_gran = NSEC_PER_SEC;
4239                        sb->s_time_max = EXT4_NON_EXTRA_TIMESTAMP_MAX;
4240                }
4241                sb->s_time_min = EXT4_TIMESTAMP_MIN;
4242        }
4243        if (sbi->s_inode_size > EXT4_GOOD_OLD_INODE_SIZE) {
4244                sbi->s_want_extra_isize = sizeof(struct ext4_inode) -
4245                        EXT4_GOOD_OLD_INODE_SIZE;
4246                if (ext4_has_feature_extra_isize(sb)) {
4247                        unsigned v, max = (sbi->s_inode_size -
4248                                           EXT4_GOOD_OLD_INODE_SIZE);
4249
4250                        v = le16_to_cpu(es->s_want_extra_isize);
4251                        if (v > max) {
4252                                ext4_msg(sb, KERN_ERR,
4253                                         "bad s_want_extra_isize: %d", v);
4254                                goto failed_mount;
4255                        }
4256                        if (sbi->s_want_extra_isize < v)
4257                                sbi->s_want_extra_isize = v;
4258
4259                        v = le16_to_cpu(es->s_min_extra_isize);
4260                        if (v > max) {
4261                                ext4_msg(sb, KERN_ERR,
4262                                         "bad s_min_extra_isize: %d", v);
4263                                goto failed_mount;
4264                        }
4265                        if (sbi->s_want_extra_isize < v)
4266                                sbi->s_want_extra_isize = v;
4267                }
4268        }
4269
4270        if (sbi->s_es->s_mount_opts[0]) {
4271                char *s_mount_opts = kstrndup(sbi->s_es->s_mount_opts,
4272                                              sizeof(sbi->s_es->s_mount_opts),
4273                                              GFP_KERNEL);
4274                if (!s_mount_opts)
4275                        goto failed_mount;
4276                if (!parse_options(s_mount_opts, sb, &journal_devnum,
4277                                   &journal_ioprio, 0)) {
4278                        ext4_msg(sb, KERN_WARNING,
4279                                 "failed to parse options in superblock: %s",
4280                                 s_mount_opts);
4281                }
4282                kfree(s_mount_opts);
4283        }
4284        sbi->s_def_mount_opt = sbi->s_mount_opt;
4285        if (!parse_options((char *) data, sb, &journal_devnum,
4286                           &journal_ioprio, 0))
4287                goto failed_mount;
4288
4289#ifdef CONFIG_UNICODE
4290        if (ext4_has_feature_casefold(sb) && !sb->s_encoding) {
4291                const struct ext4_sb_encodings *encoding_info;
4292                struct unicode_map *encoding;
4293                __u16 encoding_flags;
4294
4295                if (ext4_has_feature_encrypt(sb)) {
4296                        ext4_msg(sb, KERN_ERR,
4297                                 "Can't mount with encoding and encryption");
4298                        goto failed_mount;
4299                }
4300
4301                if (ext4_sb_read_encoding(es, &encoding_info,
4302                                          &encoding_flags)) {
4303                        ext4_msg(sb, KERN_ERR,
4304                                 "Encoding requested by superblock is unknown");
4305                        goto failed_mount;
4306                }
4307
4308                encoding = utf8_load(encoding_info->version);
4309                if (IS_ERR(encoding)) {
4310                        ext4_msg(sb, KERN_ERR,
4311                                 "can't mount with superblock charset: %s-%s "
4312                                 "not supported by the kernel. flags: 0x%x.",
4313                                 encoding_info->name, encoding_info->version,
4314                                 encoding_flags);
4315                        goto failed_mount;
4316                }
4317                ext4_msg(sb, KERN_INFO,"Using encoding defined by superblock: "
4318                         "%s-%s with flags 0x%hx", encoding_info->name,
4319                         encoding_info->version?:"\b", encoding_flags);
4320
4321                sb->s_encoding = encoding;
4322                sb->s_encoding_flags = encoding_flags;
4323        }
4324#endif
4325
4326        if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA) {
4327                printk_once(KERN_WARNING "EXT4-fs: Warning: mounting with data=journal disables delayed allocation, dioread_nolock, O_DIRECT and fast_commit support!\n");
4328                /* can't mount with both data=journal and dioread_nolock. */
4329                clear_opt(sb, DIOREAD_NOLOCK);
4330                clear_opt2(sb, JOURNAL_FAST_COMMIT);
4331                if (test_opt2(sb, EXPLICIT_DELALLOC)) {
4332                        ext4_msg(sb, KERN_ERR, "can't mount with "
4333                                 "both data=journal and delalloc");
4334                        goto failed_mount;
4335                }
4336                if (test_opt(sb, DAX_ALWAYS)) {
4337                        ext4_msg(sb, KERN_ERR, "can't mount with "
4338                                 "both data=journal and dax");
4339                        goto failed_mount;
4340                }
4341                if (ext4_has_feature_encrypt(sb)) {
4342                        ext4_msg(sb, KERN_WARNING,
4343                                 "encrypted files will use data=ordered "
4344                                 "instead of data journaling mode");
4345                }
4346                if (test_opt(sb, DELALLOC))
4347                        clear_opt(sb, DELALLOC);
4348        } else {
4349                sb->s_iflags |= SB_I_CGROUPWB;
4350        }
4351
4352        sb->s_flags = (sb->s_flags & ~SB_POSIXACL) |
4353                (test_opt(sb, POSIX_ACL) ? SB_POSIXACL : 0);
4354
4355        if (le32_to_cpu(es->s_rev_level) == EXT4_GOOD_OLD_REV &&
4356            (ext4_has_compat_features(sb) ||
4357             ext4_has_ro_compat_features(sb) ||
4358             ext4_has_incompat_features(sb)))
4359                ext4_msg(sb, KERN_WARNING,
4360                       "feature flags set on rev 0 fs, "
4361                       "running e2fsck is recommended");
4362
4363        if (es->s_creator_os == cpu_to_le32(EXT4_OS_HURD)) {
4364                set_opt2(sb, HURD_COMPAT);
4365                if (ext4_has_feature_64bit(sb)) {
4366                        ext4_msg(sb, KERN_ERR,
4367                                 "The Hurd can't support 64-bit file systems");
4368                        goto failed_mount;
4369                }
4370
4371                /*
4372                 * ea_inode feature uses l_i_version field which is not
4373                 * available in HURD_COMPAT mode.
4374                 */
4375                if (ext4_has_feature_ea_inode(sb)) {
4376                        ext4_msg(sb, KERN_ERR,
4377                                 "ea_inode feature is not supported for Hurd");
4378                        goto failed_mount;
4379                }
4380        }
4381
4382        if (IS_EXT2_SB(sb)) {
4383                if (ext2_feature_set_ok(sb))
4384                        ext4_msg(sb, KERN_INFO, "mounting ext2 file system "
4385                                 "using the ext4 subsystem");
4386                else {
4387                        /*
4388                         * If we're probing be silent, if this looks like
4389                         * it's actually an ext[34] filesystem.
4390                         */
4391                        if (silent && ext4_feature_set_ok(sb, sb_rdonly(sb)))
4392                                goto failed_mount;
4393                        ext4_msg(sb, KERN_ERR, "couldn't mount as ext2 due "
4394                                 "to feature incompatibilities");
4395                        goto failed_mount;
4396                }
4397        }
4398
4399        if (IS_EXT3_SB(sb)) {
4400                if (ext3_feature_set_ok(sb))
4401                        ext4_msg(sb, KERN_INFO, "mounting ext3 file system "
4402                                 "using the ext4 subsystem");
4403                else {
4404                        /*
4405                         * If we're probing be silent, if this looks like
4406                         * it's actually an ext4 filesystem.
4407                         */
4408                        if (silent && ext4_feature_set_ok(sb, sb_rdonly(sb)))
4409                                goto failed_mount;
4410                        ext4_msg(sb, KERN_ERR, "couldn't mount as ext3 due "
4411                                 "to feature incompatibilities");
4412                        goto failed_mount;
4413                }
4414        }
4415
4416        /*
4417         * Check feature flags regardless of the revision level, since we
4418         * previously didn't change the revision level when setting the flags,
4419         * so there is a chance incompat flags are set on a rev 0 filesystem.
4420         */
4421        if (!ext4_feature_set_ok(sb, (sb_rdonly(sb))))
4422                goto failed_mount;
4423
4424        if (le16_to_cpu(sbi->s_es->s_reserved_gdt_blocks) > (blocksize / 4)) {
4425                ext4_msg(sb, KERN_ERR,
4426                         "Number of reserved GDT blocks insanely large: %d",
4427                         le16_to_cpu(sbi->s_es->s_reserved_gdt_blocks));
4428                goto failed_mount;
4429        }
4430
4431        if (bdev_dax_supported(sb->s_bdev, blocksize))
4432                set_bit(EXT4_FLAGS_BDEV_IS_DAX, &sbi->s_ext4_flags);
4433
4434        if (sbi->s_mount_opt & EXT4_MOUNT_DAX_ALWAYS) {
4435                if (ext4_has_feature_inline_data(sb)) {
4436                        ext4_msg(sb, KERN_ERR, "Cannot use DAX on a filesystem"
4437                                        " that may contain inline data");
4438                        goto failed_mount;
4439                }
4440                if (!test_bit(EXT4_FLAGS_BDEV_IS_DAX, &sbi->s_ext4_flags)) {
4441                        ext4_msg(sb, KERN_ERR,
4442                                "DAX unsupported by block device.");
4443                        goto failed_mount;
4444                }
4445        }
4446
4447        if (ext4_has_feature_encrypt(sb) && es->s_encryption_level) {
4448                ext4_msg(sb, KERN_ERR, "Unsupported encryption level %d",
4449                         es->s_encryption_level);
4450                goto failed_mount;
4451        }
4452
4453        if (sb->s_blocksize != blocksize) {
4454                /* Validate the filesystem blocksize */
4455                if (!sb_set_blocksize(sb, blocksize)) {
4456                        ext4_msg(sb, KERN_ERR, "bad block size %d",
4457                                        blocksize);
4458                        goto failed_mount;
4459                }
4460
4461                brelse(bh);
4462                logical_sb_block = sb_block * EXT4_MIN_BLOCK_SIZE;
4463                offset = do_div(logical_sb_block, blocksize);
4464                bh = ext4_sb_bread_unmovable(sb, logical_sb_block);
4465                if (IS_ERR(bh)) {
4466                        ext4_msg(sb, KERN_ERR,
4467                               "Can't read superblock on 2nd try");
4468                        ret = PTR_ERR(bh);
4469                        bh = NULL;
4470                        goto failed_mount;
4471                }
4472                es = (struct ext4_super_block *)(bh->b_data + offset);
4473                sbi->s_es = es;
4474                if (es->s_magic != cpu_to_le16(EXT4_SUPER_MAGIC)) {
4475                        ext4_msg(sb, KERN_ERR,
4476                               "Magic mismatch, very weird!");
4477                        goto failed_mount;
4478                }
4479        }
4480
4481        has_huge_files = ext4_has_feature_huge_file(sb);
4482        sbi->s_bitmap_maxbytes = ext4_max_bitmap_size(sb->s_blocksize_bits,
4483                                                      has_huge_files);
4484        sb->s_maxbytes = ext4_max_size(sb->s_blocksize_bits, has_huge_files);
4485
4486        sbi->s_desc_size = le16_to_cpu(es->s_desc_size);
4487        if (ext4_has_feature_64bit(sb)) {
4488                if (sbi->s_desc_size < EXT4_MIN_DESC_SIZE_64BIT ||
4489                    sbi->s_desc_size > EXT4_MAX_DESC_SIZE ||
4490                    !is_power_of_2(sbi->s_desc_size)) {
4491                        ext4_msg(sb, KERN_ERR,
4492                               "unsupported descriptor size %lu",
4493                               sbi->s_desc_size);
4494                        goto failed_mount;
4495                }
4496        } else
4497                sbi->s_desc_size = EXT4_MIN_DESC_SIZE;
4498
4499        sbi->s_blocks_per_group = le32_to_cpu(es->s_blocks_per_group);
4500        sbi->s_inodes_per_group = le32_to_cpu(es->s_inodes_per_group);
4501
4502        sbi->s_inodes_per_block = blocksize / EXT4_INODE_SIZE(sb);
4503        if (sbi->s_inodes_per_block == 0)
4504                goto cantfind_ext4;
4505        if (sbi->s_inodes_per_group < sbi->s_inodes_per_block ||
4506            sbi->s_inodes_per_group > blocksize * 8) {
4507                ext4_msg(sb, KERN_ERR, "invalid inodes per group: %lu\n",
4508                         sbi->s_inodes_per_group);
4509                goto failed_mount;
4510        }
4511        sbi->s_itb_per_group = sbi->s_inodes_per_group /
4512                                        sbi->s_inodes_per_block;
4513        sbi->s_desc_per_block = blocksize / EXT4_DESC_SIZE(sb);
4514        sbi->s_sbh = bh;
4515        sbi->s_mount_state = le16_to_cpu(es->s_state);
4516        sbi->s_addr_per_block_bits = ilog2(EXT4_ADDR_PER_BLOCK(sb));
4517        sbi->s_desc_per_block_bits = ilog2(EXT4_DESC_PER_BLOCK(sb));
4518
4519        for (i = 0; i < 4; i++)
4520                sbi->s_hash_seed[i] = le32_to_cpu(es->s_hash_seed[i]);
4521        sbi->s_def_hash_version = es->s_def_hash_version;
4522        if (ext4_has_feature_dir_index(sb)) {
4523                i = le32_to_cpu(es->s_flags);
4524                if (i & EXT2_FLAGS_UNSIGNED_HASH)
4525                        sbi->s_hash_unsigned = 3;
4526                else if ((i & EXT2_FLAGS_SIGNED_HASH) == 0) {
4527#ifdef __CHAR_UNSIGNED__
4528                        if (!sb_rdonly(sb))
4529                                es->s_flags |=
4530                                        cpu_to_le32(EXT2_FLAGS_UNSIGNED_HASH);
4531                        sbi->s_hash_unsigned = 3;
4532#else
4533                        if (!sb_rdonly(sb))
4534                                es->s_flags |=
4535                                        cpu_to_le32(EXT2_FLAGS_SIGNED_HASH);
4536#endif
4537                }
4538        }
4539
4540        /* Handle clustersize */
4541        clustersize = BLOCK_SIZE << le32_to_cpu(es->s_log_cluster_size);
4542        if (ext4_has_feature_bigalloc(sb)) {
4543                if (clustersize < blocksize) {
4544                        ext4_msg(sb, KERN_ERR,
4545                                 "cluster size (%d) smaller than "
4546                                 "block size (%d)", clustersize, blocksize);
4547                        goto failed_mount;
4548                }
4549                sbi->s_cluster_bits = le32_to_cpu(es->s_log_cluster_size) -
4550                        le32_to_cpu(es->s_log_block_size);
4551                sbi->s_clusters_per_group =
4552                        le32_to_cpu(es->s_clusters_per_group);
4553                if (sbi->s_clusters_per_group > blocksize * 8) {
4554                        ext4_msg(sb, KERN_ERR,
4555                                 "#clusters per group too big: %lu",
4556                                 sbi->s_clusters_per_group);
4557                        goto failed_mount;
4558                }
4559                if (sbi->s_blocks_per_group !=
4560                    (sbi->s_clusters_per_group * (clustersize / blocksize))) {
4561                        ext4_msg(sb, KERN_ERR, "blocks per group (%lu) and "
4562                                 "clusters per group (%lu) inconsistent",
4563                                 sbi->s_blocks_per_group,
4564                                 sbi->s_clusters_per_group);
4565                        goto failed_mount;
4566                }
4567        } else {
4568                if (clustersize != blocksize) {
4569                        ext4_msg(sb, KERN_ERR,
4570                                 "fragment/cluster size (%d) != "
4571                                 "block size (%d)", clustersize, blocksize);
4572                        goto failed_mount;
4573                }
4574                if (sbi->s_blocks_per_group > blocksize * 8) {
4575                        ext4_msg(sb, KERN_ERR,
4576                                 "#blocks per group too big: %lu",
4577                                 sbi->s_blocks_per_group);
4578                        goto failed_mount;
4579                }
4580                sbi->s_clusters_per_group = sbi->s_blocks_per_group;
4581                sbi->s_cluster_bits = 0;
4582        }
4583        sbi->s_cluster_ratio = clustersize / blocksize;
4584
4585        /* Do we have standard group size of clustersize * 8 blocks ? */
4586        if (sbi->s_blocks_per_group == clustersize << 3)
4587                set_opt2(sb, STD_GROUP_SIZE);
4588
4589        /*
4590         * Test whether we have more sectors than will fit in sector_t,
4591         * and whether the max offset is addressable by the page cache.
4592         */
4593        err = generic_check_addressable(sb->s_blocksize_bits,
4594                                        ext4_blocks_count(es));
4595        if (err) {
4596                ext4_msg(sb, KERN_ERR, "filesystem"
4597                         " too large to mount safely on this system");
4598                goto failed_mount;
4599        }
4600
4601        if (EXT4_BLOCKS_PER_GROUP(sb) == 0)
4602                goto cantfind_ext4;
4603
4604        /* check blocks count against device size */
4605        blocks_count = sb->s_bdev->bd_inode->i_size >> sb->s_blocksize_bits;
4606        if (blocks_count && ext4_blocks_count(es) > blocks_count) {
4607                ext4_msg(sb, KERN_WARNING, "bad geometry: block count %llu "
4608                       "exceeds size of device (%llu blocks)",
4609                       ext4_blocks_count(es), blocks_count);
4610                goto failed_mount;
4611        }
4612
4613        /*
4614         * It makes no sense for the first data block to be beyond the end
4615         * of the filesystem.
4616         */
4617        if (le32_to_cpu(es->s_first_data_block) >= ext4_blocks_count(es)) {
4618                ext4_msg(sb, KERN_WARNING, "bad geometry: first data "
4619                         "block %u is beyond end of filesystem (%llu)",
4620                         le32_to_cpu(es->s_first_data_block),
4621                         ext4_blocks_count(es));
4622                goto failed_mount;
4623        }
4624        if ((es->s_first_data_block == 0) && (es->s_log_block_size == 0) &&
4625            (sbi->s_cluster_ratio == 1)) {
4626                ext4_msg(sb, KERN_WARNING, "bad geometry: first data "
4627                         "block is 0 with a 1k block and cluster size");
4628                goto failed_mount;
4629        }
4630
4631        blocks_count = (ext4_blocks_count(es) -
4632                        le32_to_cpu(es->s_first_data_block) +
4633                        EXT4_BLOCKS_PER_GROUP(sb) - 1);
4634        do_div(blocks_count, EXT4_BLOCKS_PER_GROUP(sb));
4635        if (blocks_count > ((uint64_t)1<<32) - EXT4_DESC_PER_BLOCK(sb)) {
4636                ext4_msg(sb, KERN_WARNING, "groups count too large: %llu "
4637                       "(block count %llu, first data block %u, "
4638                       "blocks per group %lu)", blocks_count,
4639                       ext4_blocks_count(es),
4640                       le32_to_cpu(es->s_first_data_block),
4641                       EXT4_BLOCKS_PER_GROUP(sb));
4642                goto failed_mount;
4643        }
4644        sbi->s_groups_count = blocks_count;
4645        sbi->s_blockfile_groups = min_t(ext4_group_t, sbi->s_groups_count,
4646                        (EXT4_MAX_BLOCK_FILE_PHYS / EXT4_BLOCKS_PER_GROUP(sb)));
4647        if (((u64)sbi->s_groups_count * sbi->s_inodes_per_group) !=
4648            le32_to_cpu(es->s_inodes_count)) {
4649                ext4_msg(sb, KERN_ERR, "inodes count not valid: %u vs %llu",
4650                         le32_to_cpu(es->s_inodes_count),
4651                         ((u64)sbi->s_groups_count * sbi->s_inodes_per_group));
4652                ret = -EINVAL;
4653                goto failed_mount;
4654        }
4655        db_count = (sbi->s_groups_count + EXT4_DESC_PER_BLOCK(sb) - 1) /
4656                   EXT4_DESC_PER_BLOCK(sb);
4657        if (ext4_has_feature_meta_bg(sb)) {
4658                if (le32_to_cpu(es->s_first_meta_bg) > db_count) {
4659                        ext4_msg(sb, KERN_WARNING,
4660                                 "first meta block group too large: %u "
4661                                 "(group descriptor block count %u)",
4662                                 le32_to_cpu(es->s_first_meta_bg), db_count);
4663                        goto failed_mount;
4664                }
4665        }
4666        rcu_assign_pointer(sbi->s_group_desc,
4667                           kvmalloc_array(db_count,
4668                                          sizeof(struct buffer_head *),
4669                                          GFP_KERNEL));
4670        if (sbi->s_group_desc == NULL) {
4671                ext4_msg(sb, KERN_ERR, "not enough memory");
4672                ret = -ENOMEM;
4673                goto failed_mount;
4674        }
4675
4676        bgl_lock_init(sbi->s_blockgroup_lock);
4677
4678        /* Pre-read the descriptors into the buffer cache */
4679        for (i = 0; i < db_count; i++) {
4680                block = descriptor_loc(sb, logical_sb_block, i);
4681                ext4_sb_breadahead_unmovable(sb, block);
4682        }
4683
4684        for (i = 0; i < db_count; i++) {
4685                struct buffer_head *bh;
4686
4687                block = descriptor_loc(sb, logical_sb_block, i);
4688                bh = ext4_sb_bread_unmovable(sb, block);
4689                if (IS_ERR(bh)) {
4690                        ext4_msg(sb, KERN_ERR,
4691                               "can't read group descriptor %d", i);
4692                        db_count = i;
4693                        ret = PTR_ERR(bh);
4694                        goto failed_mount2;
4695                }
4696                rcu_read_lock();
4697                rcu_dereference(sbi->s_group_desc)[i] = bh;
4698                rcu_read_unlock();
4699        }
4700        sbi->s_gdb_count = db_count;
4701        if (!ext4_check_descriptors(sb, logical_sb_block, &first_not_zeroed)) {
4702                ext4_msg(sb, KERN_ERR, "group descriptors corrupted!");
4703                ret = -EFSCORRUPTED;
4704                goto failed_mount2;
4705        }
4706
4707        timer_setup(&sbi->s_err_report, print_daily_error_info, 0);
4708        spin_lock_init(&sbi->s_error_lock);
4709        INIT_WORK(&sbi->s_error_work, flush_stashed_error_work);
4710
4711        /* Register extent status tree shrinker */
4712        if (ext4_es_register_shrinker(sbi))
4713                goto failed_mount3;
4714
4715        sbi->s_stripe = ext4_get_stripe_size(sbi);
4716        sbi->s_extent_max_zeroout_kb = 32;
4717
4718        /*
4719         * set up enough so that it can read an inode
4720         */
4721        sb->s_op = &ext4_sops;
4722        sb->s_export_op = &ext4_export_ops;
4723        sb->s_xattr = ext4_xattr_handlers;
4724#ifdef CONFIG_FS_ENCRYPTION
4725        sb->s_cop = &ext4_cryptops;
4726#endif
4727#ifdef CONFIG_FS_VERITY
4728        sb->s_vop = &ext4_verityops;
4729#endif
4730#ifdef CONFIG_QUOTA
4731        sb->dq_op = &ext4_quota_operations;
4732        if (ext4_has_feature_quota(sb))
4733                sb->s_qcop = &dquot_quotactl_sysfile_ops;
4734        else
4735                sb->s_qcop = &ext4_qctl_operations;
4736        sb->s_quota_types = QTYPE_MASK_USR | QTYPE_MASK_GRP | QTYPE_MASK_PRJ;
4737#endif
4738        memcpy(&sb->s_uuid, es->s_uuid, sizeof(es->s_uuid));
4739
4740        INIT_LIST_HEAD(&sbi->s_orphan); /* unlinked but open files */
4741        mutex_init(&sbi->s_orphan_lock);
4742
4743        /* Initialize fast commit stuff */
4744        atomic_set(&sbi->s_fc_subtid, 0);
4745        atomic_set(&sbi->s_fc_ineligible_updates, 0);
4746        INIT_LIST_HEAD(&sbi->s_fc_q[FC_Q_MAIN]);
4747        INIT_LIST_HEAD(&sbi->s_fc_q[FC_Q_STAGING]);
4748        INIT_LIST_HEAD(&sbi->s_fc_dentry_q[FC_Q_MAIN]);
4749        INIT_LIST_HEAD(&sbi->s_fc_dentry_q[FC_Q_STAGING]);
4750        sbi->s_fc_bytes = 0;
4751        ext4_clear_mount_flag(sb, EXT4_MF_FC_INELIGIBLE);
4752        ext4_clear_mount_flag(sb, EXT4_MF_FC_COMMITTING);
4753        spin_lock_init(&sbi->s_fc_lock);
4754        memset(&sbi->s_fc_stats, 0, sizeof(sbi->s_fc_stats));
4755        sbi->s_fc_replay_state.fc_regions = NULL;
4756        sbi->s_fc_replay_state.fc_regions_size = 0;
4757        sbi->s_fc_replay_state.fc_regions_used = 0;
4758        sbi->s_fc_replay_state.fc_regions_valid = 0;
4759        sbi->s_fc_replay_state.fc_modified_inodes = NULL;
4760        sbi->s_fc_replay_state.fc_modified_inodes_size = 0;
4761        sbi->s_fc_replay_state.fc_modified_inodes_used = 0;
4762
4763        sb->s_root = NULL;
4764
4765        needs_recovery = (es->s_last_orphan != 0 ||
4766                          ext4_has_feature_journal_needs_recovery(sb));
4767
4768        if (ext4_has_feature_mmp(sb) && !sb_rdonly(sb))
4769                if (ext4_multi_mount_protect(sb, le64_to_cpu(es->s_mmp_block)))
4770                        goto failed_mount3a;
4771
4772        /*
4773         * The first inode we look at is the journal inode.  Don't try
4774         * root first: it may be modified in the journal!
4775         */
4776        if (!test_opt(sb, NOLOAD) && ext4_has_feature_journal(sb)) {
4777                err = ext4_load_journal(sb, es, journal_devnum);
4778                if (err)
4779                        goto failed_mount3a;
4780        } else if (test_opt(sb, NOLOAD) && !sb_rdonly(sb) &&
4781                   ext4_has_feature_journal_needs_recovery(sb)) {
4782                ext4_msg(sb, KERN_ERR, "required journal recovery "
4783                       "suppressed and not mounted read-only");
4784                goto failed_mount_wq;
4785        } else {
4786                /* Nojournal mode, all journal mount options are illegal */
4787                if (test_opt2(sb, EXPLICIT_JOURNAL_CHECKSUM)) {
4788                        ext4_msg(sb, KERN_ERR, "can't mount with "
4789                                 "journal_checksum, fs mounted w/o journal");
4790                        goto failed_mount_wq;
4791                }
4792                if (test_opt(sb, JOURNAL_ASYNC_COMMIT)) {
4793                        ext4_msg(sb, KERN_ERR, "can't mount with "
4794                                 "journal_async_commit, fs mounted w/o journal");
4795                        goto failed_mount_wq;
4796                }
4797                if (sbi->s_commit_interval != JBD2_DEFAULT_MAX_COMMIT_AGE*HZ) {
4798                        ext4_msg(sb, KERN_ERR, "can't mount with "
4799                                 "commit=%lu, fs mounted w/o journal",
4800                                 sbi->s_commit_interval / HZ);
4801                        goto failed_mount_wq;
4802                }
4803                if (EXT4_MOUNT_DATA_FLAGS &
4804                    (sbi->s_mount_opt ^ sbi->s_def_mount_opt)) {
4805                        ext4_msg(sb, KERN_ERR, "can't mount with "
4806                                 "data=, fs mounted w/o journal");
4807                        goto failed_mount_wq;
4808                }
4809                sbi->s_def_mount_opt &= ~EXT4_MOUNT_JOURNAL_CHECKSUM;
4810                clear_opt(sb, JOURNAL_CHECKSUM);
4811                clear_opt(sb, DATA_FLAGS);
4812                clear_opt2(sb, JOURNAL_FAST_COMMIT);
4813                sbi->s_journal = NULL;
4814                needs_recovery = 0;
4815                goto no_journal;
4816        }
4817
4818        if (ext4_has_feature_64bit(sb) &&
4819            !jbd2_journal_set_features(EXT4_SB(sb)->s_journal, 0, 0,
4820                                       JBD2_FEATURE_INCOMPAT_64BIT)) {
4821                ext4_msg(sb, KERN_ERR, "Failed to set 64-bit journal feature");
4822                goto failed_mount_wq;
4823        }
4824
4825        if (!set_journal_csum_feature_set(sb)) {
4826                ext4_msg(sb, KERN_ERR, "Failed to set journal checksum "
4827                         "feature set");
4828                goto failed_mount_wq;
4829        }
4830
4831        if (test_opt2(sb, JOURNAL_FAST_COMMIT) &&
4832                !jbd2_journal_set_features(EXT4_SB(sb)->s_journal, 0, 0,
4833                                          JBD2_FEATURE_INCOMPAT_FAST_COMMIT)) {
4834                ext4_msg(sb, KERN_ERR,
4835                        "Failed to set fast commit journal feature");
4836                goto failed_mount_wq;
4837        }
4838
4839        /* We have now updated the journal if required, so we can
4840         * validate the data journaling mode. */
4841        switch (test_opt(sb, DATA_FLAGS)) {
4842        case 0:
4843                /* No mode set, assume a default based on the journal
4844                 * capabilities: ORDERED_DATA if the journal can
4845                 * cope, else JOURNAL_DATA
4846                 */
4847                if (jbd2_journal_check_available_features
4848                    (sbi->s_journal, 0, 0, JBD2_FEATURE_INCOMPAT_REVOKE)) {
4849                        set_opt(sb, ORDERED_DATA);
4850                        sbi->s_def_mount_opt |= EXT4_MOUNT_ORDERED_DATA;
4851                } else {
4852                        set_opt(sb, JOURNAL_DATA);
4853                        sbi->s_def_mount_opt |= EXT4_MOUNT_JOURNAL_DATA;
4854                }
4855                break;
4856
4857        case EXT4_MOUNT_ORDERED_DATA:
4858        case EXT4_MOUNT_WRITEBACK_DATA:
4859                if (!jbd2_journal_check_available_features
4860                    (sbi->s_journal, 0, 0, JBD2_FEATURE_INCOMPAT_REVOKE)) {
4861                        ext4_msg(sb, KERN_ERR, "Journal does not support "
4862                               "requested data journaling mode");
4863                        goto failed_mount_wq;
4864                }
4865                break;
4866        default:
4867                break;
4868        }
4869
4870        if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_ORDERED_DATA &&
4871            test_opt(sb, JOURNAL_ASYNC_COMMIT)) {
4872                ext4_msg(sb, KERN_ERR, "can't mount with "
4873                        "journal_async_commit in data=ordered mode");
4874                goto failed_mount_wq;
4875        }
4876
4877        set_task_ioprio(sbi->s_journal->j_task, journal_ioprio);
4878
4879        sbi->s_journal->j_submit_inode_data_buffers =
4880                ext4_journal_submit_inode_data_buffers;
4881        sbi->s_journal->j_finish_inode_data_buffers =
4882                ext4_journal_finish_inode_data_buffers;
4883
4884no_journal:
4885        if (!test_opt(sb, NO_MBCACHE)) {
4886                sbi->s_ea_block_cache = ext4_xattr_create_cache();
4887                if (!sbi->s_ea_block_cache) {
4888                        ext4_msg(sb, KERN_ERR,
4889                                 "Failed to create ea_block_cache");
4890                        goto failed_mount_wq;
4891                }
4892
4893                if (ext4_has_feature_ea_inode(sb)) {
4894                        sbi->s_ea_inode_cache = ext4_xattr_create_cache();
4895                        if (!sbi->s_ea_inode_cache) {
4896                                ext4_msg(sb, KERN_ERR,
4897                                         "Failed to create ea_inode_cache");
4898                                goto failed_mount_wq;
4899                        }
4900                }
4901        }
4902
4903        if (ext4_has_feature_verity(sb) && blocksize != PAGE_SIZE) {
4904                ext4_msg(sb, KERN_ERR, "Unsupported blocksize for fs-verity");
4905                goto failed_mount_wq;
4906        }
4907
4908        if (DUMMY_ENCRYPTION_ENABLED(sbi) && !sb_rdonly(sb) &&
4909            !ext4_has_feature_encrypt(sb)) {
4910                ext4_set_feature_encrypt(sb);
4911                ext4_commit_super(sb);
4912        }
4913
4914        /*
4915         * Get the # of file system overhead blocks from the
4916         * superblock if present.
4917         */
4918        if (es->s_overhead_clusters)
4919                sbi->s_overhead = le32_to_cpu(es->s_overhead_clusters);
4920        else {
4921                err = ext4_calculate_overhead(sb);
4922                if (err)
4923                        goto failed_mount_wq;
4924        }
4925
4926        /*
4927         * The maximum number of concurrent works can be high and
4928         * concurrency isn't really necessary.  Limit it to 1.
4929         */
4930        EXT4_SB(sb)->rsv_conversion_wq =
4931                alloc_workqueue("ext4-rsv-conversion", WQ_MEM_RECLAIM | WQ_UNBOUND, 1);
4932        if (!EXT4_SB(sb)->rsv_conversion_wq) {
4933                printk(KERN_ERR "EXT4-fs: failed to create workqueue\n");
4934                ret = -ENOMEM;
4935                goto failed_mount4;
4936        }
4937
4938        /*
4939         * The jbd2_journal_load will have done any necessary log recovery,
4940         * so we can safely mount the rest of the filesystem now.
4941         */
4942
4943        root = ext4_iget(sb, EXT4_ROOT_INO, EXT4_IGET_SPECIAL);
4944        if (IS_ERR(root)) {
4945                ext4_msg(sb, KERN_ERR, "get root inode failed");
4946                ret = PTR_ERR(root);
4947                root = NULL;
4948                goto failed_mount4;
4949        }
4950        if (!S_ISDIR(root->i_mode) || !root->i_blocks || !root->i_size) {
4951                ext4_msg(sb, KERN_ERR, "corrupt root inode, run e2fsck");
4952                iput(root);
4953                goto failed_mount4;
4954        }
4955
4956        sb->s_root = d_make_root(root);
4957        if (!sb->s_root) {
4958                ext4_msg(sb, KERN_ERR, "get root dentry failed");
4959                ret = -ENOMEM;
4960                goto failed_mount4;
4961        }
4962
4963        ret = ext4_setup_super(sb, es, sb_rdonly(sb));
4964        if (ret == -EROFS) {
4965                sb->s_flags |= SB_RDONLY;
4966                ret = 0;
4967        } else if (ret)
4968                goto failed_mount4a;
4969
4970        ext4_set_resv_clusters(sb);
4971
4972        if (test_opt(sb, BLOCK_VALIDITY)) {
4973                err = ext4_setup_system_zone(sb);
4974                if (err) {
4975                        ext4_msg(sb, KERN_ERR, "failed to initialize system "
4976                                 "zone (%d)", err);
4977                        goto failed_mount4a;
4978                }
4979        }
4980        ext4_fc_replay_cleanup(sb);
4981
4982        ext4_ext_init(sb);
4983        err = ext4_mb_init(sb);
4984        if (err) {
4985                ext4_msg(sb, KERN_ERR, "failed to initialize mballoc (%d)",
4986                         err);
4987                goto failed_mount5;
4988        }
4989
4990        /*
4991         * We can only set up the journal commit callback once
4992         * mballoc is initialized
4993         */
4994        if (sbi->s_journal)
4995                sbi->s_journal->j_commit_callback =
4996                        ext4_journal_commit_callback;
4997
4998        block = ext4_count_free_clusters(sb);
4999        ext4_free_blocks_count_set(sbi->s_es, 
5000                                   EXT4_C2B(sbi, block));
5001        err = percpu_counter_init(&sbi->s_freeclusters_counter, block,
5002                                  GFP_KERNEL);
5003        if (!err) {
5004                unsigned long freei = ext4_count_free_inodes(sb);
5005                sbi->s_es->s_free_inodes_count = cpu_to_le32(freei);
5006                err = percpu_counter_init(&sbi->s_freeinodes_counter, freei,
5007                                          GFP_KERNEL);
5008        }
5009        if (!err)
5010                err = percpu_counter_init(&sbi->s_dirs_counter,
5011                                          ext4_count_dirs(sb), GFP_KERNEL);
5012        if (!err)
5013                err = percpu_counter_init(&sbi->s_dirtyclusters_counter, 0,
5014                                          GFP_KERNEL);
5015        if (!err)
5016                err = percpu_counter_init(&sbi->s_sra_exceeded_retry_limit, 0,
5017                                          GFP_KERNEL);
5018        if (!err)
5019                err = percpu_init_rwsem(&sbi->s_writepages_rwsem);
5020
5021        if (err) {
5022                ext4_msg(sb, KERN_ERR, "insufficient memory");
5023                goto failed_mount6;
5024        }
5025
5026        if (ext4_has_feature_flex_bg(sb))
5027                if (!ext4_fill_flex_info(sb)) {
5028                        ext4_msg(sb, KERN_ERR,
5029                               "unable to initialize "
5030                               "flex_bg meta info!");
5031                        goto failed_mount6;
5032                }
5033
5034        err = ext4_register_li_request(sb, first_not_zeroed);
5035        if (err)
5036                goto failed_mount6;
5037
5038        err = ext4_register_sysfs(sb);
5039        if (err)
5040                goto failed_mount7;
5041
5042#ifdef CONFIG_QUOTA
5043        /* Enable quota usage during mount. */
5044        if (ext4_has_feature_quota(sb) && !sb_rdonly(sb)) {
5045                err = ext4_enable_quotas(sb);
5046                if (err)
5047                        goto failed_mount8;
5048        }
5049#endif  /* CONFIG_QUOTA */
5050
5051        /*
5052         * Save the original bdev mapping's wb_err value which could be
5053         * used to detect the metadata async write error.
5054         */
5055        spin_lock_init(&sbi->s_bdev_wb_lock);
5056        errseq_check_and_advance(&sb->s_bdev->bd_inode->i_mapping->wb_err,
5057                                 &sbi->s_bdev_wb_err);
5058        sb->s_bdev->bd_super = sb;
5059        EXT4_SB(sb)->s_mount_state |= EXT4_ORPHAN_FS;
5060        ext4_orphan_cleanup(sb, es);
5061        EXT4_SB(sb)->s_mount_state &= ~EXT4_ORPHAN_FS;
5062        if (needs_recovery) {
5063                ext4_msg(sb, KERN_INFO, "recovery complete");
5064                err = ext4_mark_recovery_complete(sb, es);
5065                if (err)
5066                        goto failed_mount8;
5067        }
5068        if (EXT4_SB(sb)->s_journal) {
5069                if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA)
5070                        descr = " journalled data mode";
5071                else if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_ORDERED_DATA)
5072                        descr = " ordered data mode";
5073                else
5074                        descr = " writeback data mode";
5075        } else
5076                descr = "out journal";
5077
5078        if (test_opt(sb, DISCARD)) {
5079                struct request_queue *q = bdev_get_queue(sb->s_bdev);
5080                if (!blk_queue_discard(q))
5081                        ext4_msg(sb, KERN_WARNING,
5082                                 "mounting with \"discard\" option, but "
5083                                 "the device does not support discard");
5084        }
5085
5086        if (___ratelimit(&ext4_mount_msg_ratelimit, "EXT4-fs mount"))
5087                ext4_msg(sb, KERN_INFO, "mounted filesystem with%s. "
5088                         "Opts: %.*s%s%s. Quota mode: %s.", descr,
5089                         (int) sizeof(sbi->s_es->s_mount_opts),
5090                         sbi->s_es->s_mount_opts,
5091                         *sbi->s_es->s_mount_opts ? "; " : "", orig_data,
5092                         ext4_quota_mode(sb));
5093
5094        if (es->s_error_count)
5095                mod_timer(&sbi->s_err_report, jiffies + 300*HZ); /* 5 minutes */
5096
5097        /* Enable message ratelimiting. Default is 10 messages per 5 secs. */
5098        ratelimit_state_init(&sbi->s_err_ratelimit_state, 5 * HZ, 10);
5099        ratelimit_state_init(&sbi->s_warning_ratelimit_state, 5 * HZ, 10);
5100        ratelimit_state_init(&sbi->s_msg_ratelimit_state, 5 * HZ, 10);
5101        atomic_set(&sbi->s_warning_count, 0);
5102        atomic_set(&sbi->s_msg_count, 0);
5103
5104        kfree(orig_data);
5105        return 0;
5106
5107cantfind_ext4:
5108        if (!silent)
5109                ext4_msg(sb, KERN_ERR, "VFS: Can't find ext4 filesystem");
5110        goto failed_mount;
5111
5112failed_mount8:
5113        ext4_unregister_sysfs(sb);
5114        kobject_put(&sbi->s_kobj);
5115failed_mount7:
5116        ext4_unregister_li_request(sb);
5117failed_mount6:
5118        ext4_mb_release(sb);
5119        rcu_read_lock();
5120        flex_groups = rcu_dereference(sbi->s_flex_groups);
5121        if (flex_groups) {
5122                for (i = 0; i < sbi->s_flex_groups_allocated; i++)
5123                        kvfree(flex_groups[i]);
5124                kvfree(flex_groups);
5125        }
5126        rcu_read_unlock();
5127        percpu_counter_destroy(&sbi->s_freeclusters_counter);
5128        percpu_counter_destroy(&sbi->s_freeinodes_counter);
5129        percpu_counter_destroy(&sbi->s_dirs_counter);
5130        percpu_counter_destroy(&sbi->s_dirtyclusters_counter);
5131        percpu_counter_destroy(&sbi->s_sra_exceeded_retry_limit);
5132        percpu_free_rwsem(&sbi->s_writepages_rwsem);
5133failed_mount5:
5134        ext4_ext_release(sb);
5135        ext4_release_system_zone(sb);
5136failed_mount4a:
5137        dput(sb->s_root);
5138        sb->s_root = NULL;
5139failed_mount4:
5140        ext4_msg(sb, KERN_ERR, "mount failed");
5141        if (EXT4_SB(sb)->rsv_conversion_wq)
5142                destroy_workqueue(EXT4_SB(sb)->rsv_conversion_wq);
5143failed_mount_wq:
5144        ext4_xattr_destroy_cache(sbi->s_ea_inode_cache);
5145        sbi->s_ea_inode_cache = NULL;
5146
5147        ext4_xattr_destroy_cache(sbi->s_ea_block_cache);
5148        sbi->s_ea_block_cache = NULL;
5149
5150        if (sbi->s_journal) {
5151                jbd2_journal_destroy(sbi->s_journal);
5152                sbi->s_journal = NULL;
5153        }
5154failed_mount3a:
5155        ext4_es_unregister_shrinker(sbi);
5156failed_mount3:
5157        flush_work(&sbi->s_error_work);
5158        del_timer_sync(&sbi->s_err_report);
5159        if (sbi->s_mmp_tsk)
5160                kthread_stop(sbi->s_mmp_tsk);
5161failed_mount2:
5162        rcu_read_lock();
5163        group_desc = rcu_dereference(sbi->s_group_desc);
5164        for (i = 0; i < db_count; i++)
5165                brelse(group_desc[i]);
5166        kvfree(group_desc);
5167        rcu_read_unlock();
5168failed_mount:
5169        if (sbi->s_chksum_driver)
5170                crypto_free_shash(sbi->s_chksum_driver);
5171
5172#ifdef CONFIG_UNICODE
5173        utf8_unload(sb->s_encoding);
5174#endif
5175
5176#ifdef CONFIG_QUOTA
5177        for (i = 0; i < EXT4_MAXQUOTAS; i++)
5178                kfree(get_qf_name(sb, sbi, i));
5179#endif
5180        fscrypt_free_dummy_policy(&sbi->s_dummy_enc_policy);
5181        ext4_blkdev_remove(sbi);
5182        brelse(bh);
5183out_fail:
5184        sb->s_fs_info = NULL;
5185        kfree(sbi->s_blockgroup_lock);
5186out_free_base:
5187        kfree(sbi);
5188        kfree(orig_data);
5189        fs_put_dax(dax_dev);
5190        return err ? err : ret;
5191}
5192
5193/*
5194 * Setup any per-fs journal parameters now.  We'll do this both on
5195 * initial mount, once the journal has been initialised but before we've
5196 * done any recovery; and again on any subsequent remount.
5197 */
5198static void ext4_init_journal_params(struct super_block *sb, journal_t *journal)
5199{
5200        struct ext4_sb_info *sbi = EXT4_SB(sb);
5201
5202        journal->j_commit_interval = sbi->s_commit_interval;
5203        journal->j_min_batch_time = sbi->s_min_batch_time;
5204        journal->j_max_batch_time = sbi->s_max_batch_time;
5205        ext4_fc_init(sb, journal);
5206
5207        write_lock(&journal->j_state_lock);
5208        if (test_opt(sb, BARRIER))
5209                journal->j_flags |= JBD2_BARRIER;
5210        else
5211                journal->j_flags &= ~JBD2_BARRIER;
5212        if (test_opt(sb, DATA_ERR_ABORT))
5213                journal->j_flags |= JBD2_ABORT_ON_SYNCDATA_ERR;
5214        else
5215                journal->j_flags &= ~JBD2_ABORT_ON_SYNCDATA_ERR;
5216        write_unlock(&journal->j_state_lock);
5217}
5218
5219static struct inode *ext4_get_journal_inode(struct super_block *sb,
5220                                             unsigned int journal_inum)
5221{
5222        struct inode *journal_inode;
5223
5224        /*
5225         * Test for the existence of a valid inode on disk.  Bad things
5226         * happen if we iget() an unused inode, as the subsequent iput()
5227         * will try to delete it.
5228         */
5229        journal_inode = ext4_iget(sb, journal_inum, EXT4_IGET_SPECIAL);
5230        if (IS_ERR(journal_inode)) {
5231                ext4_msg(sb, KERN_ERR, "no journal found");
5232                return NULL;
5233        }
5234        if (!journal_inode->i_nlink) {
5235                make_bad_inode(journal_inode);
5236                iput(journal_inode);
5237                ext4_msg(sb, KERN_ERR, "journal inode is deleted");
5238                return NULL;
5239        }
5240
5241        jbd_debug(2, "Journal inode found at %p: %lld bytes\n",
5242                  journal_inode, journal_inode->i_size);
5243        if (!S_ISREG(journal_inode->i_mode)) {
5244                ext4_msg(sb, KERN_ERR, "invalid journal inode");
5245                iput(journal_inode);
5246                return NULL;
5247        }
5248        return journal_inode;
5249}
5250
5251static journal_t *ext4_get_journal(struct super_block *sb,
5252                                   unsigned int journal_inum)
5253{
5254        struct inode *journal_inode;
5255        journal_t *journal;
5256
5257        if (WARN_ON_ONCE(!ext4_has_feature_journal(sb)))
5258                return NULL;
5259
5260        journal_inode = ext4_get_journal_inode(sb, journal_inum);
5261        if (!journal_inode)
5262                return NULL;
5263
5264        journal = jbd2_journal_init_inode(journal_inode);
5265        if (!journal) {
5266                ext4_msg(sb, KERN_ERR, "Could not load journal inode");
5267                iput(journal_inode);
5268                return NULL;
5269        }
5270        journal->j_private = sb;
5271        ext4_init_journal_params(sb, journal);
5272        return journal;
5273}
5274
5275static journal_t *ext4_get_dev_journal(struct super_block *sb,
5276                                       dev_t j_dev)
5277{
5278        struct buffer_head *bh;
5279        journal_t *journal;
5280        ext4_fsblk_t start;
5281        ext4_fsblk_t len;
5282        int hblock, blocksize;
5283        ext4_fsblk_t sb_block;
5284        unsigned long offset;
5285        struct ext4_super_block *es;
5286        struct block_device *bdev;
5287
5288        if (WARN_ON_ONCE(!ext4_has_feature_journal(sb)))
5289                return NULL;
5290
5291        bdev = ext4_blkdev_get(j_dev, sb);
5292        if (bdev == NULL)
5293                return NULL;
5294
5295        blocksize = sb->s_blocksize;
5296        hblock = bdev_logical_block_size(bdev);
5297        if (blocksize < hblock) {
5298                ext4_msg(sb, KERN_ERR,
5299                        "blocksize too small for journal device");
5300                goto out_bdev;
5301        }
5302
5303        sb_block = EXT4_MIN_BLOCK_SIZE / blocksize;
5304        offset = EXT4_MIN_BLOCK_SIZE % blocksize;
5305        set_blocksize(bdev, blocksize);
5306        if (!(bh = __bread(bdev, sb_block, blocksize))) {
5307                ext4_msg(sb, KERN_ERR, "couldn't read superblock of "
5308                       "external journal");
5309                goto out_bdev;
5310        }
5311
5312        es = (struct ext4_super_block *) (bh->b_data + offset);
5313        if ((le16_to_cpu(es->s_magic) != EXT4_SUPER_MAGIC) ||
5314            !(le32_to_cpu(es->s_feature_incompat) &
5315              EXT4_FEATURE_INCOMPAT_JOURNAL_DEV)) {
5316                ext4_msg(sb, KERN_ERR, "external journal has "
5317                                        "bad superblock");
5318                brelse(bh);
5319                goto out_bdev;
5320        }
5321
5322        if ((le32_to_cpu(es->s_feature_ro_compat) &
5323             EXT4_FEATURE_RO_COMPAT_METADATA_CSUM) &&
5324            es->s_checksum != ext4_superblock_csum(sb, es)) {
5325                ext4_msg(sb, KERN_ERR, "external journal has "
5326                                       "corrupt superblock");
5327                brelse(bh);
5328                goto out_bdev;
5329        }
5330
5331        if (memcmp(EXT4_SB(sb)->s_es->s_journal_uuid, es->s_uuid, 16)) {
5332                ext4_msg(sb, KERN_ERR, "journal UUID does not match");
5333                brelse(bh);
5334                goto out_bdev;
5335        }
5336
5337        len = ext4_blocks_count(es);
5338        start = sb_block + 1;
5339        brelse(bh);     /* we're done with the superblock */
5340
5341        journal = jbd2_journal_init_dev(bdev, sb->s_bdev,
5342                                        start, len, blocksize);
5343        if (!journal) {
5344                ext4_msg(sb, KERN_ERR, "failed to create device journal");
5345                goto out_bdev;
5346        }
5347        journal->j_private = sb;
5348        if (ext4_read_bh_lock(journal->j_sb_buffer, REQ_META | REQ_PRIO, true)) {
5349                ext4_msg(sb, KERN_ERR, "I/O error on journal device");
5350                goto out_journal;
5351        }
5352        if (be32_to_cpu(journal->j_superblock->s_nr_users) != 1) {
5353                ext4_msg(sb, KERN_ERR, "External journal has more than one "
5354                                        "user (unsupported) - %d",
5355                        be32_to_cpu(journal->j_superblock->s_nr_users));
5356                goto out_journal;
5357        }
5358        EXT4_SB(sb)->s_journal_bdev = bdev;
5359        ext4_init_journal_params(sb, journal);
5360        return journal;
5361
5362out_journal:
5363        jbd2_journal_destroy(journal);
5364out_bdev:
5365        ext4_blkdev_put(bdev);
5366        return NULL;
5367}
5368
5369static int ext4_load_journal(struct super_block *sb,
5370                             struct ext4_super_block *es,
5371                             unsigned long journal_devnum)
5372{
5373        journal_t *journal;
5374        unsigned int journal_inum = le32_to_cpu(es->s_journal_inum);
5375        dev_t journal_dev;
5376        int err = 0;
5377        int really_read_only;
5378        int journal_dev_ro;
5379
5380        if (WARN_ON_ONCE(!ext4_has_feature_journal(sb)))
5381                return -EFSCORRUPTED;
5382
5383        if (journal_devnum &&
5384            journal_devnum != le32_to_cpu(es->s_journal_dev)) {
5385                ext4_msg(sb, KERN_INFO, "external journal device major/minor "
5386                        "numbers have changed");
5387                journal_dev = new_decode_dev(journal_devnum);
5388        } else
5389                journal_dev = new_decode_dev(le32_to_cpu(es->s_journal_dev));
5390
5391        if (journal_inum && journal_dev) {
5392                ext4_msg(sb, KERN_ERR,
5393                         "filesystem has both journal inode and journal device!");
5394                return -EINVAL;
5395        }
5396
5397        if (journal_inum) {
5398                journal = ext4_get_journal(sb, journal_inum);
5399                if (!journal)
5400                        return -EINVAL;
5401        } else {
5402                journal = ext4_get_dev_journal(sb, journal_dev);
5403                if (!journal)
5404                        return -EINVAL;
5405        }
5406
5407        journal_dev_ro = bdev_read_only(journal->j_dev);
5408        really_read_only = bdev_read_only(sb->s_bdev) | journal_dev_ro;
5409
5410        if (journal_dev_ro && !sb_rdonly(sb)) {
5411                ext4_msg(sb, KERN_ERR,
5412                         "journal device read-only, try mounting with '-o ro'");
5413                err = -EROFS;
5414                goto err_out;
5415        }
5416
5417        /*
5418         * Are we loading a blank journal or performing recovery after a
5419         * crash?  For recovery, we need to check in advance whether we
5420         * can get read-write access to the device.
5421         */
5422        if (ext4_has_feature_journal_needs_recovery(sb)) {
5423                if (sb_rdonly(sb)) {
5424                        ext4_msg(sb, KERN_INFO, "INFO: recovery "
5425                                        "required on readonly filesystem");
5426                        if (really_read_only) {
5427                                ext4_msg(sb, KERN_ERR, "write access "
5428                                        "unavailable, cannot proceed "
5429                                        "(try mounting with noload)");
5430                                err = -EROFS;
5431                                goto err_out;
5432                        }
5433                        ext4_msg(sb, KERN_INFO, "write access will "
5434                               "be enabled during recovery");
5435                }
5436        }
5437
5438        if (!(journal->j_flags & JBD2_BARRIER))
5439                ext4_msg(sb, KERN_INFO, "barriers disabled");
5440
5441        if (!ext4_has_feature_journal_needs_recovery(sb))
5442                err = jbd2_journal_wipe(journal, !really_read_only);
5443        if (!err) {
5444                char *save = kmalloc(EXT4_S_ERR_LEN, GFP_KERNEL);
5445                if (save)
5446                        memcpy(save, ((char *) es) +
5447                               EXT4_S_ERR_START, EXT4_S_ERR_LEN);
5448                err = jbd2_journal_load(journal);
5449                if (save)
5450                        memcpy(((char *) es) + EXT4_S_ERR_START,
5451                               save, EXT4_S_ERR_LEN);
5452                kfree(save);
5453        }
5454
5455        if (err) {
5456                ext4_msg(sb, KERN_ERR, "error loading journal");
5457                goto err_out;
5458        }
5459
5460        EXT4_SB(sb)->s_journal = journal;
5461        err = ext4_clear_journal_err(sb, es);
5462        if (err) {
5463                EXT4_SB(sb)->s_journal = NULL;
5464                jbd2_journal_destroy(journal);
5465                return err;
5466        }
5467
5468        if (!really_read_only && journal_devnum &&
5469            journal_devnum != le32_to_cpu(es->s_journal_dev)) {
5470                es->s_journal_dev = cpu_to_le32(journal_devnum);
5471
5472                /* Make sure we flush the recovery flag to disk. */
5473                ext4_commit_super(sb);
5474        }
5475
5476        return 0;
5477
5478err_out:
5479        jbd2_journal_destroy(journal);
5480        return err;
5481}
5482
5483/* Copy state of EXT4_SB(sb) into buffer for on-disk superblock */
5484static void ext4_update_super(struct super_block *sb)
5485{
5486        struct ext4_sb_info *sbi = EXT4_SB(sb);
5487        struct ext4_super_block *es = sbi->s_es;
5488        struct buffer_head *sbh = sbi->s_sbh;
5489
5490        lock_buffer(sbh);
5491        /*
5492         * If the file system is mounted read-only, don't update the
5493         * superblock write time.  This avoids updating the superblock
5494         * write time when we are mounting the root file system
5495         * read/only but we need to replay the journal; at that point,
5496         * for people who are east of GMT and who make their clock
5497         * tick in localtime for Windows bug-for-bug compatibility,
5498         * the clock is set in the future, and this will cause e2fsck
5499         * to complain and force a full file system check.
5500         */
5501        if (!(sb->s_flags & SB_RDONLY))
5502                ext4_update_tstamp(es, s_wtime);
5503        es->s_kbytes_written =
5504                cpu_to_le64(sbi->s_kbytes_written +
5505                    ((part_stat_read(sb->s_bdev, sectors[STAT_WRITE]) -
5506                      sbi->s_sectors_written_start) >> 1));
5507        if (percpu_counter_initialized(&sbi->s_freeclusters_counter))
5508                ext4_free_blocks_count_set(es,
5509                        EXT4_C2B(sbi, percpu_counter_sum_positive(
5510                                &sbi->s_freeclusters_counter)));
5511        if (percpu_counter_initialized(&sbi->s_freeinodes_counter))
5512                es->s_free_inodes_count =
5513                        cpu_to_le32(percpu_counter_sum_positive(
5514                                &sbi->s_freeinodes_counter));
5515        /* Copy error information to the on-disk superblock */
5516        spin_lock(&sbi->s_error_lock);
5517        if (sbi->s_add_error_count > 0) {
5518                es->s_state |= cpu_to_le16(EXT4_ERROR_FS);
5519                if (!es->s_first_error_time && !es->s_first_error_time_hi) {
5520                        __ext4_update_tstamp(&es->s_first_error_time,
5521                                             &es->s_first_error_time_hi,
5522                                             sbi->s_first_error_time);
5523                        strncpy(es->s_first_error_func, sbi->s_first_error_func,
5524                                sizeof(es->s_first_error_func));
5525                        es->s_first_error_line =
5526                                cpu_to_le32(sbi->s_first_error_line);
5527                        es->s_first_error_ino =
5528                                cpu_to_le32(sbi->s_first_error_ino);
5529                        es->s_first_error_block =
5530                                cpu_to_le64(sbi->s_first_error_block);
5531                        es->s_first_error_errcode =
5532                                ext4_errno_to_code(sbi->s_first_error_code);
5533                }
5534                __ext4_update_tstamp(&es->s_last_error_time,
5535                                     &es->s_last_error_time_hi,
5536                                     sbi->s_last_error_time);
5537                strncpy(es->s_last_error_func, sbi->s_last_error_func,
5538                        sizeof(es->s_last_error_func));
5539                es->s_last_error_line = cpu_to_le32(sbi->s_last_error_line);
5540                es->s_last_error_ino = cpu_to_le32(sbi->s_last_error_ino);
5541                es->s_last_error_block = cpu_to_le64(sbi->s_last_error_block);
5542                es->s_last_error_errcode =
5543                                ext4_errno_to_code(sbi->s_last_error_code);
5544                /*
5545                 * Start the daily error reporting function if it hasn't been
5546                 * started already
5547                 */
5548                if (!es->s_error_count)
5549                        mod_timer(&sbi->s_err_report, jiffies + 24*60*60*HZ);
5550                le32_add_cpu(&es->s_error_count, sbi->s_add_error_count);
5551                sbi->s_add_error_count = 0;
5552        }
5553        spin_unlock(&sbi->s_error_lock);
5554
5555        ext4_superblock_csum_set(sb);
5556        unlock_buffer(sbh);
5557}
5558
5559static int ext4_commit_super(struct super_block *sb)
5560{
5561        struct buffer_head *sbh = EXT4_SB(sb)->s_sbh;
5562        int error = 0;
5563
5564        if (!sbh || block_device_ejected(sb))
5565                return error;
5566
5567        ext4_update_super(sb);
5568
5569        if (buffer_write_io_error(sbh) || !buffer_uptodate(sbh)) {
5570                /*
5571                 * Oh, dear.  A previous attempt to write the
5572                 * superblock failed.  This could happen because the
5573                 * USB device was yanked out.  Or it could happen to
5574                 * be a transient write error and maybe the block will
5575                 * be remapped.  Nothing we can do but to retry the
5576                 * write and hope for the best.
5577                 */
5578                ext4_msg(sb, KERN_ERR, "previous I/O error to "
5579                       "superblock detected");
5580                clear_buffer_write_io_error(sbh);
5581                set_buffer_uptodate(sbh);
5582        }
5583        BUFFER_TRACE(sbh, "marking dirty");
5584        mark_buffer_dirty(sbh);
5585        error = __sync_dirty_buffer(sbh,
5586                REQ_SYNC | (test_opt(sb, BARRIER) ? REQ_FUA : 0));
5587        if (buffer_write_io_error(sbh)) {
5588                ext4_msg(sb, KERN_ERR, "I/O error while writing "
5589                       "superblock");
5590                clear_buffer_write_io_error(sbh);
5591                set_buffer_uptodate(sbh);
5592        }
5593        return error;
5594}
5595
5596/*
5597 * Have we just finished recovery?  If so, and if we are mounting (or
5598 * remounting) the filesystem readonly, then we will end up with a
5599 * consistent fs on disk.  Record that fact.
5600 */
5601static int ext4_mark_recovery_complete(struct super_block *sb,
5602                                       struct ext4_super_block *es)
5603{
5604        int err;
5605        journal_t *journal = EXT4_SB(sb)->s_journal;
5606
5607        if (!ext4_has_feature_journal(sb)) {
5608                if (journal != NULL) {
5609                        ext4_error(sb, "Journal got removed while the fs was "
5610                                   "mounted!");
5611                        return -EFSCORRUPTED;
5612                }
5613                return 0;
5614        }
5615        jbd2_journal_lock_updates(journal);
5616        err = jbd2_journal_flush(journal);
5617        if (err < 0)
5618                goto out;
5619
5620        if (ext4_has_feature_journal_needs_recovery(sb) && sb_rdonly(sb)) {
5621                ext4_clear_feature_journal_needs_recovery(sb);
5622                ext4_commit_super(sb);
5623        }
5624out:
5625        jbd2_journal_unlock_updates(journal);
5626        return err;
5627}
5628
5629/*
5630 * If we are mounting (or read-write remounting) a filesystem whose journal
5631 * has recorded an error from a previous lifetime, move that error to the
5632 * main filesystem now.
5633 */
5634static int ext4_clear_journal_err(struct super_block *sb,
5635                                   struct ext4_super_block *es)
5636{
5637        journal_t *journal;
5638        int j_errno;
5639        const char *errstr;
5640
5641        if (!ext4_has_feature_journal(sb)) {
5642                ext4_error(sb, "Journal got removed while the fs was mounted!");
5643                return -EFSCORRUPTED;
5644        }
5645
5646        journal = EXT4_SB(sb)->s_journal;
5647
5648        /*
5649         * Now check for any error status which may have been recorded in the
5650         * journal by a prior ext4_error() or ext4_abort()
5651         */
5652
5653        j_errno = jbd2_journal_errno(journal);
5654        if (j_errno) {
5655                char nbuf[16];
5656
5657                errstr = ext4_decode_error(sb, j_errno, nbuf);
5658                ext4_warning(sb, "Filesystem error recorded "
5659                             "from previous mount: %s", errstr);
5660                ext4_warning(sb, "Marking fs in need of filesystem check.");
5661
5662                EXT4_SB(sb)->s_mount_state |= EXT4_ERROR_FS;
5663                es->s_state |= cpu_to_le16(EXT4_ERROR_FS);
5664                ext4_commit_super(sb);
5665
5666                jbd2_journal_clear_err(journal);
5667                jbd2_journal_update_sb_errno(journal);
5668        }
5669        return 0;
5670}
5671
5672/*
5673 * Force the running and committing transactions to commit,
5674 * and wait on the commit.
5675 */
5676int ext4_force_commit(struct super_block *sb)
5677{
5678        journal_t *journal;
5679
5680        if (sb_rdonly(sb))
5681                return 0;
5682
5683        journal = EXT4_SB(sb)->s_journal;
5684        return ext4_journal_force_commit(journal);
5685}
5686
5687static int ext4_sync_fs(struct super_block *sb, int wait)
5688{
5689        int ret = 0;
5690        tid_t target;
5691        bool needs_barrier = false;
5692        struct ext4_sb_info *sbi = EXT4_SB(sb);
5693
5694        if (unlikely(ext4_forced_shutdown(sbi)))
5695                return 0;
5696
5697        trace_ext4_sync_fs(sb, wait);
5698        flush_workqueue(sbi->rsv_conversion_wq);
5699        /*
5700         * Writeback quota in non-journalled quota case - journalled quota has
5701         * no dirty dquots
5702         */
5703        dquot_writeback_dquots(sb, -1);
5704        /*
5705         * Data writeback is possible w/o journal transaction, so barrier must
5706         * being sent at the end of the function. But we can skip it if
5707         * transaction_commit will do it for us.
5708         */
5709        if (sbi->s_journal) {
5710                target = jbd2_get_latest_transaction(sbi->s_journal);
5711                if (wait && sbi->s_journal->j_flags & JBD2_BARRIER &&
5712                    !jbd2_trans_will_send_data_barrier(sbi->s_journal, target))
5713                        needs_barrier = true;
5714
5715                if (jbd2_journal_start_commit(sbi->s_journal, &target)) {
5716                        if (wait)
5717                                ret = jbd2_log_wait_commit(sbi->s_journal,
5718                                                           target);
5719                }
5720        } else if (wait && test_opt(sb, BARRIER))
5721                needs_barrier = true;
5722        if (needs_barrier) {
5723                int err;
5724                err = blkdev_issue_flush(sb->s_bdev);
5725                if (!ret)
5726                        ret = err;
5727        }
5728
5729        return ret;
5730}
5731
5732/*
5733 * LVM calls this function before a (read-only) snapshot is created.  This
5734 * gives us a chance to flush the journal completely and mark the fs clean.
5735 *
5736 * Note that only this function cannot bring a filesystem to be in a clean
5737 * state independently. It relies on upper layer to stop all data & metadata
5738 * modifications.
5739 */
5740static int ext4_freeze(struct super_block *sb)
5741{
5742        int error = 0;
5743        journal_t *journal;
5744
5745        if (sb_rdonly(sb))
5746                return 0;
5747
5748        journal = EXT4_SB(sb)->s_journal;
5749
5750        if (journal) {
5751                /* Now we set up the journal barrier. */
5752                jbd2_journal_lock_updates(journal);
5753
5754                /*
5755                 * Don't clear the needs_recovery flag if we failed to
5756                 * flush the journal.
5757                 */
5758                error = jbd2_journal_flush(journal);
5759                if (error < 0)
5760                        goto out;
5761
5762                /* Journal blocked and flushed, clear needs_recovery flag. */
5763                ext4_clear_feature_journal_needs_recovery(sb);
5764        }
5765
5766        error = ext4_commit_super(sb);
5767out:
5768        if (journal)
5769                /* we rely on upper layer to stop further updates */
5770                jbd2_journal_unlock_updates(journal);
5771        return error;
5772}
5773
5774/*
5775 * Called by LVM after the snapshot is done.  We need to reset the RECOVER
5776 * flag here, even though the filesystem is not technically dirty yet.
5777 */
5778static int ext4_unfreeze(struct super_block *sb)
5779{
5780        if (sb_rdonly(sb) || ext4_forced_shutdown(EXT4_SB(sb)))
5781                return 0;
5782
5783        if (EXT4_SB(sb)->s_journal) {
5784                /* Reset the needs_recovery flag before the fs is unlocked. */
5785                ext4_set_feature_journal_needs_recovery(sb);
5786        }
5787
5788        ext4_commit_super(sb);
5789        return 0;
5790}
5791
5792/*
5793 * Structure to save mount options for ext4_remount's benefit
5794 */
5795struct ext4_mount_options {
5796        unsigned long s_mount_opt;
5797        unsigned long s_mount_opt2;
5798        kuid_t s_resuid;
5799        kgid_t s_resgid;
5800        unsigned long s_commit_interval;
5801        u32 s_min_batch_time, s_max_batch_time;
5802#ifdef CONFIG_QUOTA
5803        int s_jquota_fmt;
5804        char *s_qf_names[EXT4_MAXQUOTAS];
5805#endif
5806};
5807
5808static int ext4_remount(struct super_block *sb, int *flags, char *data)
5809{
5810        struct ext4_super_block *es;
5811        struct ext4_sb_info *sbi = EXT4_SB(sb);
5812        unsigned long old_sb_flags, vfs_flags;
5813        struct ext4_mount_options old_opts;
5814        int enable_quota = 0;
5815        ext4_group_t g;
5816        unsigned int journal_ioprio = DEFAULT_JOURNAL_IOPRIO;
5817        int err = 0;
5818#ifdef CONFIG_QUOTA
5819        int i, j;
5820        char *to_free[EXT4_MAXQUOTAS];
5821#endif
5822        char *orig_data = kstrdup(data, GFP_KERNEL);
5823
5824        if (data && !orig_data)
5825                return -ENOMEM;
5826
5827        /* Store the original options */
5828        old_sb_flags = sb->s_flags;
5829        old_opts.s_mount_opt = sbi->s_mount_opt;
5830        old_opts.s_mount_opt2 = sbi->s_mount_opt2;
5831        old_opts.s_resuid = sbi->s_resuid;
5832        old_opts.s_resgid = sbi->s_resgid;
5833        old_opts.s_commit_interval = sbi->s_commit_interval;
5834        old_opts.s_min_batch_time = sbi->s_min_batch_time;
5835        old_opts.s_max_batch_time = sbi->s_max_batch_time;
5836#ifdef CONFIG_QUOTA
5837        old_opts.s_jquota_fmt = sbi->s_jquota_fmt;
5838        for (i = 0; i < EXT4_MAXQUOTAS; i++)
5839                if (sbi->s_qf_names[i]) {
5840                        char *qf_name = get_qf_name(sb, sbi, i);
5841
5842                        old_opts.s_qf_names[i] = kstrdup(qf_name, GFP_KERNEL);
5843                        if (!old_opts.s_qf_names[i]) {
5844                                for (j = 0; j < i; j++)
5845                                        kfree(old_opts.s_qf_names[j]);
5846                                kfree(orig_data);
5847                                return -ENOMEM;
5848                        }
5849                } else
5850                        old_opts.s_qf_names[i] = NULL;
5851#endif
5852        if (sbi->s_journal && sbi->s_journal->j_task->io_context)
5853                journal_ioprio = sbi->s_journal->j_task->io_context->ioprio;
5854
5855        /*
5856         * Some options can be enabled by ext4 and/or by VFS mount flag
5857         * either way we need to make sure it matches in both *flags and
5858         * s_flags. Copy those selected flags from *flags to s_flags
5859         */
5860        vfs_flags = SB_LAZYTIME | SB_I_VERSION;
5861        sb->s_flags = (sb->s_flags & ~vfs_flags) | (*flags & vfs_flags);
5862
5863        if (!parse_options(data, sb, NULL, &journal_ioprio, 1)) {
5864                err = -EINVAL;
5865                goto restore_opts;
5866        }
5867
5868        if ((old_opts.s_mount_opt & EXT4_MOUNT_JOURNAL_CHECKSUM) ^
5869            test_opt(sb, JOURNAL_CHECKSUM)) {
5870                ext4_msg(sb, KERN_ERR, "changing journal_checksum "
5871                         "during remount not supported; ignoring");
5872                sbi->s_mount_opt ^= EXT4_MOUNT_JOURNAL_CHECKSUM;
5873        }
5874
5875        if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA) {
5876                if (test_opt2(sb, EXPLICIT_DELALLOC)) {
5877                        ext4_msg(sb, KERN_ERR, "can't mount with "
5878                                 "both data=journal and delalloc");
5879                        err = -EINVAL;
5880                        goto restore_opts;
5881                }
5882                if (test_opt(sb, DIOREAD_NOLOCK)) {
5883                        ext4_msg(sb, KERN_ERR, "can't mount with "
5884                                 "both data=journal and dioread_nolock");
5885                        err = -EINVAL;
5886                        goto restore_opts;
5887                }
5888        } else if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_ORDERED_DATA) {
5889                if (test_opt(sb, JOURNAL_ASYNC_COMMIT)) {
5890                        ext4_msg(sb, KERN_ERR, "can't mount with "
5891                                "journal_async_commit in data=ordered mode");
5892                        err = -EINVAL;
5893                        goto restore_opts;
5894                }
5895        }
5896
5897        if ((sbi->s_mount_opt ^ old_opts.s_mount_opt) & EXT4_MOUNT_NO_MBCACHE) {
5898                ext4_msg(sb, KERN_ERR, "can't enable nombcache during remount");
5899                err = -EINVAL;
5900                goto restore_opts;
5901        }
5902
5903        if (ext4_test_mount_flag(sb, EXT4_MF_FS_ABORTED))
5904                ext4_abort(sb, EXT4_ERR_ESHUTDOWN, "Abort forced by user");
5905
5906        sb->s_flags = (sb->s_flags & ~SB_POSIXACL) |
5907                (test_opt(sb, POSIX_ACL) ? SB_POSIXACL : 0);
5908
5909        es = sbi->s_es;
5910
5911        if (sbi->s_journal) {
5912                ext4_init_journal_params(sb, sbi->s_journal);
5913                set_task_ioprio(sbi->s_journal->j_task, journal_ioprio);
5914        }
5915
5916        /* Flush outstanding errors before changing fs state */
5917        flush_work(&sbi->s_error_work);
5918
5919        if ((bool)(*flags & SB_RDONLY) != sb_rdonly(sb)) {
5920                if (ext4_test_mount_flag(sb, EXT4_MF_FS_ABORTED)) {
5921                        err = -EROFS;
5922                        goto restore_opts;
5923                }
5924
5925                if (*flags & SB_RDONLY) {
5926                        err = sync_filesystem(sb);
5927                        if (err < 0)
5928                                goto restore_opts;
5929                        err = dquot_suspend(sb, -1);
5930                        if (err < 0)
5931                                goto restore_opts;
5932
5933                        /*
5934                         * First of all, the unconditional stuff we have to do
5935                         * to disable replay of the journal when we next remount
5936                         */
5937                        sb->s_flags |= SB_RDONLY;
5938
5939                        /*
5940                         * OK, test if we are remounting a valid rw partition
5941                         * readonly, and if so set the rdonly flag and then
5942                         * mark the partition as valid again.
5943                         */
5944                        if (!(es->s_state & cpu_to_le16(EXT4_VALID_FS)) &&
5945                            (sbi->s_mount_state & EXT4_VALID_FS))
5946                                es->s_state = cpu_to_le16(sbi->s_mount_state);
5947
5948                        if (sbi->s_journal) {
5949                                /*
5950                                 * We let remount-ro finish even if marking fs
5951                                 * as clean failed...
5952                                 */
5953                                ext4_mark_recovery_complete(sb, es);
5954                        }
5955                        if (sbi->s_mmp_tsk)
5956                                kthread_stop(sbi->s_mmp_tsk);
5957                } else {
5958                        /* Make sure we can mount this feature set readwrite */
5959                        if (ext4_has_feature_readonly(sb) ||
5960                            !ext4_feature_set_ok(sb, 0)) {
5961                                err = -EROFS;
5962                                goto restore_opts;
5963                        }
5964                        /*
5965                         * Make sure the group descriptor checksums
5966                         * are sane.  If they aren't, refuse to remount r/w.
5967                         */
5968                        for (g = 0; g < sbi->s_groups_count; g++) {
5969                                struct ext4_group_desc *gdp =
5970                                        ext4_get_group_desc(sb, g, NULL);
5971
5972                                if (!ext4_group_desc_csum_verify(sb, g, gdp)) {
5973                                        ext4_msg(sb, KERN_ERR,
5974               "ext4_remount: Checksum for group %u failed (%u!=%u)",
5975                g, le16_to_cpu(ext4_group_desc_csum(sb, g, gdp)),
5976                                               le16_to_cpu(gdp->bg_checksum));
5977                                        err = -EFSBADCRC;
5978                                        goto restore_opts;
5979                                }
5980                        }
5981
5982                        /*
5983                         * If we have an unprocessed orphan list hanging
5984                         * around from a previously readonly bdev mount,
5985                         * require a full umount/remount for now.
5986                         */
5987                        if (es->s_last_orphan) {
5988                                ext4_msg(sb, KERN_WARNING, "Couldn't "
5989                                       "remount RDWR because of unprocessed "
5990                                       "orphan inode list.  Please "
5991                                       "umount/remount instead");
5992                                err = -EINVAL;
5993                                goto restore_opts;
5994                        }
5995
5996                        /*
5997                         * Mounting a RDONLY partition read-write, so reread
5998                         * and store the current valid flag.  (It may have
5999                         * been changed by e2fsck since we originally mounted
6000                         * the partition.)
6001                         */
6002                        if (sbi->s_journal) {
6003                                err = ext4_clear_journal_err(sb, es);
6004                                if (err)
6005                                        goto restore_opts;
6006                        }
6007                        sbi->s_mount_state = le16_to_cpu(es->s_state);
6008
6009                        err = ext4_setup_super(sb, es, 0);
6010                        if (err)
6011                                goto restore_opts;
6012
6013                        sb->s_flags &= ~SB_RDONLY;
6014                        if (ext4_has_feature_mmp(sb))
6015                                if (ext4_multi_mount_protect(sb,
6016                                                le64_to_cpu(es->s_mmp_block))) {
6017                                        err = -EROFS;
6018                                        goto restore_opts;
6019                                }
6020                        enable_quota = 1;
6021                }
6022        }
6023
6024        /*
6025         * Reinitialize lazy itable initialization thread based on
6026         * current settings
6027         */
6028        if (sb_rdonly(sb) || !test_opt(sb, INIT_INODE_TABLE))
6029                ext4_unregister_li_request(sb);
6030        else {
6031                ext4_group_t first_not_zeroed;
6032                first_not_zeroed = ext4_has_uninit_itable(sb);
6033                ext4_register_li_request(sb, first_not_zeroed);
6034        }
6035
6036        /*
6037         * Handle creation of system zone data early because it can fail.
6038         * Releasing of existing data is done when we are sure remount will
6039         * succeed.
6040         */
6041        if (test_opt(sb, BLOCK_VALIDITY) && !sbi->s_system_blks) {
6042                err = ext4_setup_system_zone(sb);
6043                if (err)
6044                        goto restore_opts;
6045        }
6046
6047        if (sbi->s_journal == NULL && !(old_sb_flags & SB_RDONLY)) {
6048                err = ext4_commit_super(sb);
6049                if (err)
6050                        goto restore_opts;
6051        }
6052
6053#ifdef CONFIG_QUOTA
6054        /* Release old quota file names */
6055        for (i = 0; i < EXT4_MAXQUOTAS; i++)
6056                kfree(old_opts.s_qf_names[i]);
6057        if (enable_quota) {
6058                if (sb_any_quota_suspended(sb))
6059                        dquot_resume(sb, -1);
6060                else if (ext4_has_feature_quota(sb)) {
6061                        err = ext4_enable_quotas(sb);
6062                        if (err)
6063                                goto restore_opts;
6064                }
6065        }
6066#endif
6067        if (!test_opt(sb, BLOCK_VALIDITY) && sbi->s_system_blks)
6068                ext4_release_system_zone(sb);
6069
6070        /*
6071         * Some options can be enabled by ext4 and/or by VFS mount flag
6072         * either way we need to make sure it matches in both *flags and
6073         * s_flags. Copy those selected flags from s_flags to *flags
6074         */
6075        *flags = (*flags & ~vfs_flags) | (sb->s_flags & vfs_flags);
6076
6077        ext4_msg(sb, KERN_INFO, "re-mounted. Opts: %s. Quota mode: %s.",
6078                 orig_data, ext4_quota_mode(sb));
6079        kfree(orig_data);
6080        return 0;
6081
6082restore_opts:
6083        sb->s_flags = old_sb_flags;
6084        sbi->s_mount_opt = old_opts.s_mount_opt;
6085        sbi->s_mount_opt2 = old_opts.s_mount_opt2;
6086        sbi->s_resuid = old_opts.s_resuid;
6087        sbi->s_resgid = old_opts.s_resgid;
6088        sbi->s_commit_interval = old_opts.s_commit_interval;
6089        sbi->s_min_batch_time = old_opts.s_min_batch_time;
6090        sbi->s_max_batch_time = old_opts.s_max_batch_time;
6091        if (!test_opt(sb, BLOCK_VALIDITY) && sbi->s_system_blks)
6092                ext4_release_system_zone(sb);
6093#ifdef CONFIG_QUOTA
6094        sbi->s_jquota_fmt = old_opts.s_jquota_fmt;
6095        for (i = 0; i < EXT4_MAXQUOTAS; i++) {
6096                to_free[i] = get_qf_name(sb, sbi, i);
6097                rcu_assign_pointer(sbi->s_qf_names[i], old_opts.s_qf_names[i]);
6098        }
6099        synchronize_rcu();
6100        for (i = 0; i < EXT4_MAXQUOTAS; i++)
6101                kfree(to_free[i]);
6102#endif
6103        kfree(orig_data);
6104        return err;
6105}
6106
6107#ifdef CONFIG_QUOTA
6108static int ext4_statfs_project(struct super_block *sb,
6109                               kprojid_t projid, struct kstatfs *buf)
6110{
6111        struct kqid qid;
6112        struct dquot *dquot;
6113        u64 limit;
6114        u64 curblock;
6115
6116        qid = make_kqid_projid(projid);
6117        dquot = dqget(sb, qid);
6118        if (IS_ERR(dquot))
6119                return PTR_ERR(dquot);
6120        spin_lock(&dquot->dq_dqb_lock);
6121
6122        limit = min_not_zero(dquot->dq_dqb.dqb_bsoftlimit,
6123                             dquot->dq_dqb.dqb_bhardlimit);
6124        limit >>= sb->s_blocksize_bits;
6125
6126        if (limit && buf->f_blocks > limit) {
6127                curblock = (dquot->dq_dqb.dqb_curspace +
6128                            dquot->dq_dqb.dqb_rsvspace) >> sb->s_blocksize_bits;
6129                buf->f_blocks = limit;
6130                buf->f_bfree = buf->f_bavail =
6131                        (buf->f_blocks > curblock) ?
6132                         (buf->f_blocks - curblock) : 0;
6133        }
6134
6135        limit = min_not_zero(dquot->dq_dqb.dqb_isoftlimit,
6136                             dquot->dq_dqb.dqb_ihardlimit);
6137        if (limit && buf->f_files > limit) {
6138                buf->f_files = limit;
6139                buf->f_ffree =
6140                        (buf->f_files > dquot->dq_dqb.dqb_curinodes) ?
6141                         (buf->f_files - dquot->dq_dqb.dqb_curinodes) : 0;
6142        }
6143
6144        spin_unlock(&dquot->dq_dqb_lock);
6145        dqput(dquot);
6146        return 0;
6147}
6148#endif
6149
6150static int ext4_statfs(struct dentry *dentry, struct kstatfs *buf)
6151{
6152        struct super_block *sb = dentry->d_sb;
6153        struct ext4_sb_info *sbi = EXT4_SB(sb);
6154        struct ext4_super_block *es = sbi->s_es;
6155        ext4_fsblk_t overhead = 0, resv_blocks;
6156        u64 fsid;
6157        s64 bfree;
6158        resv_blocks = EXT4_C2B(sbi, atomic64_read(&sbi->s_resv_clusters));
6159
6160        if (!test_opt(sb, MINIX_DF))
6161                overhead = sbi->s_overhead;
6162
6163        buf->f_type = EXT4_SUPER_MAGIC;
6164        buf->f_bsize = sb->s_blocksize;
6165        buf->f_blocks = ext4_blocks_count(es) - EXT4_C2B(sbi, overhead);
6166        bfree = percpu_counter_sum_positive(&sbi->s_freeclusters_counter) -
6167                percpu_counter_sum_positive(&sbi->s_dirtyclusters_counter);
6168        /* prevent underflow in case that few free space is available */
6169        buf->f_bfree = EXT4_C2B(sbi, max_t(s64, bfree, 0));
6170        buf->f_bavail = buf->f_bfree -
6171                        (ext4_r_blocks_count(es) + resv_blocks);
6172        if (buf->f_bfree < (ext4_r_blocks_count(es) + resv_blocks))
6173                buf->f_bavail = 0;
6174        buf->f_files = le32_to_cpu(es->s_inodes_count);
6175        buf->f_ffree = percpu_counter_sum_positive(&sbi->s_freeinodes_counter);
6176        buf->f_namelen = EXT4_NAME_LEN;
6177        fsid = le64_to_cpup((void *)es->s_uuid) ^
6178               le64_to_cpup((void *)es->s_uuid + sizeof(u64));
6179        buf->f_fsid = u64_to_fsid(fsid);
6180
6181#ifdef CONFIG_QUOTA
6182        if (ext4_test_inode_flag(dentry->d_inode, EXT4_INODE_PROJINHERIT) &&
6183            sb_has_quota_limits_enabled(sb, PRJQUOTA))
6184                ext4_statfs_project(sb, EXT4_I(dentry->d_inode)->i_projid, buf);
6185#endif
6186        return 0;
6187}
6188
6189
6190#ifdef CONFIG_QUOTA
6191
6192/*
6193 * Helper functions so that transaction is started before we acquire dqio_sem
6194 * to keep correct lock ordering of transaction > dqio_sem
6195 */
6196static inline struct inode *dquot_to_inode(struct dquot *dquot)
6197{
6198        return sb_dqopt(dquot->dq_sb)->files[dquot->dq_id.type];
6199}
6200
6201static int ext4_write_dquot(struct dquot *dquot)
6202{
6203        int ret, err;
6204        handle_t *handle;
6205        struct inode *inode;
6206
6207        inode = dquot_to_inode(dquot);
6208        handle = ext4_journal_start(inode, EXT4_HT_QUOTA,
6209                                    EXT4_QUOTA_TRANS_BLOCKS(dquot->dq_sb));
6210        if (IS_ERR(handle))
6211                return PTR_ERR(handle);
6212        ret = dquot_commit(dquot);
6213        err = ext4_journal_stop(handle);
6214        if (!ret)
6215                ret = err;
6216        return ret;
6217}
6218
6219static int ext4_acquire_dquot(struct dquot *dquot)
6220{
6221        int ret, err;
6222        handle_t *handle;
6223
6224        handle = ext4_journal_start(dquot_to_inode(dquot), EXT4_HT_QUOTA,
6225                                    EXT4_QUOTA_INIT_BLOCKS(dquot->dq_sb));
6226        if (IS_ERR(handle))
6227                return PTR_ERR(handle);
6228        ret = dquot_acquire(dquot);
6229        err = ext4_journal_stop(handle);
6230        if (!ret)
6231                ret = err;
6232        return ret;
6233}
6234
6235static int ext4_release_dquot(struct dquot *dquot)
6236{
6237        int ret, err;
6238        handle_t *handle;
6239
6240        handle = ext4_journal_start(dquot_to_inode(dquot), EXT4_HT_QUOTA,
6241                                    EXT4_QUOTA_DEL_BLOCKS(dquot->dq_sb));
6242        if (IS_ERR(handle)) {
6243                /* Release dquot anyway to avoid endless cycle in dqput() */
6244                dquot_release(dquot);
6245                return PTR_ERR(handle);
6246        }
6247        ret = dquot_release(dquot);
6248        err = ext4_journal_stop(handle);
6249        if (!ret)
6250                ret = err;
6251        return ret;
6252}
6253
6254static int ext4_mark_dquot_dirty(struct dquot *dquot)
6255{
6256        struct super_block *sb = dquot->dq_sb;
6257
6258        if (ext4_is_quota_journalled(sb)) {
6259                dquot_mark_dquot_dirty(dquot);
6260                return ext4_write_dquot(dquot);
6261        } else {
6262                return dquot_mark_dquot_dirty(dquot);
6263        }
6264}
6265
6266static int ext4_write_info(struct super_block *sb, int type)
6267{
6268        int ret, err;
6269        handle_t *handle;
6270
6271        /* Data block + inode block */
6272        handle = ext4_journal_start(d_inode(sb->s_root), EXT4_HT_QUOTA, 2);
6273        if (IS_ERR(handle))
6274                return PTR_ERR(handle);
6275        ret = dquot_commit_info(sb, type);
6276        err = ext4_journal_stop(handle);
6277        if (!ret)
6278                ret = err;
6279        return ret;
6280}
6281
6282/*
6283 * Turn on quotas during mount time - we need to find
6284 * the quota file and such...
6285 */
6286static int ext4_quota_on_mount(struct super_block *sb, int type)
6287{
6288        return dquot_quota_on_mount(sb, get_qf_name(sb, EXT4_SB(sb), type),
6289                                        EXT4_SB(sb)->s_jquota_fmt, type);
6290}
6291
6292static void lockdep_set_quota_inode(struct inode *inode, int subclass)
6293{
6294        struct ext4_inode_info *ei = EXT4_I(inode);
6295
6296        /* The first argument of lockdep_set_subclass has to be
6297         * *exactly* the same as the argument to init_rwsem() --- in
6298         * this case, in init_once() --- or lockdep gets unhappy
6299         * because the name of the lock is set using the
6300         * stringification of the argument to init_rwsem().
6301         */
6302        (void) ei;      /* shut up clang warning if !CONFIG_LOCKDEP */
6303        lockdep_set_subclass(&ei->i_data_sem, subclass);
6304}
6305
6306/*
6307 * Standard function to be called on quota_on
6308 */
6309static int ext4_quota_on(struct super_block *sb, int type, int format_id,
6310                         const struct path *path)
6311{
6312        int err;
6313
6314        if (!test_opt(sb, QUOTA))
6315                return -EINVAL;
6316
6317        /* Quotafile not on the same filesystem? */
6318        if (path->dentry->d_sb != sb)
6319                return -EXDEV;
6320
6321        /* Quota already enabled for this file? */
6322        if (IS_NOQUOTA(d_inode(path->dentry)))
6323                return -EBUSY;
6324
6325        /* Journaling quota? */
6326        if (EXT4_SB(sb)->s_qf_names[type]) {
6327                /* Quotafile not in fs root? */
6328                if (path->dentry->d_parent != sb->s_root)
6329                        ext4_msg(sb, KERN_WARNING,
6330                                "Quota file not on filesystem root. "
6331                                "Journaled quota will not work");
6332                sb_dqopt(sb)->flags |= DQUOT_NOLIST_DIRTY;
6333        } else {
6334                /*
6335                 * Clear the flag just in case mount options changed since
6336                 * last time.
6337                 */
6338                sb_dqopt(sb)->flags &= ~DQUOT_NOLIST_DIRTY;
6339        }
6340
6341        /*
6342         * When we journal data on quota file, we have to flush journal to see
6343         * all updates to the file when we bypass pagecache...
6344         */
6345        if (EXT4_SB(sb)->s_journal &&
6346            ext4_should_journal_data(d_inode(path->dentry))) {
6347                /*
6348                 * We don't need to lock updates but journal_flush() could
6349                 * otherwise be livelocked...
6350                 */
6351                jbd2_journal_lock_updates(EXT4_SB(sb)->s_journal);
6352                err = jbd2_journal_flush(EXT4_SB(sb)->s_journal);
6353                jbd2_journal_unlock_updates(EXT4_SB(sb)->s_journal);
6354                if (err)
6355                        return err;
6356        }
6357
6358        lockdep_set_quota_inode(path->dentry->d_inode, I_DATA_SEM_QUOTA);
6359        err = dquot_quota_on(sb, type, format_id, path);
6360        if (err) {
6361                lockdep_set_quota_inode(path->dentry->d_inode,
6362                                             I_DATA_SEM_NORMAL);
6363        } else {
6364                struct inode *inode = d_inode(path->dentry);
6365                handle_t *handle;
6366
6367                /*
6368                 * Set inode flags to prevent userspace from messing with quota
6369                 * files. If this fails, we return success anyway since quotas
6370                 * are already enabled and this is not a hard failure.
6371                 */
6372                inode_lock(inode);
6373                handle = ext4_journal_start(inode, EXT4_HT_QUOTA, 1);
6374                if (IS_ERR(handle))
6375                        goto unlock_inode;
6376                EXT4_I(inode)->i_flags |= EXT4_NOATIME_FL | EXT4_IMMUTABLE_FL;
6377                inode_set_flags(inode, S_NOATIME | S_IMMUTABLE,
6378                                S_NOATIME | S_IMMUTABLE);
6379                err = ext4_mark_inode_dirty(handle, inode);
6380                ext4_journal_stop(handle);
6381        unlock_inode:
6382                inode_unlock(inode);
6383        }
6384        return err;
6385}
6386
6387static int ext4_quota_enable(struct super_block *sb, int type, int format_id,
6388                             unsigned int flags)
6389{
6390        int err;
6391        struct inode *qf_inode;
6392        unsigned long qf_inums[EXT4_MAXQUOTAS] = {
6393                le32_to_cpu(EXT4_SB(sb)->s_es->s_usr_quota_inum),
6394                le32_to_cpu(EXT4_SB(sb)->s_es->s_grp_quota_inum),
6395                le32_to_cpu(EXT4_SB(sb)->s_es->s_prj_quota_inum)
6396        };
6397
6398        BUG_ON(!ext4_has_feature_quota(sb));
6399
6400        if (!qf_inums[type])
6401                return -EPERM;
6402
6403        qf_inode = ext4_iget(sb, qf_inums[type], EXT4_IGET_SPECIAL);
6404        if (IS_ERR(qf_inode)) {
6405                ext4_error(sb, "Bad quota inode # %lu", qf_inums[type]);
6406                return PTR_ERR(qf_inode);
6407        }
6408
6409        /* Don't account quota for quota files to avoid recursion */
6410        qf_inode->i_flags |= S_NOQUOTA;
6411        lockdep_set_quota_inode(qf_inode, I_DATA_SEM_QUOTA);
6412        err = dquot_load_quota_inode(qf_inode, type, format_id, flags);
6413        if (err)
6414                lockdep_set_quota_inode(qf_inode, I_DATA_SEM_NORMAL);
6415        iput(qf_inode);
6416
6417        return err;
6418}
6419
6420/* Enable usage tracking for all quota types. */
6421static int ext4_enable_quotas(struct super_block *sb)
6422{
6423        int type, err = 0;
6424        unsigned long qf_inums[EXT4_MAXQUOTAS] = {
6425                le32_to_cpu(EXT4_SB(sb)->s_es->s_usr_quota_inum),
6426                le32_to_cpu(EXT4_SB(sb)->s_es->s_grp_quota_inum),
6427                le32_to_cpu(EXT4_SB(sb)->s_es->s_prj_quota_inum)
6428        };
6429        bool quota_mopt[EXT4_MAXQUOTAS] = {
6430                test_opt(sb, USRQUOTA),
6431                test_opt(sb, GRPQUOTA),
6432                test_opt(sb, PRJQUOTA),
6433        };
6434
6435        sb_dqopt(sb)->flags |= DQUOT_QUOTA_SYS_FILE | DQUOT_NOLIST_DIRTY;
6436        for (type = 0; type < EXT4_MAXQUOTAS; type++) {
6437                if (qf_inums[type]) {
6438                        err = ext4_quota_enable(sb, type, QFMT_VFS_V1,
6439                                DQUOT_USAGE_ENABLED |
6440                                (quota_mopt[type] ? DQUOT_LIMITS_ENABLED : 0));
6441                        if (err) {
6442                                ext4_warning(sb,
6443                                        "Failed to enable quota tracking "
6444                                        "(type=%d, err=%d). Please run "
6445                                        "e2fsck to fix.", type, err);
6446                                for (type--; type >= 0; type--)
6447                                        dquot_quota_off(sb, type);
6448
6449                                return err;
6450                        }
6451                }
6452        }
6453        return 0;
6454}
6455
6456static int ext4_quota_off(struct super_block *sb, int type)
6457{
6458        struct inode *inode = sb_dqopt(sb)->files[type];
6459        handle_t *handle;
6460        int err;
6461
6462        /* Force all delayed allocation blocks to be allocated.
6463         * Caller already holds s_umount sem */
6464        if (test_opt(sb, DELALLOC))
6465                sync_filesystem(sb);
6466
6467        if (!inode || !igrab(inode))
6468                goto out;
6469
6470        err = dquot_quota_off(sb, type);
6471        if (err || ext4_has_feature_quota(sb))
6472                goto out_put;
6473
6474        inode_lock(inode);
6475        /*
6476         * Update modification times of quota files when userspace can
6477         * start looking at them. If we fail, we return success anyway since
6478         * this is not a hard failure and quotas are already disabled.
6479         */
6480        handle = ext4_journal_start(inode, EXT4_HT_QUOTA, 1);
6481        if (IS_ERR(handle)) {
6482                err = PTR_ERR(handle);
6483                goto out_unlock;
6484        }
6485        EXT4_I(inode)->i_flags &= ~(EXT4_NOATIME_FL | EXT4_IMMUTABLE_FL);
6486        inode_set_flags(inode, 0, S_NOATIME | S_IMMUTABLE);
6487        inode->i_mtime = inode->i_ctime = current_time(inode);
6488        err = ext4_mark_inode_dirty(handle, inode);
6489        ext4_journal_stop(handle);
6490out_unlock:
6491        inode_unlock(inode);
6492out_put:
6493        lockdep_set_quota_inode(inode, I_DATA_SEM_NORMAL);
6494        iput(inode);
6495        return err;
6496out:
6497        return dquot_quota_off(sb, type);
6498}
6499
6500/* Read data from quotafile - avoid pagecache and such because we cannot afford
6501 * acquiring the locks... As quota files are never truncated and quota code
6502 * itself serializes the operations (and no one else should touch the files)
6503 * we don't have to be afraid of races */
6504static ssize_t ext4_quota_read(struct super_block *sb, int type, char *data,
6505                               size_t len, loff_t off)
6506{
6507        struct inode *inode = sb_dqopt(sb)->files[type];
6508        ext4_lblk_t blk = off >> EXT4_BLOCK_SIZE_BITS(sb);
6509        int offset = off & (sb->s_blocksize - 1);
6510        int tocopy;
6511        size_t toread;
6512        struct buffer_head *bh;
6513        loff_t i_size = i_size_read(inode);
6514
6515        if (off > i_size)
6516                return 0;
6517        if (off+len > i_size)
6518                len = i_size-off;
6519        toread = len;
6520        while (toread > 0) {
6521                tocopy = sb->s_blocksize - offset < toread ?
6522                                sb->s_blocksize - offset : toread;
6523                bh = ext4_bread(NULL, inode, blk, 0);
6524                if (IS_ERR(bh))
6525                        return PTR_ERR(bh);
6526                if (!bh)        /* A hole? */
6527                        memset(data, 0, tocopy);
6528                else
6529                        memcpy(data, bh->b_data+offset, tocopy);
6530                brelse(bh);
6531                offset = 0;
6532                toread -= tocopy;
6533                data += tocopy;
6534                blk++;
6535        }
6536        return len;
6537}
6538
6539/* Write to quotafile (we know the transaction is already started and has
6540 * enough credits) */
6541static ssize_t ext4_quota_write(struct super_block *sb, int type,
6542                                const char *data, size_t len, loff_t off)
6543{
6544        struct inode *inode = sb_dqopt(sb)->files[type];
6545        ext4_lblk_t blk = off >> EXT4_BLOCK_SIZE_BITS(sb);
6546        int err = 0, err2 = 0, offset = off & (sb->s_blocksize - 1);
6547        int retries = 0;
6548        struct buffer_head *bh;
6549        handle_t *handle = journal_current_handle();
6550
6551        if (EXT4_SB(sb)->s_journal && !handle) {
6552                ext4_msg(sb, KERN_WARNING, "Quota write (off=%llu, len=%llu)"
6553                        " cancelled because transaction is not started",
6554                        (unsigned long long)off, (unsigned long long)len);
6555                return -EIO;
6556        }
6557        /*
6558         * Since we account only one data block in transaction credits,
6559         * then it is impossible to cross a block boundary.
6560         */
6561        if (sb->s_blocksize - offset < len) {
6562                ext4_msg(sb, KERN_WARNING, "Quota write (off=%llu, len=%llu)"
6563                        " cancelled because not block aligned",
6564                        (unsigned long long)off, (unsigned long long)len);
6565                return -EIO;
6566        }
6567
6568        do {
6569                bh = ext4_bread(handle, inode, blk,
6570                                EXT4_GET_BLOCKS_CREATE |
6571                                EXT4_GET_BLOCKS_METADATA_NOFAIL);
6572        } while (PTR_ERR(bh) == -ENOSPC &&
6573                 ext4_should_retry_alloc(inode->i_sb, &retries));
6574        if (IS_ERR(bh))
6575                return PTR_ERR(bh);
6576        if (!bh)
6577                goto out;
6578        BUFFER_TRACE(bh, "get write access");
6579        err = ext4_journal_get_write_access(handle, bh);
6580        if (err) {
6581                brelse(bh);
6582                return err;
6583        }
6584        lock_buffer(bh);
6585        memcpy(bh->b_data+offset, data, len);
6586        flush_dcache_page(bh->b_page);
6587        unlock_buffer(bh);
6588        err = ext4_handle_dirty_metadata(handle, NULL, bh);
6589        brelse(bh);
6590out:
6591        if (inode->i_size < off + len) {
6592                i_size_write(inode, off + len);
6593                EXT4_I(inode)->i_disksize = inode->i_size;
6594                err2 = ext4_mark_inode_dirty(handle, inode);
6595                if (unlikely(err2 && !err))
6596                        err = err2;
6597        }
6598        return err ? err : len;
6599}
6600#endif
6601
6602static struct dentry *ext4_mount(struct file_system_type *fs_type, int flags,
6603                       const char *dev_name, void *data)
6604{
6605        return mount_bdev(fs_type, flags, dev_name, data, ext4_fill_super);
6606}
6607
6608#if !defined(CONFIG_EXT2_FS) && !defined(CONFIG_EXT2_FS_MODULE) && defined(CONFIG_EXT4_USE_FOR_EXT2)
6609static inline void register_as_ext2(void)
6610{
6611        int err = register_filesystem(&ext2_fs_type);
6612        if (err)
6613                printk(KERN_WARNING
6614                       "EXT4-fs: Unable to register as ext2 (%d)\n", err);
6615}
6616
6617static inline void unregister_as_ext2(void)
6618{
6619        unregister_filesystem(&ext2_fs_type);
6620}
6621
6622static inline int ext2_feature_set_ok(struct super_block *sb)
6623{
6624        if (ext4_has_unknown_ext2_incompat_features(sb))
6625                return 0;
6626        if (sb_rdonly(sb))
6627                return 1;
6628        if (ext4_has_unknown_ext2_ro_compat_features(sb))
6629                return 0;
6630        return 1;
6631}
6632#else
6633static inline void register_as_ext2(void) { }
6634static inline void unregister_as_ext2(void) { }
6635static inline int ext2_feature_set_ok(struct super_block *sb) { return 0; }
6636#endif
6637
6638static inline void register_as_ext3(void)
6639{
6640        int err = register_filesystem(&ext3_fs_type);
6641        if (err)
6642                printk(KERN_WARNING
6643                       "EXT4-fs: Unable to register as ext3 (%d)\n", err);
6644}
6645
6646static inline void unregister_as_ext3(void)
6647{
6648        unregister_filesystem(&ext3_fs_type);
6649}
6650
6651static inline int ext3_feature_set_ok(struct super_block *sb)
6652{
6653        if (ext4_has_unknown_ext3_incompat_features(sb))
6654                return 0;
6655        if (!ext4_has_feature_journal(sb))
6656                return 0;
6657        if (sb_rdonly(sb))
6658                return 1;
6659        if (ext4_has_unknown_ext3_ro_compat_features(sb))
6660                return 0;
6661        return 1;
6662}
6663
6664static struct file_system_type ext4_fs_type = {
6665        .owner          = THIS_MODULE,
6666        .name           = "ext4",
6667        .mount          = ext4_mount,
6668        .kill_sb        = kill_block_super,
6669        .fs_flags       = FS_REQUIRES_DEV | FS_ALLOW_IDMAP,
6670};
6671MODULE_ALIAS_FS("ext4");
6672
6673/* Shared across all ext4 file systems */
6674wait_queue_head_t ext4__ioend_wq[EXT4_WQ_HASH_SZ];
6675
6676static int __init ext4_init_fs(void)
6677{
6678        int i, err;
6679
6680        ratelimit_state_init(&ext4_mount_msg_ratelimit, 30 * HZ, 64);
6681        ext4_li_info = NULL;
6682
6683        /* Build-time check for flags consistency */
6684        ext4_check_flag_values();
6685
6686        for (i = 0; i < EXT4_WQ_HASH_SZ; i++)
6687                init_waitqueue_head(&ext4__ioend_wq[i]);
6688
6689        err = ext4_init_es();
6690        if (err)
6691                return err;
6692
6693        err = ext4_init_pending();
6694        if (err)
6695                goto out7;
6696
6697        err = ext4_init_post_read_processing();
6698        if (err)
6699                goto out6;
6700
6701        err = ext4_init_pageio();
6702        if (err)
6703                goto out5;
6704
6705        err = ext4_init_system_zone();
6706        if (err)
6707                goto out4;
6708
6709        err = ext4_init_sysfs();
6710        if (err)
6711                goto out3;
6712
6713        err = ext4_init_mballoc();
6714        if (err)
6715                goto out2;
6716        err = init_inodecache();
6717        if (err)
6718                goto out1;
6719
6720        err = ext4_fc_init_dentry_cache();
6721        if (err)
6722                goto out05;
6723
6724        register_as_ext3();
6725        register_as_ext2();
6726        err = register_filesystem(&ext4_fs_type);
6727        if (err)
6728                goto out;
6729
6730        return 0;
6731out:
6732        unregister_as_ext2();
6733        unregister_as_ext3();
6734out05:
6735        destroy_inodecache();
6736out1:
6737        ext4_exit_mballoc();
6738out2:
6739        ext4_exit_sysfs();
6740out3:
6741        ext4_exit_system_zone();
6742out4:
6743        ext4_exit_pageio();
6744out5:
6745        ext4_exit_post_read_processing();
6746out6:
6747        ext4_exit_pending();
6748out7:
6749        ext4_exit_es();
6750
6751        return err;
6752}
6753
6754static void __exit ext4_exit_fs(void)
6755{
6756        ext4_destroy_lazyinit_thread();
6757        unregister_as_ext2();
6758        unregister_as_ext3();
6759        unregister_filesystem(&ext4_fs_type);
6760        destroy_inodecache();
6761        ext4_exit_mballoc();
6762        ext4_exit_sysfs();
6763        ext4_exit_system_zone();
6764        ext4_exit_pageio();
6765        ext4_exit_post_read_processing();
6766        ext4_exit_es();
6767        ext4_exit_pending();
6768}
6769
6770MODULE_AUTHOR("Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore Ts'o and others");
6771MODULE_DESCRIPTION("Fourth Extended Filesystem");
6772MODULE_LICENSE("GPL");
6773MODULE_SOFTDEP("pre: crc32c");
6774module_init(ext4_init_fs)
6775module_exit(ext4_exit_fs)
6776