linux/fs/ext3/super.c
<<
>>
Prefs
   1/*
   2 *  linux/fs/ext3/super.c
   3 *
   4 * Copyright (C) 1992, 1993, 1994, 1995
   5 * Remy Card (card@masi.ibp.fr)
   6 * Laboratoire MASI - Institut Blaise Pascal
   7 * Universite Pierre et Marie Curie (Paris VI)
   8 *
   9 *  from
  10 *
  11 *  linux/fs/minix/inode.c
  12 *
  13 *  Copyright (C) 1991, 1992  Linus Torvalds
  14 *
  15 *  Big-endian to little-endian byte-swapping/bitmaps by
  16 *        David S. Miller (davem@caip.rutgers.edu), 1995
  17 */
  18
  19#include <linux/module.h>
  20#include <linux/blkdev.h>
  21#include <linux/parser.h>
  22#include <linux/exportfs.h>
  23#include <linux/statfs.h>
  24#include <linux/random.h>
  25#include <linux/mount.h>
  26#include <linux/quotaops.h>
  27#include <linux/seq_file.h>
  28#include <linux/log2.h>
  29#include <linux/cleancache.h>
  30#include <linux/namei.h>
  31
  32#include <asm/uaccess.h>
  33
  34#define CREATE_TRACE_POINTS
  35
  36#include "ext3.h"
  37#include "xattr.h"
  38#include "acl.h"
  39#include "namei.h"
  40
  41#ifdef CONFIG_EXT3_DEFAULTS_TO_ORDERED
  42  #define EXT3_MOUNT_DEFAULT_DATA_MODE EXT3_MOUNT_ORDERED_DATA
  43#else
  44  #define EXT3_MOUNT_DEFAULT_DATA_MODE EXT3_MOUNT_WRITEBACK_DATA
  45#endif
  46
  47static int ext3_load_journal(struct super_block *, struct ext3_super_block *,
  48                             unsigned long journal_devnum);
  49static int ext3_create_journal(struct super_block *, struct ext3_super_block *,
  50                               unsigned int);
  51static int ext3_commit_super(struct super_block *sb,
  52                               struct ext3_super_block *es,
  53                               int sync);
  54static void ext3_mark_recovery_complete(struct super_block * sb,
  55                                        struct ext3_super_block * es);
  56static void ext3_clear_journal_err(struct super_block * sb,
  57                                   struct ext3_super_block * es);
  58static int ext3_sync_fs(struct super_block *sb, int wait);
  59static const char *ext3_decode_error(struct super_block * sb, int errno,
  60                                     char nbuf[16]);
  61static int ext3_remount (struct super_block * sb, int * flags, char * data);
  62static int ext3_statfs (struct dentry * dentry, struct kstatfs * buf);
  63static int ext3_unfreeze(struct super_block *sb);
  64static int ext3_freeze(struct super_block *sb);
  65
  66/*
  67 * Wrappers for journal_start/end.
  68 */
  69handle_t *ext3_journal_start_sb(struct super_block *sb, int nblocks)
  70{
  71        journal_t *journal;
  72
  73        if (sb->s_flags & MS_RDONLY)
  74                return ERR_PTR(-EROFS);
  75
  76        /* Special case here: if the journal has aborted behind our
  77         * backs (eg. EIO in the commit thread), then we still need to
  78         * take the FS itself readonly cleanly. */
  79        journal = EXT3_SB(sb)->s_journal;
  80        if (is_journal_aborted(journal)) {
  81                ext3_abort(sb, __func__,
  82                           "Detected aborted journal");
  83                return ERR_PTR(-EROFS);
  84        }
  85
  86        return journal_start(journal, nblocks);
  87}
  88
  89int __ext3_journal_stop(const char *where, handle_t *handle)
  90{
  91        struct super_block *sb;
  92        int err;
  93        int rc;
  94
  95        sb = handle->h_transaction->t_journal->j_private;
  96        err = handle->h_err;
  97        rc = journal_stop(handle);
  98
  99        if (!err)
 100                err = rc;
 101        if (err)
 102                __ext3_std_error(sb, where, err);
 103        return err;
 104}
 105
 106void ext3_journal_abort_handle(const char *caller, const char *err_fn,
 107                struct buffer_head *bh, handle_t *handle, int err)
 108{
 109        char nbuf[16];
 110        const char *errstr = ext3_decode_error(NULL, err, nbuf);
 111
 112        if (bh)
 113                BUFFER_TRACE(bh, "abort");
 114
 115        if (!handle->h_err)
 116                handle->h_err = err;
 117
 118        if (is_handle_aborted(handle))
 119                return;
 120
 121        printk(KERN_ERR "EXT3-fs: %s: aborting transaction: %s in %s\n",
 122                caller, errstr, err_fn);
 123
 124        journal_abort_handle(handle);
 125}
 126
 127void ext3_msg(struct super_block *sb, const char *prefix,
 128                const char *fmt, ...)
 129{
 130        struct va_format vaf;
 131        va_list args;
 132
 133        va_start(args, fmt);
 134
 135        vaf.fmt = fmt;
 136        vaf.va = &args;
 137
 138        printk("%sEXT3-fs (%s): %pV\n", prefix, sb->s_id, &vaf);
 139
 140        va_end(args);
 141}
 142
 143/* Deal with the reporting of failure conditions on a filesystem such as
 144 * inconsistencies detected or read IO failures.
 145 *
 146 * On ext2, we can store the error state of the filesystem in the
 147 * superblock.  That is not possible on ext3, because we may have other
 148 * write ordering constraints on the superblock which prevent us from
 149 * writing it out straight away; and given that the journal is about to
 150 * be aborted, we can't rely on the current, or future, transactions to
 151 * write out the superblock safely.
 152 *
 153 * We'll just use the journal_abort() error code to record an error in
 154 * the journal instead.  On recovery, the journal will complain about
 155 * that error until we've noted it down and cleared it.
 156 */
 157
 158static void ext3_handle_error(struct super_block *sb)
 159{
 160        struct ext3_super_block *es = EXT3_SB(sb)->s_es;
 161
 162        EXT3_SB(sb)->s_mount_state |= EXT3_ERROR_FS;
 163        es->s_state |= cpu_to_le16(EXT3_ERROR_FS);
 164
 165        if (sb->s_flags & MS_RDONLY)
 166                return;
 167
 168        if (!test_opt (sb, ERRORS_CONT)) {
 169                journal_t *journal = EXT3_SB(sb)->s_journal;
 170
 171                set_opt(EXT3_SB(sb)->s_mount_opt, ABORT);
 172                if (journal)
 173                        journal_abort(journal, -EIO);
 174        }
 175        if (test_opt (sb, ERRORS_RO)) {
 176                ext3_msg(sb, KERN_CRIT,
 177                        "error: remounting filesystem read-only");
 178                /*
 179                 * Make sure updated value of ->s_mount_state will be visible
 180                 * before ->s_flags update.
 181                 */
 182                smp_wmb();
 183                sb->s_flags |= MS_RDONLY;
 184        }
 185        ext3_commit_super(sb, es, 1);
 186        if (test_opt(sb, ERRORS_PANIC))
 187                panic("EXT3-fs (%s): panic forced after error\n",
 188                        sb->s_id);
 189}
 190
 191void ext3_error(struct super_block *sb, const char *function,
 192                const char *fmt, ...)
 193{
 194        struct va_format vaf;
 195        va_list args;
 196
 197        va_start(args, fmt);
 198
 199        vaf.fmt = fmt;
 200        vaf.va = &args;
 201
 202        printk(KERN_CRIT "EXT3-fs error (device %s): %s: %pV\n",
 203               sb->s_id, function, &vaf);
 204
 205        va_end(args);
 206
 207        ext3_handle_error(sb);
 208}
 209
 210static const char *ext3_decode_error(struct super_block * sb, int errno,
 211                                     char nbuf[16])
 212{
 213        char *errstr = NULL;
 214
 215        switch (errno) {
 216        case -EIO:
 217                errstr = "IO failure";
 218                break;
 219        case -ENOMEM:
 220                errstr = "Out of memory";
 221                break;
 222        case -EROFS:
 223                if (!sb || EXT3_SB(sb)->s_journal->j_flags & JFS_ABORT)
 224                        errstr = "Journal has aborted";
 225                else
 226                        errstr = "Readonly filesystem";
 227                break;
 228        default:
 229                /* If the caller passed in an extra buffer for unknown
 230                 * errors, textualise them now.  Else we just return
 231                 * NULL. */
 232                if (nbuf) {
 233                        /* Check for truncated error codes... */
 234                        if (snprintf(nbuf, 16, "error %d", -errno) >= 0)
 235                                errstr = nbuf;
 236                }
 237                break;
 238        }
 239
 240        return errstr;
 241}
 242
 243/* __ext3_std_error decodes expected errors from journaling functions
 244 * automatically and invokes the appropriate error response.  */
 245
 246void __ext3_std_error (struct super_block * sb, const char * function,
 247                       int errno)
 248{
 249        char nbuf[16];
 250        const char *errstr;
 251
 252        /* Special case: if the error is EROFS, and we're not already
 253         * inside a transaction, then there's really no point in logging
 254         * an error. */
 255        if (errno == -EROFS && journal_current_handle() == NULL &&
 256            (sb->s_flags & MS_RDONLY))
 257                return;
 258
 259        errstr = ext3_decode_error(sb, errno, nbuf);
 260        ext3_msg(sb, KERN_CRIT, "error in %s: %s", function, errstr);
 261
 262        ext3_handle_error(sb);
 263}
 264
 265/*
 266 * ext3_abort is a much stronger failure handler than ext3_error.  The
 267 * abort function may be used to deal with unrecoverable failures such
 268 * as journal IO errors or ENOMEM at a critical moment in log management.
 269 *
 270 * We unconditionally force the filesystem into an ABORT|READONLY state,
 271 * unless the error response on the fs has been set to panic in which
 272 * case we take the easy way out and panic immediately.
 273 */
 274
 275void ext3_abort(struct super_block *sb, const char *function,
 276                 const char *fmt, ...)
 277{
 278        struct va_format vaf;
 279        va_list args;
 280
 281        va_start(args, fmt);
 282
 283        vaf.fmt = fmt;
 284        vaf.va = &args;
 285
 286        printk(KERN_CRIT "EXT3-fs (%s): error: %s: %pV\n",
 287               sb->s_id, function, &vaf);
 288
 289        va_end(args);
 290
 291        if (test_opt(sb, ERRORS_PANIC))
 292                panic("EXT3-fs: panic from previous error\n");
 293
 294        if (sb->s_flags & MS_RDONLY)
 295                return;
 296
 297        ext3_msg(sb, KERN_CRIT,
 298                "error: remounting filesystem read-only");
 299        EXT3_SB(sb)->s_mount_state |= EXT3_ERROR_FS;
 300        set_opt(EXT3_SB(sb)->s_mount_opt, ABORT);
 301        /*
 302         * Make sure updated value of ->s_mount_state will be visible
 303         * before ->s_flags update.
 304         */
 305        smp_wmb();
 306        sb->s_flags |= MS_RDONLY;
 307
 308        if (EXT3_SB(sb)->s_journal)
 309                journal_abort(EXT3_SB(sb)->s_journal, -EIO);
 310}
 311
 312void ext3_warning(struct super_block *sb, const char *function,
 313                  const char *fmt, ...)
 314{
 315        struct va_format vaf;
 316        va_list args;
 317
 318        va_start(args, fmt);
 319
 320        vaf.fmt = fmt;
 321        vaf.va = &args;
 322
 323        printk(KERN_WARNING "EXT3-fs (%s): warning: %s: %pV\n",
 324               sb->s_id, function, &vaf);
 325
 326        va_end(args);
 327}
 328
 329void ext3_update_dynamic_rev(struct super_block *sb)
 330{
 331        struct ext3_super_block *es = EXT3_SB(sb)->s_es;
 332
 333        if (le32_to_cpu(es->s_rev_level) > EXT3_GOOD_OLD_REV)
 334                return;
 335
 336        ext3_msg(sb, KERN_WARNING,
 337                "warning: updating to rev %d because of "
 338                "new feature flag, running e2fsck is recommended",
 339                EXT3_DYNAMIC_REV);
 340
 341        es->s_first_ino = cpu_to_le32(EXT3_GOOD_OLD_FIRST_INO);
 342        es->s_inode_size = cpu_to_le16(EXT3_GOOD_OLD_INODE_SIZE);
 343        es->s_rev_level = cpu_to_le32(EXT3_DYNAMIC_REV);
 344        /* leave es->s_feature_*compat flags alone */
 345        /* es->s_uuid will be set by e2fsck if empty */
 346
 347        /*
 348         * The rest of the superblock fields should be zero, and if not it
 349         * means they are likely already in use, so leave them alone.  We
 350         * can leave it up to e2fsck to clean up any inconsistencies there.
 351         */
 352}
 353
 354/*
 355 * Open the external journal device
 356 */
 357static struct block_device *ext3_blkdev_get(dev_t dev, struct super_block *sb)
 358{
 359        struct block_device *bdev;
 360        char b[BDEVNAME_SIZE];
 361
 362        bdev = blkdev_get_by_dev(dev, FMODE_READ|FMODE_WRITE|FMODE_EXCL, sb);
 363        if (IS_ERR(bdev))
 364                goto fail;
 365        return bdev;
 366
 367fail:
 368        ext3_msg(sb, KERN_ERR, "error: failed to open journal device %s: %ld",
 369                __bdevname(dev, b), PTR_ERR(bdev));
 370
 371        return NULL;
 372}
 373
 374/*
 375 * Release the journal device
 376 */
 377static void ext3_blkdev_put(struct block_device *bdev)
 378{
 379        blkdev_put(bdev, FMODE_READ|FMODE_WRITE|FMODE_EXCL);
 380}
 381
 382static void ext3_blkdev_remove(struct ext3_sb_info *sbi)
 383{
 384        struct block_device *bdev;
 385        bdev = sbi->journal_bdev;
 386        if (bdev) {
 387                ext3_blkdev_put(bdev);
 388                sbi->journal_bdev = NULL;
 389        }
 390}
 391
 392static inline struct inode *orphan_list_entry(struct list_head *l)
 393{
 394        return &list_entry(l, struct ext3_inode_info, i_orphan)->vfs_inode;
 395}
 396
 397static void dump_orphan_list(struct super_block *sb, struct ext3_sb_info *sbi)
 398{
 399        struct list_head *l;
 400
 401        ext3_msg(sb, KERN_ERR, "error: sb orphan head is %d",
 402               le32_to_cpu(sbi->s_es->s_last_orphan));
 403
 404        ext3_msg(sb, KERN_ERR, "sb_info orphan list:");
 405        list_for_each(l, &sbi->s_orphan) {
 406                struct inode *inode = orphan_list_entry(l);
 407                ext3_msg(sb, KERN_ERR, "  "
 408                       "inode %s:%lu at %p: mode %o, nlink %d, next %d\n",
 409                       inode->i_sb->s_id, inode->i_ino, inode,
 410                       inode->i_mode, inode->i_nlink,
 411                       NEXT_ORPHAN(inode));
 412        }
 413}
 414
 415static void ext3_put_super (struct super_block * sb)
 416{
 417        struct ext3_sb_info *sbi = EXT3_SB(sb);
 418        struct ext3_super_block *es = sbi->s_es;
 419        int i, err;
 420
 421        dquot_disable(sb, -1, DQUOT_USAGE_ENABLED | DQUOT_LIMITS_ENABLED);
 422        ext3_xattr_put_super(sb);
 423        err = journal_destroy(sbi->s_journal);
 424        sbi->s_journal = NULL;
 425        if (err < 0)
 426                ext3_abort(sb, __func__, "Couldn't clean up the journal");
 427
 428        if (!(sb->s_flags & MS_RDONLY)) {
 429                EXT3_CLEAR_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_RECOVER);
 430                es->s_state = cpu_to_le16(sbi->s_mount_state);
 431                BUFFER_TRACE(sbi->s_sbh, "marking dirty");
 432                mark_buffer_dirty(sbi->s_sbh);
 433                ext3_commit_super(sb, es, 1);
 434        }
 435
 436        for (i = 0; i < sbi->s_gdb_count; i++)
 437                brelse(sbi->s_group_desc[i]);
 438        kfree(sbi->s_group_desc);
 439        percpu_counter_destroy(&sbi->s_freeblocks_counter);
 440        percpu_counter_destroy(&sbi->s_freeinodes_counter);
 441        percpu_counter_destroy(&sbi->s_dirs_counter);
 442        brelse(sbi->s_sbh);
 443#ifdef CONFIG_QUOTA
 444        for (i = 0; i < MAXQUOTAS; i++)
 445                kfree(sbi->s_qf_names[i]);
 446#endif
 447
 448        /* Debugging code just in case the in-memory inode orphan list
 449         * isn't empty.  The on-disk one can be non-empty if we've
 450         * detected an error and taken the fs readonly, but the
 451         * in-memory list had better be clean by this point. */
 452        if (!list_empty(&sbi->s_orphan))
 453                dump_orphan_list(sb, sbi);
 454        J_ASSERT(list_empty(&sbi->s_orphan));
 455
 456        invalidate_bdev(sb->s_bdev);
 457        if (sbi->journal_bdev && sbi->journal_bdev != sb->s_bdev) {
 458                /*
 459                 * Invalidate the journal device's buffers.  We don't want them
 460                 * floating about in memory - the physical journal device may
 461                 * hotswapped, and it breaks the `ro-after' testing code.
 462                 */
 463                sync_blockdev(sbi->journal_bdev);
 464                invalidate_bdev(sbi->journal_bdev);
 465                ext3_blkdev_remove(sbi);
 466        }
 467        sb->s_fs_info = NULL;
 468        kfree(sbi->s_blockgroup_lock);
 469        kfree(sbi);
 470}
 471
 472static struct kmem_cache *ext3_inode_cachep;
 473
 474/*
 475 * Called inside transaction, so use GFP_NOFS
 476 */
 477static struct inode *ext3_alloc_inode(struct super_block *sb)
 478{
 479        struct ext3_inode_info *ei;
 480
 481        ei = kmem_cache_alloc(ext3_inode_cachep, GFP_NOFS);
 482        if (!ei)
 483                return NULL;
 484        ei->i_block_alloc_info = NULL;
 485        ei->vfs_inode.i_version = 1;
 486        atomic_set(&ei->i_datasync_tid, 0);
 487        atomic_set(&ei->i_sync_tid, 0);
 488        return &ei->vfs_inode;
 489}
 490
 491static int ext3_drop_inode(struct inode *inode)
 492{
 493        int drop = generic_drop_inode(inode);
 494
 495        trace_ext3_drop_inode(inode, drop);
 496        return drop;
 497}
 498
 499static void ext3_i_callback(struct rcu_head *head)
 500{
 501        struct inode *inode = container_of(head, struct inode, i_rcu);
 502        kmem_cache_free(ext3_inode_cachep, EXT3_I(inode));
 503}
 504
 505static void ext3_destroy_inode(struct inode *inode)
 506{
 507        if (!list_empty(&(EXT3_I(inode)->i_orphan))) {
 508                printk("EXT3 Inode %p: orphan list check failed!\n",
 509                        EXT3_I(inode));
 510                print_hex_dump(KERN_INFO, "", DUMP_PREFIX_ADDRESS, 16, 4,
 511                                EXT3_I(inode), sizeof(struct ext3_inode_info),
 512                                false);
 513                dump_stack();
 514        }
 515        call_rcu(&inode->i_rcu, ext3_i_callback);
 516}
 517
 518static void init_once(void *foo)
 519{
 520        struct ext3_inode_info *ei = (struct ext3_inode_info *) foo;
 521
 522        INIT_LIST_HEAD(&ei->i_orphan);
 523#ifdef CONFIG_EXT3_FS_XATTR
 524        init_rwsem(&ei->xattr_sem);
 525#endif
 526        mutex_init(&ei->truncate_mutex);
 527        inode_init_once(&ei->vfs_inode);
 528}
 529
 530static int init_inodecache(void)
 531{
 532        ext3_inode_cachep = kmem_cache_create("ext3_inode_cache",
 533                                             sizeof(struct ext3_inode_info),
 534                                             0, (SLAB_RECLAIM_ACCOUNT|
 535                                                SLAB_MEM_SPREAD),
 536                                             init_once);
 537        if (ext3_inode_cachep == NULL)
 538                return -ENOMEM;
 539        return 0;
 540}
 541
 542static void destroy_inodecache(void)
 543{
 544        /*
 545         * Make sure all delayed rcu free inodes are flushed before we
 546         * destroy cache.
 547         */
 548        rcu_barrier();
 549        kmem_cache_destroy(ext3_inode_cachep);
 550}
 551
 552static inline void ext3_show_quota_options(struct seq_file *seq, struct super_block *sb)
 553{
 554#if defined(CONFIG_QUOTA)
 555        struct ext3_sb_info *sbi = EXT3_SB(sb);
 556
 557        if (sbi->s_jquota_fmt) {
 558                char *fmtname = "";
 559
 560                switch (sbi->s_jquota_fmt) {
 561                case QFMT_VFS_OLD:
 562                        fmtname = "vfsold";
 563                        break;
 564                case QFMT_VFS_V0:
 565                        fmtname = "vfsv0";
 566                        break;
 567                case QFMT_VFS_V1:
 568                        fmtname = "vfsv1";
 569                        break;
 570                }
 571                seq_printf(seq, ",jqfmt=%s", fmtname);
 572        }
 573
 574        if (sbi->s_qf_names[USRQUOTA])
 575                seq_printf(seq, ",usrjquota=%s", sbi->s_qf_names[USRQUOTA]);
 576
 577        if (sbi->s_qf_names[GRPQUOTA])
 578                seq_printf(seq, ",grpjquota=%s", sbi->s_qf_names[GRPQUOTA]);
 579
 580        if (test_opt(sb, USRQUOTA))
 581                seq_puts(seq, ",usrquota");
 582
 583        if (test_opt(sb, GRPQUOTA))
 584                seq_puts(seq, ",grpquota");
 585#endif
 586}
 587
 588static char *data_mode_string(unsigned long mode)
 589{
 590        switch (mode) {
 591        case EXT3_MOUNT_JOURNAL_DATA:
 592                return "journal";
 593        case EXT3_MOUNT_ORDERED_DATA:
 594                return "ordered";
 595        case EXT3_MOUNT_WRITEBACK_DATA:
 596                return "writeback";
 597        }
 598        return "unknown";
 599}
 600
 601/*
 602 * Show an option if
 603 *  - it's set to a non-default value OR
 604 *  - if the per-sb default is different from the global default
 605 */
 606static int ext3_show_options(struct seq_file *seq, struct dentry *root)
 607{
 608        struct super_block *sb = root->d_sb;
 609        struct ext3_sb_info *sbi = EXT3_SB(sb);
 610        struct ext3_super_block *es = sbi->s_es;
 611        unsigned long def_mount_opts;
 612
 613        def_mount_opts = le32_to_cpu(es->s_default_mount_opts);
 614
 615        if (sbi->s_sb_block != 1)
 616                seq_printf(seq, ",sb=%lu", sbi->s_sb_block);
 617        if (test_opt(sb, MINIX_DF))
 618                seq_puts(seq, ",minixdf");
 619        if (test_opt(sb, GRPID))
 620                seq_puts(seq, ",grpid");
 621        if (!test_opt(sb, GRPID) && (def_mount_opts & EXT3_DEFM_BSDGROUPS))
 622                seq_puts(seq, ",nogrpid");
 623        if (!uid_eq(sbi->s_resuid, make_kuid(&init_user_ns, EXT3_DEF_RESUID)) ||
 624            le16_to_cpu(es->s_def_resuid) != EXT3_DEF_RESUID) {
 625                seq_printf(seq, ",resuid=%u",
 626                                from_kuid_munged(&init_user_ns, sbi->s_resuid));
 627        }
 628        if (!gid_eq(sbi->s_resgid, make_kgid(&init_user_ns, EXT3_DEF_RESGID)) ||
 629            le16_to_cpu(es->s_def_resgid) != EXT3_DEF_RESGID) {
 630                seq_printf(seq, ",resgid=%u",
 631                                from_kgid_munged(&init_user_ns, sbi->s_resgid));
 632        }
 633        if (test_opt(sb, ERRORS_RO)) {
 634                int def_errors = le16_to_cpu(es->s_errors);
 635
 636                if (def_errors == EXT3_ERRORS_PANIC ||
 637                    def_errors == EXT3_ERRORS_CONTINUE) {
 638                        seq_puts(seq, ",errors=remount-ro");
 639                }
 640        }
 641        if (test_opt(sb, ERRORS_CONT))
 642                seq_puts(seq, ",errors=continue");
 643        if (test_opt(sb, ERRORS_PANIC))
 644                seq_puts(seq, ",errors=panic");
 645        if (test_opt(sb, NO_UID32))
 646                seq_puts(seq, ",nouid32");
 647        if (test_opt(sb, DEBUG))
 648                seq_puts(seq, ",debug");
 649#ifdef CONFIG_EXT3_FS_XATTR
 650        if (test_opt(sb, XATTR_USER))
 651                seq_puts(seq, ",user_xattr");
 652        if (!test_opt(sb, XATTR_USER) &&
 653            (def_mount_opts & EXT3_DEFM_XATTR_USER)) {
 654                seq_puts(seq, ",nouser_xattr");
 655        }
 656#endif
 657#ifdef CONFIG_EXT3_FS_POSIX_ACL
 658        if (test_opt(sb, POSIX_ACL))
 659                seq_puts(seq, ",acl");
 660        if (!test_opt(sb, POSIX_ACL) && (def_mount_opts & EXT3_DEFM_ACL))
 661                seq_puts(seq, ",noacl");
 662#endif
 663        if (!test_opt(sb, RESERVATION))
 664                seq_puts(seq, ",noreservation");
 665        if (sbi->s_commit_interval) {
 666                seq_printf(seq, ",commit=%u",
 667                           (unsigned) (sbi->s_commit_interval / HZ));
 668        }
 669
 670        /*
 671         * Always display barrier state so it's clear what the status is.
 672         */
 673        seq_puts(seq, ",barrier=");
 674        seq_puts(seq, test_opt(sb, BARRIER) ? "1" : "0");
 675        seq_printf(seq, ",data=%s", data_mode_string(test_opt(sb, DATA_FLAGS)));
 676        if (test_opt(sb, DATA_ERR_ABORT))
 677                seq_puts(seq, ",data_err=abort");
 678
 679        if (test_opt(sb, NOLOAD))
 680                seq_puts(seq, ",norecovery");
 681
 682        ext3_show_quota_options(seq, sb);
 683
 684        return 0;
 685}
 686
 687
 688static struct inode *ext3_nfs_get_inode(struct super_block *sb,
 689                u64 ino, u32 generation)
 690{
 691        struct inode *inode;
 692
 693        if (ino < EXT3_FIRST_INO(sb) && ino != EXT3_ROOT_INO)
 694                return ERR_PTR(-ESTALE);
 695        if (ino > le32_to_cpu(EXT3_SB(sb)->s_es->s_inodes_count))
 696                return ERR_PTR(-ESTALE);
 697
 698        /* iget isn't really right if the inode is currently unallocated!!
 699         *
 700         * ext3_read_inode will return a bad_inode if the inode had been
 701         * deleted, so we should be safe.
 702         *
 703         * Currently we don't know the generation for parent directory, so
 704         * a generation of 0 means "accept any"
 705         */
 706        inode = ext3_iget(sb, ino);
 707        if (IS_ERR(inode))
 708                return ERR_CAST(inode);
 709        if (generation && inode->i_generation != generation) {
 710                iput(inode);
 711                return ERR_PTR(-ESTALE);
 712        }
 713
 714        return inode;
 715}
 716
 717static struct dentry *ext3_fh_to_dentry(struct super_block *sb, struct fid *fid,
 718                int fh_len, int fh_type)
 719{
 720        return generic_fh_to_dentry(sb, fid, fh_len, fh_type,
 721                                    ext3_nfs_get_inode);
 722}
 723
 724static struct dentry *ext3_fh_to_parent(struct super_block *sb, struct fid *fid,
 725                int fh_len, int fh_type)
 726{
 727        return generic_fh_to_parent(sb, fid, fh_len, fh_type,
 728                                    ext3_nfs_get_inode);
 729}
 730
 731/*
 732 * Try to release metadata pages (indirect blocks, directories) which are
 733 * mapped via the block device.  Since these pages could have journal heads
 734 * which would prevent try_to_free_buffers() from freeing them, we must use
 735 * jbd layer's try_to_free_buffers() function to release them.
 736 */
 737static int bdev_try_to_free_page(struct super_block *sb, struct page *page,
 738                                 gfp_t wait)
 739{
 740        journal_t *journal = EXT3_SB(sb)->s_journal;
 741
 742        WARN_ON(PageChecked(page));
 743        if (!page_has_buffers(page))
 744                return 0;
 745        if (journal)
 746                return journal_try_to_free_buffers(journal, page, 
 747                                                   wait & ~__GFP_WAIT);
 748        return try_to_free_buffers(page);
 749}
 750
 751#ifdef CONFIG_QUOTA
 752#define QTYPE2NAME(t) ((t)==USRQUOTA?"user":"group")
 753#define QTYPE2MOPT(on, t) ((t)==USRQUOTA?((on)##USRJQUOTA):((on)##GRPJQUOTA))
 754
 755static int ext3_write_dquot(struct dquot *dquot);
 756static int ext3_acquire_dquot(struct dquot *dquot);
 757static int ext3_release_dquot(struct dquot *dquot);
 758static int ext3_mark_dquot_dirty(struct dquot *dquot);
 759static int ext3_write_info(struct super_block *sb, int type);
 760static int ext3_quota_on(struct super_block *sb, int type, int format_id,
 761                         struct path *path);
 762static int ext3_quota_on_mount(struct super_block *sb, int type);
 763static ssize_t ext3_quota_read(struct super_block *sb, int type, char *data,
 764                               size_t len, loff_t off);
 765static ssize_t ext3_quota_write(struct super_block *sb, int type,
 766                                const char *data, size_t len, loff_t off);
 767
 768static const struct dquot_operations ext3_quota_operations = {
 769        .write_dquot    = ext3_write_dquot,
 770        .acquire_dquot  = ext3_acquire_dquot,
 771        .release_dquot  = ext3_release_dquot,
 772        .mark_dirty     = ext3_mark_dquot_dirty,
 773        .write_info     = ext3_write_info,
 774        .alloc_dquot    = dquot_alloc,
 775        .destroy_dquot  = dquot_destroy,
 776};
 777
 778static const struct quotactl_ops ext3_qctl_operations = {
 779        .quota_on       = ext3_quota_on,
 780        .quota_off      = dquot_quota_off,
 781        .quota_sync     = dquot_quota_sync,
 782        .get_info       = dquot_get_dqinfo,
 783        .set_info       = dquot_set_dqinfo,
 784        .get_dqblk      = dquot_get_dqblk,
 785        .set_dqblk      = dquot_set_dqblk
 786};
 787#endif
 788
 789static const struct super_operations ext3_sops = {
 790        .alloc_inode    = ext3_alloc_inode,
 791        .destroy_inode  = ext3_destroy_inode,
 792        .write_inode    = ext3_write_inode,
 793        .dirty_inode    = ext3_dirty_inode,
 794        .drop_inode     = ext3_drop_inode,
 795        .evict_inode    = ext3_evict_inode,
 796        .put_super      = ext3_put_super,
 797        .sync_fs        = ext3_sync_fs,
 798        .freeze_fs      = ext3_freeze,
 799        .unfreeze_fs    = ext3_unfreeze,
 800        .statfs         = ext3_statfs,
 801        .remount_fs     = ext3_remount,
 802        .show_options   = ext3_show_options,
 803#ifdef CONFIG_QUOTA
 804        .quota_read     = ext3_quota_read,
 805        .quota_write    = ext3_quota_write,
 806#endif
 807        .bdev_try_to_free_page = bdev_try_to_free_page,
 808};
 809
 810static const struct export_operations ext3_export_ops = {
 811        .fh_to_dentry = ext3_fh_to_dentry,
 812        .fh_to_parent = ext3_fh_to_parent,
 813        .get_parent = ext3_get_parent,
 814};
 815
 816enum {
 817        Opt_bsd_df, Opt_minix_df, Opt_grpid, Opt_nogrpid,
 818        Opt_resgid, Opt_resuid, Opt_sb, Opt_err_cont, Opt_err_panic, Opt_err_ro,
 819        Opt_nouid32, Opt_nocheck, Opt_debug, Opt_oldalloc, Opt_orlov,
 820        Opt_user_xattr, Opt_nouser_xattr, Opt_acl, Opt_noacl,
 821        Opt_reservation, Opt_noreservation, Opt_noload, Opt_nobh, Opt_bh,
 822        Opt_commit, Opt_journal_update, Opt_journal_inum, Opt_journal_dev,
 823        Opt_journal_path,
 824        Opt_abort, Opt_data_journal, Opt_data_ordered, Opt_data_writeback,
 825        Opt_data_err_abort, Opt_data_err_ignore,
 826        Opt_usrjquota, Opt_grpjquota, Opt_offusrjquota, Opt_offgrpjquota,
 827        Opt_jqfmt_vfsold, Opt_jqfmt_vfsv0, Opt_jqfmt_vfsv1, Opt_quota,
 828        Opt_noquota, Opt_ignore, Opt_barrier, Opt_nobarrier, Opt_err,
 829        Opt_resize, Opt_usrquota, Opt_grpquota
 830};
 831
 832static const match_table_t tokens = {
 833        {Opt_bsd_df, "bsddf"},
 834        {Opt_minix_df, "minixdf"},
 835        {Opt_grpid, "grpid"},
 836        {Opt_grpid, "bsdgroups"},
 837        {Opt_nogrpid, "nogrpid"},
 838        {Opt_nogrpid, "sysvgroups"},
 839        {Opt_resgid, "resgid=%u"},
 840        {Opt_resuid, "resuid=%u"},
 841        {Opt_sb, "sb=%u"},
 842        {Opt_err_cont, "errors=continue"},
 843        {Opt_err_panic, "errors=panic"},
 844        {Opt_err_ro, "errors=remount-ro"},
 845        {Opt_nouid32, "nouid32"},
 846        {Opt_nocheck, "nocheck"},
 847        {Opt_nocheck, "check=none"},
 848        {Opt_debug, "debug"},
 849        {Opt_oldalloc, "oldalloc"},
 850        {Opt_orlov, "orlov"},
 851        {Opt_user_xattr, "user_xattr"},
 852        {Opt_nouser_xattr, "nouser_xattr"},
 853        {Opt_acl, "acl"},
 854        {Opt_noacl, "noacl"},
 855        {Opt_reservation, "reservation"},
 856        {Opt_noreservation, "noreservation"},
 857        {Opt_noload, "noload"},
 858        {Opt_noload, "norecovery"},
 859        {Opt_nobh, "nobh"},
 860        {Opt_bh, "bh"},
 861        {Opt_commit, "commit=%u"},
 862        {Opt_journal_update, "journal=update"},
 863        {Opt_journal_inum, "journal=%u"},
 864        {Opt_journal_dev, "journal_dev=%u"},
 865        {Opt_journal_path, "journal_path=%s"},
 866        {Opt_abort, "abort"},
 867        {Opt_data_journal, "data=journal"},
 868        {Opt_data_ordered, "data=ordered"},
 869        {Opt_data_writeback, "data=writeback"},
 870        {Opt_data_err_abort, "data_err=abort"},
 871        {Opt_data_err_ignore, "data_err=ignore"},
 872        {Opt_offusrjquota, "usrjquota="},
 873        {Opt_usrjquota, "usrjquota=%s"},
 874        {Opt_offgrpjquota, "grpjquota="},
 875        {Opt_grpjquota, "grpjquota=%s"},
 876        {Opt_jqfmt_vfsold, "jqfmt=vfsold"},
 877        {Opt_jqfmt_vfsv0, "jqfmt=vfsv0"},
 878        {Opt_jqfmt_vfsv1, "jqfmt=vfsv1"},
 879        {Opt_grpquota, "grpquota"},
 880        {Opt_noquota, "noquota"},
 881        {Opt_quota, "quota"},
 882        {Opt_usrquota, "usrquota"},
 883        {Opt_barrier, "barrier=%u"},
 884        {Opt_barrier, "barrier"},
 885        {Opt_nobarrier, "nobarrier"},
 886        {Opt_resize, "resize"},
 887        {Opt_err, NULL},
 888};
 889
 890static ext3_fsblk_t get_sb_block(void **data, struct super_block *sb)
 891{
 892        ext3_fsblk_t    sb_block;
 893        char            *options = (char *) *data;
 894
 895        if (!options || strncmp(options, "sb=", 3) != 0)
 896                return 1;       /* Default location */
 897        options += 3;
 898        /*todo: use simple_strtoll with >32bit ext3 */
 899        sb_block = simple_strtoul(options, &options, 0);
 900        if (*options && *options != ',') {
 901                ext3_msg(sb, KERN_ERR, "error: invalid sb specification: %s",
 902                       (char *) *data);
 903                return 1;
 904        }
 905        if (*options == ',')
 906                options++;
 907        *data = (void *) options;
 908        return sb_block;
 909}
 910
 911#ifdef CONFIG_QUOTA
 912static int set_qf_name(struct super_block *sb, int qtype, substring_t *args)
 913{
 914        struct ext3_sb_info *sbi = EXT3_SB(sb);
 915        char *qname;
 916
 917        if (sb_any_quota_loaded(sb) &&
 918                !sbi->s_qf_names[qtype]) {
 919                ext3_msg(sb, KERN_ERR,
 920                        "Cannot change journaled "
 921                        "quota options when quota turned on");
 922                return 0;
 923        }
 924        qname = match_strdup(args);
 925        if (!qname) {
 926                ext3_msg(sb, KERN_ERR,
 927                        "Not enough memory for storing quotafile name");
 928                return 0;
 929        }
 930        if (sbi->s_qf_names[qtype]) {
 931                int same = !strcmp(sbi->s_qf_names[qtype], qname);
 932
 933                kfree(qname);
 934                if (!same) {
 935                        ext3_msg(sb, KERN_ERR,
 936                                 "%s quota file already specified",
 937                                 QTYPE2NAME(qtype));
 938                }
 939                return same;
 940        }
 941        if (strchr(qname, '/')) {
 942                ext3_msg(sb, KERN_ERR,
 943                        "quotafile must be on filesystem root");
 944                kfree(qname);
 945                return 0;
 946        }
 947        sbi->s_qf_names[qtype] = qname;
 948        set_opt(sbi->s_mount_opt, QUOTA);
 949        return 1;
 950}
 951
 952static int clear_qf_name(struct super_block *sb, int qtype) {
 953
 954        struct ext3_sb_info *sbi = EXT3_SB(sb);
 955
 956        if (sb_any_quota_loaded(sb) &&
 957                sbi->s_qf_names[qtype]) {
 958                ext3_msg(sb, KERN_ERR, "Cannot change journaled quota options"
 959                        " when quota turned on");
 960                return 0;
 961        }
 962        if (sbi->s_qf_names[qtype]) {
 963                kfree(sbi->s_qf_names[qtype]);
 964                sbi->s_qf_names[qtype] = NULL;
 965        }
 966        return 1;
 967}
 968#endif
 969
 970static int parse_options (char *options, struct super_block *sb,
 971                          unsigned int *inum, unsigned long *journal_devnum,
 972                          ext3_fsblk_t *n_blocks_count, int is_remount)
 973{
 974        struct ext3_sb_info *sbi = EXT3_SB(sb);
 975        char * p;
 976        substring_t args[MAX_OPT_ARGS];
 977        int data_opt = 0;
 978        int option;
 979        kuid_t uid;
 980        kgid_t gid;
 981        char *journal_path;
 982        struct inode *journal_inode;
 983        struct path path;
 984        int error;
 985
 986#ifdef CONFIG_QUOTA
 987        int qfmt;
 988#endif
 989
 990        if (!options)
 991                return 1;
 992
 993        while ((p = strsep (&options, ",")) != NULL) {
 994                int token;
 995                if (!*p)
 996                        continue;
 997                /*
 998                 * Initialize args struct so we know whether arg was
 999                 * found; some options take optional arguments.
1000                 */
1001                args[0].to = args[0].from = NULL;
1002                token = match_token(p, tokens, args);
1003                switch (token) {
1004                case Opt_bsd_df:
1005                        clear_opt (sbi->s_mount_opt, MINIX_DF);
1006                        break;
1007                case Opt_minix_df:
1008                        set_opt (sbi->s_mount_opt, MINIX_DF);
1009                        break;
1010                case Opt_grpid:
1011                        set_opt (sbi->s_mount_opt, GRPID);
1012                        break;
1013                case Opt_nogrpid:
1014                        clear_opt (sbi->s_mount_opt, GRPID);
1015                        break;
1016                case Opt_resuid:
1017                        if (match_int(&args[0], &option))
1018                                return 0;
1019                        uid = make_kuid(current_user_ns(), option);
1020                        if (!uid_valid(uid)) {
1021                                ext3_msg(sb, KERN_ERR, "Invalid uid value %d", option);
1022                                return 0;
1023
1024                        }
1025                        sbi->s_resuid = uid;
1026                        break;
1027                case Opt_resgid:
1028                        if (match_int(&args[0], &option))
1029                                return 0;
1030                        gid = make_kgid(current_user_ns(), option);
1031                        if (!gid_valid(gid)) {
1032                                ext3_msg(sb, KERN_ERR, "Invalid gid value %d", option);
1033                                return 0;
1034                        }
1035                        sbi->s_resgid = gid;
1036                        break;
1037                case Opt_sb:
1038                        /* handled by get_sb_block() instead of here */
1039                        /* *sb_block = match_int(&args[0]); */
1040                        break;
1041                case Opt_err_panic:
1042                        clear_opt (sbi->s_mount_opt, ERRORS_CONT);
1043                        clear_opt (sbi->s_mount_opt, ERRORS_RO);
1044                        set_opt (sbi->s_mount_opt, ERRORS_PANIC);
1045                        break;
1046                case Opt_err_ro:
1047                        clear_opt (sbi->s_mount_opt, ERRORS_CONT);
1048                        clear_opt (sbi->s_mount_opt, ERRORS_PANIC);
1049                        set_opt (sbi->s_mount_opt, ERRORS_RO);
1050                        break;
1051                case Opt_err_cont:
1052                        clear_opt (sbi->s_mount_opt, ERRORS_RO);
1053                        clear_opt (sbi->s_mount_opt, ERRORS_PANIC);
1054                        set_opt (sbi->s_mount_opt, ERRORS_CONT);
1055                        break;
1056                case Opt_nouid32:
1057                        set_opt (sbi->s_mount_opt, NO_UID32);
1058                        break;
1059                case Opt_nocheck:
1060                        clear_opt (sbi->s_mount_opt, CHECK);
1061                        break;
1062                case Opt_debug:
1063                        set_opt (sbi->s_mount_opt, DEBUG);
1064                        break;
1065                case Opt_oldalloc:
1066                        ext3_msg(sb, KERN_WARNING,
1067                                "Ignoring deprecated oldalloc option");
1068                        break;
1069                case Opt_orlov:
1070                        ext3_msg(sb, KERN_WARNING,
1071                                "Ignoring deprecated orlov option");
1072                        break;
1073#ifdef CONFIG_EXT3_FS_XATTR
1074                case Opt_user_xattr:
1075                        set_opt (sbi->s_mount_opt, XATTR_USER);
1076                        break;
1077                case Opt_nouser_xattr:
1078                        clear_opt (sbi->s_mount_opt, XATTR_USER);
1079                        break;
1080#else
1081                case Opt_user_xattr:
1082                case Opt_nouser_xattr:
1083                        ext3_msg(sb, KERN_INFO,
1084                                "(no)user_xattr options not supported");
1085                        break;
1086#endif
1087#ifdef CONFIG_EXT3_FS_POSIX_ACL
1088                case Opt_acl:
1089                        set_opt(sbi->s_mount_opt, POSIX_ACL);
1090                        break;
1091                case Opt_noacl:
1092                        clear_opt(sbi->s_mount_opt, POSIX_ACL);
1093                        break;
1094#else
1095                case Opt_acl:
1096                case Opt_noacl:
1097                        ext3_msg(sb, KERN_INFO,
1098                                "(no)acl options not supported");
1099                        break;
1100#endif
1101                case Opt_reservation:
1102                        set_opt(sbi->s_mount_opt, RESERVATION);
1103                        break;
1104                case Opt_noreservation:
1105                        clear_opt(sbi->s_mount_opt, RESERVATION);
1106                        break;
1107                case Opt_journal_update:
1108                        /* @@@ FIXME */
1109                        /* Eventually we will want to be able to create
1110                           a journal file here.  For now, only allow the
1111                           user to specify an existing inode to be the
1112                           journal file. */
1113                        if (is_remount) {
1114                                ext3_msg(sb, KERN_ERR, "error: cannot specify "
1115                                        "journal on remount");
1116                                return 0;
1117                        }
1118                        set_opt (sbi->s_mount_opt, UPDATE_JOURNAL);
1119                        break;
1120                case Opt_journal_inum:
1121                        if (is_remount) {
1122                                ext3_msg(sb, KERN_ERR, "error: cannot specify "
1123                                       "journal on remount");
1124                                return 0;
1125                        }
1126                        if (match_int(&args[0], &option))
1127                                return 0;
1128                        *inum = option;
1129                        break;
1130                case Opt_journal_dev:
1131                        if (is_remount) {
1132                                ext3_msg(sb, KERN_ERR, "error: cannot specify "
1133                                       "journal on remount");
1134                                return 0;
1135                        }
1136                        if (match_int(&args[0], &option))
1137                                return 0;
1138                        *journal_devnum = option;
1139                        break;
1140                case Opt_journal_path:
1141                        if (is_remount) {
1142                                ext3_msg(sb, KERN_ERR, "error: cannot specify "
1143                                       "journal on remount");
1144                                return 0;
1145                        }
1146
1147                        journal_path = match_strdup(&args[0]);
1148                        if (!journal_path) {
1149                                ext3_msg(sb, KERN_ERR, "error: could not dup "
1150                                        "journal device string");
1151                                return 0;
1152                        }
1153
1154                        error = kern_path(journal_path, LOOKUP_FOLLOW, &path);
1155                        if (error) {
1156                                ext3_msg(sb, KERN_ERR, "error: could not find "
1157                                        "journal device path: error %d", error);
1158                                kfree(journal_path);
1159                                return 0;
1160                        }
1161
1162                        journal_inode = path.dentry->d_inode;
1163                        if (!S_ISBLK(journal_inode->i_mode)) {
1164                                ext3_msg(sb, KERN_ERR, "error: journal path %s "
1165                                        "is not a block device", journal_path);
1166                                path_put(&path);
1167                                kfree(journal_path);
1168                                return 0;
1169                        }
1170
1171                        *journal_devnum = new_encode_dev(journal_inode->i_rdev);
1172                        path_put(&path);
1173                        kfree(journal_path);
1174                        break;
1175                case Opt_noload:
1176                        set_opt (sbi->s_mount_opt, NOLOAD);
1177                        break;
1178                case Opt_commit:
1179                        if (match_int(&args[0], &option))
1180                                return 0;
1181                        if (option < 0)
1182                                return 0;
1183                        if (option == 0)
1184                                option = JBD_DEFAULT_MAX_COMMIT_AGE;
1185                        sbi->s_commit_interval = HZ * option;
1186                        break;
1187                case Opt_data_journal:
1188                        data_opt = EXT3_MOUNT_JOURNAL_DATA;
1189                        goto datacheck;
1190                case Opt_data_ordered:
1191                        data_opt = EXT3_MOUNT_ORDERED_DATA;
1192                        goto datacheck;
1193                case Opt_data_writeback:
1194                        data_opt = EXT3_MOUNT_WRITEBACK_DATA;
1195                datacheck:
1196                        if (is_remount) {
1197                                if (test_opt(sb, DATA_FLAGS) == data_opt)
1198                                        break;
1199                                ext3_msg(sb, KERN_ERR,
1200                                        "error: cannot change "
1201                                        "data mode on remount. The filesystem "
1202                                        "is mounted in data=%s mode and you "
1203                                        "try to remount it in data=%s mode.",
1204                                        data_mode_string(test_opt(sb,
1205                                                        DATA_FLAGS)),
1206                                        data_mode_string(data_opt));
1207                                return 0;
1208                        } else {
1209                                clear_opt(sbi->s_mount_opt, DATA_FLAGS);
1210                                sbi->s_mount_opt |= data_opt;
1211                        }
1212                        break;
1213                case Opt_data_err_abort:
1214                        set_opt(sbi->s_mount_opt, DATA_ERR_ABORT);
1215                        break;
1216                case Opt_data_err_ignore:
1217                        clear_opt(sbi->s_mount_opt, DATA_ERR_ABORT);
1218                        break;
1219#ifdef CONFIG_QUOTA
1220                case Opt_usrjquota:
1221                        if (!set_qf_name(sb, USRQUOTA, &args[0]))
1222                                return 0;
1223                        break;
1224                case Opt_grpjquota:
1225                        if (!set_qf_name(sb, GRPQUOTA, &args[0]))
1226                                return 0;
1227                        break;
1228                case Opt_offusrjquota:
1229                        if (!clear_qf_name(sb, USRQUOTA))
1230                                return 0;
1231                        break;
1232                case Opt_offgrpjquota:
1233                        if (!clear_qf_name(sb, GRPQUOTA))
1234                                return 0;
1235                        break;
1236                case Opt_jqfmt_vfsold:
1237                        qfmt = QFMT_VFS_OLD;
1238                        goto set_qf_format;
1239                case Opt_jqfmt_vfsv0:
1240                        qfmt = QFMT_VFS_V0;
1241                        goto set_qf_format;
1242                case Opt_jqfmt_vfsv1:
1243                        qfmt = QFMT_VFS_V1;
1244set_qf_format:
1245                        if (sb_any_quota_loaded(sb) &&
1246                            sbi->s_jquota_fmt != qfmt) {
1247                                ext3_msg(sb, KERN_ERR, "error: cannot change "
1248                                        "journaled quota options when "
1249                                        "quota turned on.");
1250                                return 0;
1251                        }
1252                        sbi->s_jquota_fmt = qfmt;
1253                        break;
1254                case Opt_quota:
1255                case Opt_usrquota:
1256                        set_opt(sbi->s_mount_opt, QUOTA);
1257                        set_opt(sbi->s_mount_opt, USRQUOTA);
1258                        break;
1259                case Opt_grpquota:
1260                        set_opt(sbi->s_mount_opt, QUOTA);
1261                        set_opt(sbi->s_mount_opt, GRPQUOTA);
1262                        break;
1263                case Opt_noquota:
1264                        if (sb_any_quota_loaded(sb)) {
1265                                ext3_msg(sb, KERN_ERR, "error: cannot change "
1266                                        "quota options when quota turned on.");
1267                                return 0;
1268                        }
1269                        clear_opt(sbi->s_mount_opt, QUOTA);
1270                        clear_opt(sbi->s_mount_opt, USRQUOTA);
1271                        clear_opt(sbi->s_mount_opt, GRPQUOTA);
1272                        break;
1273#else
1274                case Opt_quota:
1275                case Opt_usrquota:
1276                case Opt_grpquota:
1277                        ext3_msg(sb, KERN_ERR,
1278                                "error: quota options not supported.");
1279                        break;
1280                case Opt_usrjquota:
1281                case Opt_grpjquota:
1282                case Opt_offusrjquota:
1283                case Opt_offgrpjquota:
1284                case Opt_jqfmt_vfsold:
1285                case Opt_jqfmt_vfsv0:
1286                case Opt_jqfmt_vfsv1:
1287                        ext3_msg(sb, KERN_ERR,
1288                                "error: journaled quota options not "
1289                                "supported.");
1290                        break;
1291                case Opt_noquota:
1292                        break;
1293#endif
1294                case Opt_abort:
1295                        set_opt(sbi->s_mount_opt, ABORT);
1296                        break;
1297                case Opt_nobarrier:
1298                        clear_opt(sbi->s_mount_opt, BARRIER);
1299                        break;
1300                case Opt_barrier:
1301                        if (args[0].from) {
1302                                if (match_int(&args[0], &option))
1303                                        return 0;
1304                        } else
1305                                option = 1;     /* No argument, default to 1 */
1306                        if (option)
1307                                set_opt(sbi->s_mount_opt, BARRIER);
1308                        else
1309                                clear_opt(sbi->s_mount_opt, BARRIER);
1310                        break;
1311                case Opt_ignore:
1312                        break;
1313                case Opt_resize:
1314                        if (!is_remount) {
1315                                ext3_msg(sb, KERN_ERR,
1316                                        "error: resize option only available "
1317                                        "for remount");
1318                                return 0;
1319                        }
1320                        if (match_int(&args[0], &option) != 0)
1321                                return 0;
1322                        *n_blocks_count = option;
1323                        break;
1324                case Opt_nobh:
1325                        ext3_msg(sb, KERN_WARNING,
1326                                "warning: ignoring deprecated nobh option");
1327                        break;
1328                case Opt_bh:
1329                        ext3_msg(sb, KERN_WARNING,
1330                                "warning: ignoring deprecated bh option");
1331                        break;
1332                default:
1333                        ext3_msg(sb, KERN_ERR,
1334                                "error: unrecognized mount option \"%s\" "
1335                                "or missing value", p);
1336                        return 0;
1337                }
1338        }
1339#ifdef CONFIG_QUOTA
1340        if (sbi->s_qf_names[USRQUOTA] || sbi->s_qf_names[GRPQUOTA]) {
1341                if (test_opt(sb, USRQUOTA) && sbi->s_qf_names[USRQUOTA])
1342                        clear_opt(sbi->s_mount_opt, USRQUOTA);
1343                if (test_opt(sb, GRPQUOTA) && sbi->s_qf_names[GRPQUOTA])
1344                        clear_opt(sbi->s_mount_opt, GRPQUOTA);
1345
1346                if (test_opt(sb, GRPQUOTA) || test_opt(sb, USRQUOTA)) {
1347                        ext3_msg(sb, KERN_ERR, "error: old and new quota "
1348                                        "format mixing.");
1349                        return 0;
1350                }
1351
1352                if (!sbi->s_jquota_fmt) {
1353                        ext3_msg(sb, KERN_ERR, "error: journaled quota format "
1354                                        "not specified.");
1355                        return 0;
1356                }
1357        } else {
1358                if (sbi->s_jquota_fmt) {
1359                        ext3_msg(sb, KERN_ERR, "error: journaled quota format "
1360                                        "specified with no journaling "
1361                                        "enabled.");
1362                        return 0;
1363                }
1364        }
1365#endif
1366        return 1;
1367}
1368
1369static int ext3_setup_super(struct super_block *sb, struct ext3_super_block *es,
1370                            int read_only)
1371{
1372        struct ext3_sb_info *sbi = EXT3_SB(sb);
1373        int res = 0;
1374
1375        if (le32_to_cpu(es->s_rev_level) > EXT3_MAX_SUPP_REV) {
1376                ext3_msg(sb, KERN_ERR,
1377                        "error: revision level too high, "
1378                        "forcing read-only mode");
1379                res = MS_RDONLY;
1380        }
1381        if (read_only)
1382                return res;
1383        if (!(sbi->s_mount_state & EXT3_VALID_FS))
1384                ext3_msg(sb, KERN_WARNING,
1385                        "warning: mounting unchecked fs, "
1386                        "running e2fsck is recommended");
1387        else if ((sbi->s_mount_state & EXT3_ERROR_FS))
1388                ext3_msg(sb, KERN_WARNING,
1389                        "warning: mounting fs with errors, "
1390                        "running e2fsck is recommended");
1391        else if ((__s16) le16_to_cpu(es->s_max_mnt_count) > 0 &&
1392                 le16_to_cpu(es->s_mnt_count) >=
1393                        le16_to_cpu(es->s_max_mnt_count))
1394                ext3_msg(sb, KERN_WARNING,
1395                        "warning: maximal mount count reached, "
1396                        "running e2fsck is recommended");
1397        else if (le32_to_cpu(es->s_checkinterval) &&
1398                (le32_to_cpu(es->s_lastcheck) +
1399                        le32_to_cpu(es->s_checkinterval) <= get_seconds()))
1400                ext3_msg(sb, KERN_WARNING,
1401                        "warning: checktime reached, "
1402                        "running e2fsck is recommended");
1403#if 0
1404                /* @@@ We _will_ want to clear the valid bit if we find
1405                   inconsistencies, to force a fsck at reboot.  But for
1406                   a plain journaled filesystem we can keep it set as
1407                   valid forever! :) */
1408        es->s_state &= cpu_to_le16(~EXT3_VALID_FS);
1409#endif
1410        if (!le16_to_cpu(es->s_max_mnt_count))
1411                es->s_max_mnt_count = cpu_to_le16(EXT3_DFL_MAX_MNT_COUNT);
1412        le16_add_cpu(&es->s_mnt_count, 1);
1413        es->s_mtime = cpu_to_le32(get_seconds());
1414        ext3_update_dynamic_rev(sb);
1415        EXT3_SET_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_RECOVER);
1416
1417        ext3_commit_super(sb, es, 1);
1418        if (test_opt(sb, DEBUG))
1419                ext3_msg(sb, KERN_INFO, "[bs=%lu, gc=%lu, "
1420                                "bpg=%lu, ipg=%lu, mo=%04lx]",
1421                        sb->s_blocksize,
1422                        sbi->s_groups_count,
1423                        EXT3_BLOCKS_PER_GROUP(sb),
1424                        EXT3_INODES_PER_GROUP(sb),
1425                        sbi->s_mount_opt);
1426
1427        if (EXT3_SB(sb)->s_journal->j_inode == NULL) {
1428                char b[BDEVNAME_SIZE];
1429                ext3_msg(sb, KERN_INFO, "using external journal on %s",
1430                        bdevname(EXT3_SB(sb)->s_journal->j_dev, b));
1431        } else {
1432                ext3_msg(sb, KERN_INFO, "using internal journal");
1433        }
1434        cleancache_init_fs(sb);
1435        return res;
1436}
1437
1438/* Called at mount-time, super-block is locked */
1439static int ext3_check_descriptors(struct super_block *sb)
1440{
1441        struct ext3_sb_info *sbi = EXT3_SB(sb);
1442        int i;
1443
1444        ext3_debug ("Checking group descriptors");
1445
1446        for (i = 0; i < sbi->s_groups_count; i++) {
1447                struct ext3_group_desc *gdp = ext3_get_group_desc(sb, i, NULL);
1448                ext3_fsblk_t first_block = ext3_group_first_block_no(sb, i);
1449                ext3_fsblk_t last_block;
1450
1451                if (i == sbi->s_groups_count - 1)
1452                        last_block = le32_to_cpu(sbi->s_es->s_blocks_count) - 1;
1453                else
1454                        last_block = first_block +
1455                                (EXT3_BLOCKS_PER_GROUP(sb) - 1);
1456
1457                if (le32_to_cpu(gdp->bg_block_bitmap) < first_block ||
1458                    le32_to_cpu(gdp->bg_block_bitmap) > last_block)
1459                {
1460                        ext3_error (sb, "ext3_check_descriptors",
1461                                    "Block bitmap for group %d"
1462                                    " not in group (block %lu)!",
1463                                    i, (unsigned long)
1464                                        le32_to_cpu(gdp->bg_block_bitmap));
1465                        return 0;
1466                }
1467                if (le32_to_cpu(gdp->bg_inode_bitmap) < first_block ||
1468                    le32_to_cpu(gdp->bg_inode_bitmap) > last_block)
1469                {
1470                        ext3_error (sb, "ext3_check_descriptors",
1471                                    "Inode bitmap for group %d"
1472                                    " not in group (block %lu)!",
1473                                    i, (unsigned long)
1474                                        le32_to_cpu(gdp->bg_inode_bitmap));
1475                        return 0;
1476                }
1477                if (le32_to_cpu(gdp->bg_inode_table) < first_block ||
1478                    le32_to_cpu(gdp->bg_inode_table) + sbi->s_itb_per_group - 1 >
1479                    last_block)
1480                {
1481                        ext3_error (sb, "ext3_check_descriptors",
1482                                    "Inode table for group %d"
1483                                    " not in group (block %lu)!",
1484                                    i, (unsigned long)
1485                                        le32_to_cpu(gdp->bg_inode_table));
1486                        return 0;
1487                }
1488        }
1489
1490        sbi->s_es->s_free_blocks_count=cpu_to_le32(ext3_count_free_blocks(sb));
1491        sbi->s_es->s_free_inodes_count=cpu_to_le32(ext3_count_free_inodes(sb));
1492        return 1;
1493}
1494
1495
1496/* ext3_orphan_cleanup() walks a singly-linked list of inodes (starting at
1497 * the superblock) which were deleted from all directories, but held open by
1498 * a process at the time of a crash.  We walk the list and try to delete these
1499 * inodes at recovery time (only with a read-write filesystem).
1500 *
1501 * In order to keep the orphan inode chain consistent during traversal (in
1502 * case of crash during recovery), we link each inode into the superblock
1503 * orphan list_head and handle it the same way as an inode deletion during
1504 * normal operation (which journals the operations for us).
1505 *
1506 * We only do an iget() and an iput() on each inode, which is very safe if we
1507 * accidentally point at an in-use or already deleted inode.  The worst that
1508 * can happen in this case is that we get a "bit already cleared" message from
1509 * ext3_free_inode().  The only reason we would point at a wrong inode is if
1510 * e2fsck was run on this filesystem, and it must have already done the orphan
1511 * inode cleanup for us, so we can safely abort without any further action.
1512 */
1513static void ext3_orphan_cleanup (struct super_block * sb,
1514                                 struct ext3_super_block * es)
1515{
1516        unsigned int s_flags = sb->s_flags;
1517        int nr_orphans = 0, nr_truncates = 0;
1518#ifdef CONFIG_QUOTA
1519        int i;
1520#endif
1521        if (!es->s_last_orphan) {
1522                jbd_debug(4, "no orphan inodes to clean up\n");
1523                return;
1524        }
1525
1526        if (bdev_read_only(sb->s_bdev)) {
1527                ext3_msg(sb, KERN_ERR, "error: write access "
1528                        "unavailable, skipping orphan cleanup.");
1529                return;
1530        }
1531
1532        /* Check if feature set allows readwrite operations */
1533        if (EXT3_HAS_RO_COMPAT_FEATURE(sb, ~EXT3_FEATURE_RO_COMPAT_SUPP)) {
1534                ext3_msg(sb, KERN_INFO, "Skipping orphan cleanup due to "
1535                         "unknown ROCOMPAT features");
1536                return;
1537        }
1538
1539        if (EXT3_SB(sb)->s_mount_state & EXT3_ERROR_FS) {
1540                /* don't clear list on RO mount w/ errors */
1541                if (es->s_last_orphan && !(s_flags & MS_RDONLY)) {
1542                        jbd_debug(1, "Errors on filesystem, "
1543                                  "clearing orphan list.\n");
1544                        es->s_last_orphan = 0;
1545                }
1546                jbd_debug(1, "Skipping orphan recovery on fs with errors.\n");
1547                return;
1548        }
1549
1550        if (s_flags & MS_RDONLY) {
1551                ext3_msg(sb, KERN_INFO, "orphan cleanup on readonly fs");
1552                sb->s_flags &= ~MS_RDONLY;
1553        }
1554#ifdef CONFIG_QUOTA
1555        /* Needed for iput() to work correctly and not trash data */
1556        sb->s_flags |= MS_ACTIVE;
1557        /* Turn on quotas so that they are updated correctly */
1558        for (i = 0; i < MAXQUOTAS; i++) {
1559                if (EXT3_SB(sb)->s_qf_names[i]) {
1560                        int ret = ext3_quota_on_mount(sb, i);
1561                        if (ret < 0)
1562                                ext3_msg(sb, KERN_ERR,
1563                                        "error: cannot turn on journaled "
1564                                        "quota: %d", ret);
1565                }
1566        }
1567#endif
1568
1569        while (es->s_last_orphan) {
1570                struct inode *inode;
1571
1572                inode = ext3_orphan_get(sb, le32_to_cpu(es->s_last_orphan));
1573                if (IS_ERR(inode)) {
1574                        es->s_last_orphan = 0;
1575                        break;
1576                }
1577
1578                list_add(&EXT3_I(inode)->i_orphan, &EXT3_SB(sb)->s_orphan);
1579                dquot_initialize(inode);
1580                if (inode->i_nlink) {
1581                        printk(KERN_DEBUG
1582                                "%s: truncating inode %lu to %Ld bytes\n",
1583                                __func__, inode->i_ino, inode->i_size);
1584                        jbd_debug(2, "truncating inode %lu to %Ld bytes\n",
1585                                  inode->i_ino, inode->i_size);
1586                        ext3_truncate(inode);
1587                        nr_truncates++;
1588                } else {
1589                        printk(KERN_DEBUG
1590                                "%s: deleting unreferenced inode %lu\n",
1591                                __func__, inode->i_ino);
1592                        jbd_debug(2, "deleting unreferenced inode %lu\n",
1593                                  inode->i_ino);
1594                        nr_orphans++;
1595                }
1596                iput(inode);  /* The delete magic happens here! */
1597        }
1598
1599#define PLURAL(x) (x), ((x)==1) ? "" : "s"
1600
1601        if (nr_orphans)
1602                ext3_msg(sb, KERN_INFO, "%d orphan inode%s deleted",
1603                       PLURAL(nr_orphans));
1604        if (nr_truncates)
1605                ext3_msg(sb, KERN_INFO, "%d truncate%s cleaned up",
1606                       PLURAL(nr_truncates));
1607#ifdef CONFIG_QUOTA
1608        /* Turn quotas off */
1609        for (i = 0; i < MAXQUOTAS; i++) {
1610                if (sb_dqopt(sb)->files[i])
1611                        dquot_quota_off(sb, i);
1612        }
1613#endif
1614        sb->s_flags = s_flags; /* Restore MS_RDONLY status */
1615}
1616
1617/*
1618 * Maximal file size.  There is a direct, and {,double-,triple-}indirect
1619 * block limit, and also a limit of (2^32 - 1) 512-byte sectors in i_blocks.
1620 * We need to be 1 filesystem block less than the 2^32 sector limit.
1621 */
1622static loff_t ext3_max_size(int bits)
1623{
1624        loff_t res = EXT3_NDIR_BLOCKS;
1625        int meta_blocks;
1626        loff_t upper_limit;
1627
1628        /* This is calculated to be the largest file size for a
1629         * dense, file such that the total number of
1630         * sectors in the file, including data and all indirect blocks,
1631         * does not exceed 2^32 -1
1632         * __u32 i_blocks representing the total number of
1633         * 512 bytes blocks of the file
1634         */
1635        upper_limit = (1LL << 32) - 1;
1636
1637        /* total blocks in file system block size */
1638        upper_limit >>= (bits - 9);
1639
1640
1641        /* indirect blocks */
1642        meta_blocks = 1;
1643        /* double indirect blocks */
1644        meta_blocks += 1 + (1LL << (bits-2));
1645        /* tripple indirect blocks */
1646        meta_blocks += 1 + (1LL << (bits-2)) + (1LL << (2*(bits-2)));
1647
1648        upper_limit -= meta_blocks;
1649        upper_limit <<= bits;
1650
1651        res += 1LL << (bits-2);
1652        res += 1LL << (2*(bits-2));
1653        res += 1LL << (3*(bits-2));
1654        res <<= bits;
1655        if (res > upper_limit)
1656                res = upper_limit;
1657
1658        if (res > MAX_LFS_FILESIZE)
1659                res = MAX_LFS_FILESIZE;
1660
1661        return res;
1662}
1663
1664static ext3_fsblk_t descriptor_loc(struct super_block *sb,
1665                                    ext3_fsblk_t logic_sb_block,
1666                                    int nr)
1667{
1668        struct ext3_sb_info *sbi = EXT3_SB(sb);
1669        unsigned long bg, first_meta_bg;
1670        int has_super = 0;
1671
1672        first_meta_bg = le32_to_cpu(sbi->s_es->s_first_meta_bg);
1673
1674        if (!EXT3_HAS_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_META_BG) ||
1675            nr < first_meta_bg)
1676                return (logic_sb_block + nr + 1);
1677        bg = sbi->s_desc_per_block * nr;
1678        if (ext3_bg_has_super(sb, bg))
1679                has_super = 1;
1680        return (has_super + ext3_group_first_block_no(sb, bg));
1681}
1682
1683
1684static int ext3_fill_super (struct super_block *sb, void *data, int silent)
1685{
1686        struct buffer_head * bh;
1687        struct ext3_super_block *es = NULL;
1688        struct ext3_sb_info *sbi;
1689        ext3_fsblk_t block;
1690        ext3_fsblk_t sb_block = get_sb_block(&data, sb);
1691        ext3_fsblk_t logic_sb_block;
1692        unsigned long offset = 0;
1693        unsigned int journal_inum = 0;
1694        unsigned long journal_devnum = 0;
1695        unsigned long def_mount_opts;
1696        struct inode *root;
1697        int blocksize;
1698        int hblock;
1699        int db_count;
1700        int i;
1701        int needs_recovery;
1702        int ret = -EINVAL;
1703        __le32 features;
1704        int err;
1705
1706        sbi = kzalloc(sizeof(*sbi), GFP_KERNEL);
1707        if (!sbi)
1708                return -ENOMEM;
1709
1710        sbi->s_blockgroup_lock =
1711                kzalloc(sizeof(struct blockgroup_lock), GFP_KERNEL);
1712        if (!sbi->s_blockgroup_lock) {
1713                kfree(sbi);
1714                return -ENOMEM;
1715        }
1716        sb->s_fs_info = sbi;
1717        sbi->s_sb_block = sb_block;
1718
1719        blocksize = sb_min_blocksize(sb, EXT3_MIN_BLOCK_SIZE);
1720        if (!blocksize) {
1721                ext3_msg(sb, KERN_ERR, "error: unable to set blocksize");
1722                goto out_fail;
1723        }
1724
1725        /*
1726         * The ext3 superblock will not be buffer aligned for other than 1kB
1727         * block sizes.  We need to calculate the offset from buffer start.
1728         */
1729        if (blocksize != EXT3_MIN_BLOCK_SIZE) {
1730                logic_sb_block = (sb_block * EXT3_MIN_BLOCK_SIZE) / blocksize;
1731                offset = (sb_block * EXT3_MIN_BLOCK_SIZE) % blocksize;
1732        } else {
1733                logic_sb_block = sb_block;
1734        }
1735
1736        if (!(bh = sb_bread(sb, logic_sb_block))) {
1737                ext3_msg(sb, KERN_ERR, "error: unable to read superblock");
1738                goto out_fail;
1739        }
1740        /*
1741         * Note: s_es must be initialized as soon as possible because
1742         *       some ext3 macro-instructions depend on its value
1743         */
1744        es = (struct ext3_super_block *) (bh->b_data + offset);
1745        sbi->s_es = es;
1746        sb->s_magic = le16_to_cpu(es->s_magic);
1747        if (sb->s_magic != EXT3_SUPER_MAGIC)
1748                goto cantfind_ext3;
1749
1750        /* Set defaults before we parse the mount options */
1751        def_mount_opts = le32_to_cpu(es->s_default_mount_opts);
1752        if (def_mount_opts & EXT3_DEFM_DEBUG)
1753                set_opt(sbi->s_mount_opt, DEBUG);
1754        if (def_mount_opts & EXT3_DEFM_BSDGROUPS)
1755                set_opt(sbi->s_mount_opt, GRPID);
1756        if (def_mount_opts & EXT3_DEFM_UID16)
1757                set_opt(sbi->s_mount_opt, NO_UID32);
1758#ifdef CONFIG_EXT3_FS_XATTR
1759        if (def_mount_opts & EXT3_DEFM_XATTR_USER)
1760                set_opt(sbi->s_mount_opt, XATTR_USER);
1761#endif
1762#ifdef CONFIG_EXT3_FS_POSIX_ACL
1763        if (def_mount_opts & EXT3_DEFM_ACL)
1764                set_opt(sbi->s_mount_opt, POSIX_ACL);
1765#endif
1766        if ((def_mount_opts & EXT3_DEFM_JMODE) == EXT3_DEFM_JMODE_DATA)
1767                set_opt(sbi->s_mount_opt, JOURNAL_DATA);
1768        else if ((def_mount_opts & EXT3_DEFM_JMODE) == EXT3_DEFM_JMODE_ORDERED)
1769                set_opt(sbi->s_mount_opt, ORDERED_DATA);
1770        else if ((def_mount_opts & EXT3_DEFM_JMODE) == EXT3_DEFM_JMODE_WBACK)
1771                set_opt(sbi->s_mount_opt, WRITEBACK_DATA);
1772
1773        if (le16_to_cpu(sbi->s_es->s_errors) == EXT3_ERRORS_PANIC)
1774                set_opt(sbi->s_mount_opt, ERRORS_PANIC);
1775        else if (le16_to_cpu(sbi->s_es->s_errors) == EXT3_ERRORS_CONTINUE)
1776                set_opt(sbi->s_mount_opt, ERRORS_CONT);
1777        else
1778                set_opt(sbi->s_mount_opt, ERRORS_RO);
1779
1780        sbi->s_resuid = make_kuid(&init_user_ns, le16_to_cpu(es->s_def_resuid));
1781        sbi->s_resgid = make_kgid(&init_user_ns, le16_to_cpu(es->s_def_resgid));
1782
1783        /* enable barriers by default */
1784        set_opt(sbi->s_mount_opt, BARRIER);
1785        set_opt(sbi->s_mount_opt, RESERVATION);
1786
1787        if (!parse_options ((char *) data, sb, &journal_inum, &journal_devnum,
1788                            NULL, 0))
1789                goto failed_mount;
1790
1791        sb->s_flags = (sb->s_flags & ~MS_POSIXACL) |
1792                (test_opt(sb, POSIX_ACL) ? MS_POSIXACL : 0);
1793
1794        if (le32_to_cpu(es->s_rev_level) == EXT3_GOOD_OLD_REV &&
1795            (EXT3_HAS_COMPAT_FEATURE(sb, ~0U) ||
1796             EXT3_HAS_RO_COMPAT_FEATURE(sb, ~0U) ||
1797             EXT3_HAS_INCOMPAT_FEATURE(sb, ~0U)))
1798                ext3_msg(sb, KERN_WARNING,
1799                        "warning: feature flags set on rev 0 fs, "
1800                        "running e2fsck is recommended");
1801        /*
1802         * Check feature flags regardless of the revision level, since we
1803         * previously didn't change the revision level when setting the flags,
1804         * so there is a chance incompat flags are set on a rev 0 filesystem.
1805         */
1806        features = EXT3_HAS_INCOMPAT_FEATURE(sb, ~EXT3_FEATURE_INCOMPAT_SUPP);
1807        if (features) {
1808                ext3_msg(sb, KERN_ERR,
1809                        "error: couldn't mount because of unsupported "
1810                        "optional features (%x)", le32_to_cpu(features));
1811                goto failed_mount;
1812        }
1813        features = EXT3_HAS_RO_COMPAT_FEATURE(sb, ~EXT3_FEATURE_RO_COMPAT_SUPP);
1814        if (!(sb->s_flags & MS_RDONLY) && features) {
1815                ext3_msg(sb, KERN_ERR,
1816                        "error: couldn't mount RDWR because of unsupported "
1817                        "optional features (%x)", le32_to_cpu(features));
1818                goto failed_mount;
1819        }
1820        blocksize = BLOCK_SIZE << le32_to_cpu(es->s_log_block_size);
1821
1822        if (blocksize < EXT3_MIN_BLOCK_SIZE ||
1823            blocksize > EXT3_MAX_BLOCK_SIZE) {
1824                ext3_msg(sb, KERN_ERR,
1825                        "error: couldn't mount because of unsupported "
1826                        "filesystem blocksize %d", blocksize);
1827                goto failed_mount;
1828        }
1829
1830        hblock = bdev_logical_block_size(sb->s_bdev);
1831        if (sb->s_blocksize != blocksize) {
1832                /*
1833                 * Make sure the blocksize for the filesystem is larger
1834                 * than the hardware sectorsize for the machine.
1835                 */
1836                if (blocksize < hblock) {
1837                        ext3_msg(sb, KERN_ERR,
1838                                "error: fsblocksize %d too small for "
1839                                "hardware sectorsize %d", blocksize, hblock);
1840                        goto failed_mount;
1841                }
1842
1843                brelse (bh);
1844                if (!sb_set_blocksize(sb, blocksize)) {
1845                        ext3_msg(sb, KERN_ERR,
1846                                "error: bad blocksize %d", blocksize);
1847                        goto out_fail;
1848                }
1849                logic_sb_block = (sb_block * EXT3_MIN_BLOCK_SIZE) / blocksize;
1850                offset = (sb_block * EXT3_MIN_BLOCK_SIZE) % blocksize;
1851                bh = sb_bread(sb, logic_sb_block);
1852                if (!bh) {
1853                        ext3_msg(sb, KERN_ERR,
1854                               "error: can't read superblock on 2nd try");
1855                        goto failed_mount;
1856                }
1857                es = (struct ext3_super_block *)(bh->b_data + offset);
1858                sbi->s_es = es;
1859                if (es->s_magic != cpu_to_le16(EXT3_SUPER_MAGIC)) {
1860                        ext3_msg(sb, KERN_ERR,
1861                                "error: magic mismatch");
1862                        goto failed_mount;
1863                }
1864        }
1865
1866        sb->s_maxbytes = ext3_max_size(sb->s_blocksize_bits);
1867
1868        if (le32_to_cpu(es->s_rev_level) == EXT3_GOOD_OLD_REV) {
1869                sbi->s_inode_size = EXT3_GOOD_OLD_INODE_SIZE;
1870                sbi->s_first_ino = EXT3_GOOD_OLD_FIRST_INO;
1871        } else {
1872                sbi->s_inode_size = le16_to_cpu(es->s_inode_size);
1873                sbi->s_first_ino = le32_to_cpu(es->s_first_ino);
1874                if ((sbi->s_inode_size < EXT3_GOOD_OLD_INODE_SIZE) ||
1875                    (!is_power_of_2(sbi->s_inode_size)) ||
1876                    (sbi->s_inode_size > blocksize)) {
1877                        ext3_msg(sb, KERN_ERR,
1878                                "error: unsupported inode size: %d",
1879                                sbi->s_inode_size);
1880                        goto failed_mount;
1881                }
1882        }
1883        sbi->s_frag_size = EXT3_MIN_FRAG_SIZE <<
1884                                   le32_to_cpu(es->s_log_frag_size);
1885        if (blocksize != sbi->s_frag_size) {
1886                ext3_msg(sb, KERN_ERR,
1887                       "error: fragsize %lu != blocksize %u (unsupported)",
1888                       sbi->s_frag_size, blocksize);
1889                goto failed_mount;
1890        }
1891        sbi->s_frags_per_block = 1;
1892        sbi->s_blocks_per_group = le32_to_cpu(es->s_blocks_per_group);
1893        sbi->s_frags_per_group = le32_to_cpu(es->s_frags_per_group);
1894        sbi->s_inodes_per_group = le32_to_cpu(es->s_inodes_per_group);
1895        if (EXT3_INODE_SIZE(sb) == 0 || EXT3_INODES_PER_GROUP(sb) == 0)
1896                goto cantfind_ext3;
1897        sbi->s_inodes_per_block = blocksize / EXT3_INODE_SIZE(sb);
1898        if (sbi->s_inodes_per_block == 0)
1899                goto cantfind_ext3;
1900        sbi->s_itb_per_group = sbi->s_inodes_per_group /
1901                                        sbi->s_inodes_per_block;
1902        sbi->s_desc_per_block = blocksize / sizeof(struct ext3_group_desc);
1903        sbi->s_sbh = bh;
1904        sbi->s_mount_state = le16_to_cpu(es->s_state);
1905        sbi->s_addr_per_block_bits = ilog2(EXT3_ADDR_PER_BLOCK(sb));
1906        sbi->s_desc_per_block_bits = ilog2(EXT3_DESC_PER_BLOCK(sb));
1907        for (i=0; i < 4; i++)
1908                sbi->s_hash_seed[i] = le32_to_cpu(es->s_hash_seed[i]);
1909        sbi->s_def_hash_version = es->s_def_hash_version;
1910        i = le32_to_cpu(es->s_flags);
1911        if (i & EXT2_FLAGS_UNSIGNED_HASH)
1912                sbi->s_hash_unsigned = 3;
1913        else if ((i & EXT2_FLAGS_SIGNED_HASH) == 0) {
1914#ifdef __CHAR_UNSIGNED__
1915                es->s_flags |= cpu_to_le32(EXT2_FLAGS_UNSIGNED_HASH);
1916                sbi->s_hash_unsigned = 3;
1917#else
1918                es->s_flags |= cpu_to_le32(EXT2_FLAGS_SIGNED_HASH);
1919#endif
1920        }
1921
1922        if (sbi->s_blocks_per_group > blocksize * 8) {
1923                ext3_msg(sb, KERN_ERR,
1924                        "#blocks per group too big: %lu",
1925                        sbi->s_blocks_per_group);
1926                goto failed_mount;
1927        }
1928        if (sbi->s_frags_per_group > blocksize * 8) {
1929                ext3_msg(sb, KERN_ERR,
1930                        "error: #fragments per group too big: %lu",
1931                        sbi->s_frags_per_group);
1932                goto failed_mount;
1933        }
1934        if (sbi->s_inodes_per_group > blocksize * 8) {
1935                ext3_msg(sb, KERN_ERR,
1936                        "error: #inodes per group too big: %lu",
1937                        sbi->s_inodes_per_group);
1938                goto failed_mount;
1939        }
1940
1941        err = generic_check_addressable(sb->s_blocksize_bits,
1942                                        le32_to_cpu(es->s_blocks_count));
1943        if (err) {
1944                ext3_msg(sb, KERN_ERR,
1945                        "error: filesystem is too large to mount safely");
1946                if (sizeof(sector_t) < 8)
1947                        ext3_msg(sb, KERN_ERR,
1948                                "error: CONFIG_LBDAF not enabled");
1949                ret = err;
1950                goto failed_mount;
1951        }
1952
1953        if (EXT3_BLOCKS_PER_GROUP(sb) == 0)
1954                goto cantfind_ext3;
1955        sbi->s_groups_count = ((le32_to_cpu(es->s_blocks_count) -
1956                               le32_to_cpu(es->s_first_data_block) - 1)
1957                                       / EXT3_BLOCKS_PER_GROUP(sb)) + 1;
1958        db_count = DIV_ROUND_UP(sbi->s_groups_count, EXT3_DESC_PER_BLOCK(sb));
1959        sbi->s_group_desc = kmalloc(db_count * sizeof (struct buffer_head *),
1960                                    GFP_KERNEL);
1961        if (sbi->s_group_desc == NULL) {
1962                ext3_msg(sb, KERN_ERR,
1963                        "error: not enough memory");
1964                ret = -ENOMEM;
1965                goto failed_mount;
1966        }
1967
1968        bgl_lock_init(sbi->s_blockgroup_lock);
1969
1970        for (i = 0; i < db_count; i++) {
1971                block = descriptor_loc(sb, logic_sb_block, i);
1972                sbi->s_group_desc[i] = sb_bread(sb, block);
1973                if (!sbi->s_group_desc[i]) {
1974                        ext3_msg(sb, KERN_ERR,
1975                                "error: can't read group descriptor %d", i);
1976                        db_count = i;
1977                        goto failed_mount2;
1978                }
1979        }
1980        if (!ext3_check_descriptors (sb)) {
1981                ext3_msg(sb, KERN_ERR,
1982                        "error: group descriptors corrupted");
1983                goto failed_mount2;
1984        }
1985        sbi->s_gdb_count = db_count;
1986        get_random_bytes(&sbi->s_next_generation, sizeof(u32));
1987        spin_lock_init(&sbi->s_next_gen_lock);
1988
1989        /* per fileystem reservation list head & lock */
1990        spin_lock_init(&sbi->s_rsv_window_lock);
1991        sbi->s_rsv_window_root = RB_ROOT;
1992        /* Add a single, static dummy reservation to the start of the
1993         * reservation window list --- it gives us a placeholder for
1994         * append-at-start-of-list which makes the allocation logic
1995         * _much_ simpler. */
1996        sbi->s_rsv_window_head.rsv_start = EXT3_RESERVE_WINDOW_NOT_ALLOCATED;
1997        sbi->s_rsv_window_head.rsv_end = EXT3_RESERVE_WINDOW_NOT_ALLOCATED;
1998        sbi->s_rsv_window_head.rsv_alloc_hit = 0;
1999        sbi->s_rsv_window_head.rsv_goal_size = 0;
2000        ext3_rsv_window_add(sb, &sbi->s_rsv_window_head);
2001
2002        /*
2003         * set up enough so that it can read an inode
2004         */
2005        sb->s_op = &ext3_sops;
2006        sb->s_export_op = &ext3_export_ops;
2007        sb->s_xattr = ext3_xattr_handlers;
2008#ifdef CONFIG_QUOTA
2009        sb->s_qcop = &ext3_qctl_operations;
2010        sb->dq_op = &ext3_quota_operations;
2011#endif
2012        memcpy(sb->s_uuid, es->s_uuid, sizeof(es->s_uuid));
2013        INIT_LIST_HEAD(&sbi->s_orphan); /* unlinked but open files */
2014        mutex_init(&sbi->s_orphan_lock);
2015        mutex_init(&sbi->s_resize_lock);
2016
2017        sb->s_root = NULL;
2018
2019        needs_recovery = (es->s_last_orphan != 0 ||
2020                          EXT3_HAS_INCOMPAT_FEATURE(sb,
2021                                    EXT3_FEATURE_INCOMPAT_RECOVER));
2022
2023        /*
2024         * The first inode we look at is the journal inode.  Don't try
2025         * root first: it may be modified in the journal!
2026         */
2027        if (!test_opt(sb, NOLOAD) &&
2028            EXT3_HAS_COMPAT_FEATURE(sb, EXT3_FEATURE_COMPAT_HAS_JOURNAL)) {
2029                if (ext3_load_journal(sb, es, journal_devnum))
2030                        goto failed_mount2;
2031        } else if (journal_inum) {
2032                if (ext3_create_journal(sb, es, journal_inum))
2033                        goto failed_mount2;
2034        } else {
2035                if (!silent)
2036                        ext3_msg(sb, KERN_ERR,
2037                                "error: no journal found. "
2038                                "mounting ext3 over ext2?");
2039                goto failed_mount2;
2040        }
2041        err = percpu_counter_init(&sbi->s_freeblocks_counter,
2042                        ext3_count_free_blocks(sb));
2043        if (!err) {
2044                err = percpu_counter_init(&sbi->s_freeinodes_counter,
2045                                ext3_count_free_inodes(sb));
2046        }
2047        if (!err) {
2048                err = percpu_counter_init(&sbi->s_dirs_counter,
2049                                ext3_count_dirs(sb));
2050        }
2051        if (err) {
2052                ext3_msg(sb, KERN_ERR, "error: insufficient memory");
2053                ret = err;
2054                goto failed_mount3;
2055        }
2056
2057        /* We have now updated the journal if required, so we can
2058         * validate the data journaling mode. */
2059        switch (test_opt(sb, DATA_FLAGS)) {
2060        case 0:
2061                /* No mode set, assume a default based on the journal
2062                   capabilities: ORDERED_DATA if the journal can
2063                   cope, else JOURNAL_DATA */
2064                if (journal_check_available_features
2065                    (sbi->s_journal, 0, 0, JFS_FEATURE_INCOMPAT_REVOKE))
2066                        set_opt(sbi->s_mount_opt, DEFAULT_DATA_MODE);
2067                else
2068                        set_opt(sbi->s_mount_opt, JOURNAL_DATA);
2069                break;
2070
2071        case EXT3_MOUNT_ORDERED_DATA:
2072        case EXT3_MOUNT_WRITEBACK_DATA:
2073                if (!journal_check_available_features
2074                    (sbi->s_journal, 0, 0, JFS_FEATURE_INCOMPAT_REVOKE)) {
2075                        ext3_msg(sb, KERN_ERR,
2076                                "error: journal does not support "
2077                                "requested data journaling mode");
2078                        goto failed_mount3;
2079                }
2080        default:
2081                break;
2082        }
2083
2084        /*
2085         * The journal_load will have done any necessary log recovery,
2086         * so we can safely mount the rest of the filesystem now.
2087         */
2088
2089        root = ext3_iget(sb, EXT3_ROOT_INO);
2090        if (IS_ERR(root)) {
2091                ext3_msg(sb, KERN_ERR, "error: get root inode failed");
2092                ret = PTR_ERR(root);
2093                goto failed_mount3;
2094        }
2095        if (!S_ISDIR(root->i_mode) || !root->i_blocks || !root->i_size) {
2096                iput(root);
2097                ext3_msg(sb, KERN_ERR, "error: corrupt root inode, run e2fsck");
2098                goto failed_mount3;
2099        }
2100        sb->s_root = d_make_root(root);
2101        if (!sb->s_root) {
2102                ext3_msg(sb, KERN_ERR, "error: get root dentry failed");
2103                ret = -ENOMEM;
2104                goto failed_mount3;
2105        }
2106
2107        if (ext3_setup_super(sb, es, sb->s_flags & MS_RDONLY))
2108                sb->s_flags |= MS_RDONLY;
2109
2110        EXT3_SB(sb)->s_mount_state |= EXT3_ORPHAN_FS;
2111        ext3_orphan_cleanup(sb, es);
2112        EXT3_SB(sb)->s_mount_state &= ~EXT3_ORPHAN_FS;
2113        if (needs_recovery) {
2114                ext3_mark_recovery_complete(sb, es);
2115                ext3_msg(sb, KERN_INFO, "recovery complete");
2116        }
2117        ext3_msg(sb, KERN_INFO, "mounted filesystem with %s data mode",
2118                test_opt(sb,DATA_FLAGS) == EXT3_MOUNT_JOURNAL_DATA ? "journal":
2119                test_opt(sb,DATA_FLAGS) == EXT3_MOUNT_ORDERED_DATA ? "ordered":
2120                "writeback");
2121
2122        return 0;
2123
2124cantfind_ext3:
2125        if (!silent)
2126                ext3_msg(sb, KERN_INFO,
2127                        "error: can't find ext3 filesystem on dev %s.",
2128                       sb->s_id);
2129        goto failed_mount;
2130
2131failed_mount3:
2132        percpu_counter_destroy(&sbi->s_freeblocks_counter);
2133        percpu_counter_destroy(&sbi->s_freeinodes_counter);
2134        percpu_counter_destroy(&sbi->s_dirs_counter);
2135        journal_destroy(sbi->s_journal);
2136failed_mount2:
2137        for (i = 0; i < db_count; i++)
2138                brelse(sbi->s_group_desc[i]);
2139        kfree(sbi->s_group_desc);
2140failed_mount:
2141#ifdef CONFIG_QUOTA
2142        for (i = 0; i < MAXQUOTAS; i++)
2143                kfree(sbi->s_qf_names[i]);
2144#endif
2145        ext3_blkdev_remove(sbi);
2146        brelse(bh);
2147out_fail:
2148        sb->s_fs_info = NULL;
2149        kfree(sbi->s_blockgroup_lock);
2150        kfree(sbi);
2151        return ret;
2152}
2153
2154/*
2155 * Setup any per-fs journal parameters now.  We'll do this both on
2156 * initial mount, once the journal has been initialised but before we've
2157 * done any recovery; and again on any subsequent remount.
2158 */
2159static void ext3_init_journal_params(struct super_block *sb, journal_t *journal)
2160{
2161        struct ext3_sb_info *sbi = EXT3_SB(sb);
2162
2163        if (sbi->s_commit_interval)
2164                journal->j_commit_interval = sbi->s_commit_interval;
2165        /* We could also set up an ext3-specific default for the commit
2166         * interval here, but for now we'll just fall back to the jbd
2167         * default. */
2168
2169        spin_lock(&journal->j_state_lock);
2170        if (test_opt(sb, BARRIER))
2171                journal->j_flags |= JFS_BARRIER;
2172        else
2173                journal->j_flags &= ~JFS_BARRIER;
2174        if (test_opt(sb, DATA_ERR_ABORT))
2175                journal->j_flags |= JFS_ABORT_ON_SYNCDATA_ERR;
2176        else
2177                journal->j_flags &= ~JFS_ABORT_ON_SYNCDATA_ERR;
2178        spin_unlock(&journal->j_state_lock);
2179}
2180
2181static journal_t *ext3_get_journal(struct super_block *sb,
2182                                   unsigned int journal_inum)
2183{
2184        struct inode *journal_inode;
2185        journal_t *journal;
2186
2187        /* First, test for the existence of a valid inode on disk.  Bad
2188         * things happen if we iget() an unused inode, as the subsequent
2189         * iput() will try to delete it. */
2190
2191        journal_inode = ext3_iget(sb, journal_inum);
2192        if (IS_ERR(journal_inode)) {
2193                ext3_msg(sb, KERN_ERR, "error: no journal found");
2194                return NULL;
2195        }
2196        if (!journal_inode->i_nlink) {
2197                make_bad_inode(journal_inode);
2198                iput(journal_inode);
2199                ext3_msg(sb, KERN_ERR, "error: journal inode is deleted");
2200                return NULL;
2201        }
2202
2203        jbd_debug(2, "Journal inode found at %p: %Ld bytes\n",
2204                  journal_inode, journal_inode->i_size);
2205        if (!S_ISREG(journal_inode->i_mode)) {
2206                ext3_msg(sb, KERN_ERR, "error: invalid journal inode");
2207                iput(journal_inode);
2208                return NULL;
2209        }
2210
2211        journal = journal_init_inode(journal_inode);
2212        if (!journal) {
2213                ext3_msg(sb, KERN_ERR, "error: could not load journal inode");
2214                iput(journal_inode);
2215                return NULL;
2216        }
2217        journal->j_private = sb;
2218        ext3_init_journal_params(sb, journal);
2219        return journal;
2220}
2221
2222static journal_t *ext3_get_dev_journal(struct super_block *sb,
2223                                       dev_t j_dev)
2224{
2225        struct buffer_head * bh;
2226        journal_t *journal;
2227        ext3_fsblk_t start;
2228        ext3_fsblk_t len;
2229        int hblock, blocksize;
2230        ext3_fsblk_t sb_block;
2231        unsigned long offset;
2232        struct ext3_super_block * es;
2233        struct block_device *bdev;
2234
2235        bdev = ext3_blkdev_get(j_dev, sb);
2236        if (bdev == NULL)
2237                return NULL;
2238
2239        blocksize = sb->s_blocksize;
2240        hblock = bdev_logical_block_size(bdev);
2241        if (blocksize < hblock) {
2242                ext3_msg(sb, KERN_ERR,
2243                        "error: blocksize too small for journal device");
2244                goto out_bdev;
2245        }
2246
2247        sb_block = EXT3_MIN_BLOCK_SIZE / blocksize;
2248        offset = EXT3_MIN_BLOCK_SIZE % blocksize;
2249        set_blocksize(bdev, blocksize);
2250        if (!(bh = __bread(bdev, sb_block, blocksize))) {
2251                ext3_msg(sb, KERN_ERR, "error: couldn't read superblock of "
2252                        "external journal");
2253                goto out_bdev;
2254        }
2255
2256        es = (struct ext3_super_block *) (bh->b_data + offset);
2257        if ((le16_to_cpu(es->s_magic) != EXT3_SUPER_MAGIC) ||
2258            !(le32_to_cpu(es->s_feature_incompat) &
2259              EXT3_FEATURE_INCOMPAT_JOURNAL_DEV)) {
2260                ext3_msg(sb, KERN_ERR, "error: external journal has "
2261                        "bad superblock");
2262                brelse(bh);
2263                goto out_bdev;
2264        }
2265
2266        if (memcmp(EXT3_SB(sb)->s_es->s_journal_uuid, es->s_uuid, 16)) {
2267                ext3_msg(sb, KERN_ERR, "error: journal UUID does not match");
2268                brelse(bh);
2269                goto out_bdev;
2270        }
2271
2272        len = le32_to_cpu(es->s_blocks_count);
2273        start = sb_block + 1;
2274        brelse(bh);     /* we're done with the superblock */
2275
2276        journal = journal_init_dev(bdev, sb->s_bdev,
2277                                        start, len, blocksize);
2278        if (!journal) {
2279                ext3_msg(sb, KERN_ERR,
2280                        "error: failed to create device journal");
2281                goto out_bdev;
2282        }
2283        journal->j_private = sb;
2284        if (!bh_uptodate_or_lock(journal->j_sb_buffer)) {
2285                if (bh_submit_read(journal->j_sb_buffer)) {
2286                        ext3_msg(sb, KERN_ERR, "I/O error on journal device");
2287                        goto out_journal;
2288                }
2289        }
2290        if (be32_to_cpu(journal->j_superblock->s_nr_users) != 1) {
2291                ext3_msg(sb, KERN_ERR,
2292                        "error: external journal has more than one "
2293                        "user (unsupported) - %d",
2294                        be32_to_cpu(journal->j_superblock->s_nr_users));
2295                goto out_journal;
2296        }
2297        EXT3_SB(sb)->journal_bdev = bdev;
2298        ext3_init_journal_params(sb, journal);
2299        return journal;
2300out_journal:
2301        journal_destroy(journal);
2302out_bdev:
2303        ext3_blkdev_put(bdev);
2304        return NULL;
2305}
2306
2307static int ext3_load_journal(struct super_block *sb,
2308                             struct ext3_super_block *es,
2309                             unsigned long journal_devnum)
2310{
2311        journal_t *journal;
2312        unsigned int journal_inum = le32_to_cpu(es->s_journal_inum);
2313        dev_t journal_dev;
2314        int err = 0;
2315        int really_read_only;
2316
2317        if (journal_devnum &&
2318            journal_devnum != le32_to_cpu(es->s_journal_dev)) {
2319                ext3_msg(sb, KERN_INFO, "external journal device major/minor "
2320                        "numbers have changed");
2321                journal_dev = new_decode_dev(journal_devnum);
2322        } else
2323                journal_dev = new_decode_dev(le32_to_cpu(es->s_journal_dev));
2324
2325        really_read_only = bdev_read_only(sb->s_bdev);
2326
2327        /*
2328         * Are we loading a blank journal or performing recovery after a
2329         * crash?  For recovery, we need to check in advance whether we
2330         * can get read-write access to the device.
2331         */
2332
2333        if (EXT3_HAS_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_RECOVER)) {
2334                if (sb->s_flags & MS_RDONLY) {
2335                        ext3_msg(sb, KERN_INFO,
2336                                "recovery required on readonly filesystem");
2337                        if (really_read_only) {
2338                                ext3_msg(sb, KERN_ERR, "error: write access "
2339                                        "unavailable, cannot proceed");
2340                                return -EROFS;
2341                        }
2342                        ext3_msg(sb, KERN_INFO,
2343                                "write access will be enabled during recovery");
2344                }
2345        }
2346
2347        if (journal_inum && journal_dev) {
2348                ext3_msg(sb, KERN_ERR, "error: filesystem has both journal "
2349                       "and inode journals");
2350                return -EINVAL;
2351        }
2352
2353        if (journal_inum) {
2354                if (!(journal = ext3_get_journal(sb, journal_inum)))
2355                        return -EINVAL;
2356        } else {
2357                if (!(journal = ext3_get_dev_journal(sb, journal_dev)))
2358                        return -EINVAL;
2359        }
2360
2361        if (!(journal->j_flags & JFS_BARRIER))
2362                printk(KERN_INFO "EXT3-fs: barriers not enabled\n");
2363
2364        if (!really_read_only && test_opt(sb, UPDATE_JOURNAL)) {
2365                err = journal_update_format(journal);
2366                if (err)  {
2367                        ext3_msg(sb, KERN_ERR, "error updating journal");
2368                        journal_destroy(journal);
2369                        return err;
2370                }
2371        }
2372
2373        if (!EXT3_HAS_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_RECOVER))
2374                err = journal_wipe(journal, !really_read_only);
2375        if (!err)
2376                err = journal_load(journal);
2377
2378        if (err) {
2379                ext3_msg(sb, KERN_ERR, "error loading journal");
2380                journal_destroy(journal);
2381                return err;
2382        }
2383
2384        EXT3_SB(sb)->s_journal = journal;
2385        ext3_clear_journal_err(sb, es);
2386
2387        if (!really_read_only && journal_devnum &&
2388            journal_devnum != le32_to_cpu(es->s_journal_dev)) {
2389                es->s_journal_dev = cpu_to_le32(journal_devnum);
2390
2391                /* Make sure we flush the recovery flag to disk. */
2392                ext3_commit_super(sb, es, 1);
2393        }
2394
2395        return 0;
2396}
2397
2398static int ext3_create_journal(struct super_block *sb,
2399                               struct ext3_super_block *es,
2400                               unsigned int journal_inum)
2401{
2402        journal_t *journal;
2403        int err;
2404
2405        if (sb->s_flags & MS_RDONLY) {
2406                ext3_msg(sb, KERN_ERR,
2407                        "error: readonly filesystem when trying to "
2408                        "create journal");
2409                return -EROFS;
2410        }
2411
2412        journal = ext3_get_journal(sb, journal_inum);
2413        if (!journal)
2414                return -EINVAL;
2415
2416        ext3_msg(sb, KERN_INFO, "creating new journal on inode %u",
2417               journal_inum);
2418
2419        err = journal_create(journal);
2420        if (err) {
2421                ext3_msg(sb, KERN_ERR, "error creating journal");
2422                journal_destroy(journal);
2423                return -EIO;
2424        }
2425
2426        EXT3_SB(sb)->s_journal = journal;
2427
2428        ext3_update_dynamic_rev(sb);
2429        EXT3_SET_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_RECOVER);
2430        EXT3_SET_COMPAT_FEATURE(sb, EXT3_FEATURE_COMPAT_HAS_JOURNAL);
2431
2432        es->s_journal_inum = cpu_to_le32(journal_inum);
2433
2434        /* Make sure we flush the recovery flag to disk. */
2435        ext3_commit_super(sb, es, 1);
2436
2437        return 0;
2438}
2439
2440static int ext3_commit_super(struct super_block *sb,
2441                               struct ext3_super_block *es,
2442                               int sync)
2443{
2444        struct buffer_head *sbh = EXT3_SB(sb)->s_sbh;
2445        int error = 0;
2446
2447        if (!sbh)
2448                return error;
2449
2450        if (buffer_write_io_error(sbh)) {
2451                /*
2452                 * Oh, dear.  A previous attempt to write the
2453                 * superblock failed.  This could happen because the
2454                 * USB device was yanked out.  Or it could happen to
2455                 * be a transient write error and maybe the block will
2456                 * be remapped.  Nothing we can do but to retry the
2457                 * write and hope for the best.
2458                 */
2459                ext3_msg(sb, KERN_ERR, "previous I/O error to "
2460                       "superblock detected");
2461                clear_buffer_write_io_error(sbh);
2462                set_buffer_uptodate(sbh);
2463        }
2464        /*
2465         * If the file system is mounted read-only, don't update the
2466         * superblock write time.  This avoids updating the superblock
2467         * write time when we are mounting the root file system
2468         * read/only but we need to replay the journal; at that point,
2469         * for people who are east of GMT and who make their clock
2470         * tick in localtime for Windows bug-for-bug compatibility,
2471         * the clock is set in the future, and this will cause e2fsck
2472         * to complain and force a full file system check.
2473         */
2474        if (!(sb->s_flags & MS_RDONLY))
2475                es->s_wtime = cpu_to_le32(get_seconds());
2476        es->s_free_blocks_count = cpu_to_le32(ext3_count_free_blocks(sb));
2477        es->s_free_inodes_count = cpu_to_le32(ext3_count_free_inodes(sb));
2478        BUFFER_TRACE(sbh, "marking dirty");
2479        mark_buffer_dirty(sbh);
2480        if (sync) {
2481                error = sync_dirty_buffer(sbh);
2482                if (buffer_write_io_error(sbh)) {
2483                        ext3_msg(sb, KERN_ERR, "I/O error while writing "
2484                               "superblock");
2485                        clear_buffer_write_io_error(sbh);
2486                        set_buffer_uptodate(sbh);
2487                }
2488        }
2489        return error;
2490}
2491
2492
2493/*
2494 * Have we just finished recovery?  If so, and if we are mounting (or
2495 * remounting) the filesystem readonly, then we will end up with a
2496 * consistent fs on disk.  Record that fact.
2497 */
2498static void ext3_mark_recovery_complete(struct super_block * sb,
2499                                        struct ext3_super_block * es)
2500{
2501        journal_t *journal = EXT3_SB(sb)->s_journal;
2502
2503        journal_lock_updates(journal);
2504        if (journal_flush(journal) < 0)
2505                goto out;
2506
2507        if (EXT3_HAS_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_RECOVER) &&
2508            sb->s_flags & MS_RDONLY) {
2509                EXT3_CLEAR_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_RECOVER);
2510                ext3_commit_super(sb, es, 1);
2511        }
2512
2513out:
2514        journal_unlock_updates(journal);
2515}
2516
2517/*
2518 * If we are mounting (or read-write remounting) a filesystem whose journal
2519 * has recorded an error from a previous lifetime, move that error to the
2520 * main filesystem now.
2521 */
2522static void ext3_clear_journal_err(struct super_block *sb,
2523                                   struct ext3_super_block *es)
2524{
2525        journal_t *journal;
2526        int j_errno;
2527        const char *errstr;
2528
2529        journal = EXT3_SB(sb)->s_journal;
2530
2531        /*
2532         * Now check for any error status which may have been recorded in the
2533         * journal by a prior ext3_error() or ext3_abort()
2534         */
2535
2536        j_errno = journal_errno(journal);
2537        if (j_errno) {
2538                char nbuf[16];
2539
2540                errstr = ext3_decode_error(sb, j_errno, nbuf);
2541                ext3_warning(sb, __func__, "Filesystem error recorded "
2542                             "from previous mount: %s", errstr);
2543                ext3_warning(sb, __func__, "Marking fs in need of "
2544                             "filesystem check.");
2545
2546                EXT3_SB(sb)->s_mount_state |= EXT3_ERROR_FS;
2547                es->s_state |= cpu_to_le16(EXT3_ERROR_FS);
2548                ext3_commit_super (sb, es, 1);
2549
2550                journal_clear_err(journal);
2551        }
2552}
2553
2554/*
2555 * Force the running and committing transactions to commit,
2556 * and wait on the commit.
2557 */
2558int ext3_force_commit(struct super_block *sb)
2559{
2560        journal_t *journal;
2561        int ret;
2562
2563        if (sb->s_flags & MS_RDONLY)
2564                return 0;
2565
2566        journal = EXT3_SB(sb)->s_journal;
2567        ret = ext3_journal_force_commit(journal);
2568        return ret;
2569}
2570
2571static int ext3_sync_fs(struct super_block *sb, int wait)
2572{
2573        tid_t target;
2574
2575        trace_ext3_sync_fs(sb, wait);
2576        /*
2577         * Writeback quota in non-journalled quota case - journalled quota has
2578         * no dirty dquots
2579         */
2580        dquot_writeback_dquots(sb, -1);
2581        if (journal_start_commit(EXT3_SB(sb)->s_journal, &target)) {
2582                if (wait)
2583                        log_wait_commit(EXT3_SB(sb)->s_journal, target);
2584        }
2585        return 0;
2586}
2587
2588/*
2589 * LVM calls this function before a (read-only) snapshot is created.  This
2590 * gives us a chance to flush the journal completely and mark the fs clean.
2591 */
2592static int ext3_freeze(struct super_block *sb)
2593{
2594        int error = 0;
2595        journal_t *journal;
2596
2597        if (!(sb->s_flags & MS_RDONLY)) {
2598                journal = EXT3_SB(sb)->s_journal;
2599
2600                /* Now we set up the journal barrier. */
2601                journal_lock_updates(journal);
2602
2603                /*
2604                 * We don't want to clear needs_recovery flag when we failed
2605                 * to flush the journal.
2606                 */
2607                error = journal_flush(journal);
2608                if (error < 0)
2609                        goto out;
2610
2611                /* Journal blocked and flushed, clear needs_recovery flag. */
2612                EXT3_CLEAR_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_RECOVER);
2613                error = ext3_commit_super(sb, EXT3_SB(sb)->s_es, 1);
2614                if (error)
2615                        goto out;
2616        }
2617        return 0;
2618
2619out:
2620        journal_unlock_updates(journal);
2621        return error;
2622}
2623
2624/*
2625 * Called by LVM after the snapshot is done.  We need to reset the RECOVER
2626 * flag here, even though the filesystem is not technically dirty yet.
2627 */
2628static int ext3_unfreeze(struct super_block *sb)
2629{
2630        if (!(sb->s_flags & MS_RDONLY)) {
2631                /* Reser the needs_recovery flag before the fs is unlocked. */
2632                EXT3_SET_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_RECOVER);
2633                ext3_commit_super(sb, EXT3_SB(sb)->s_es, 1);
2634                journal_unlock_updates(EXT3_SB(sb)->s_journal);
2635        }
2636        return 0;
2637}
2638
2639static int ext3_remount (struct super_block * sb, int * flags, char * data)
2640{
2641        struct ext3_super_block * es;
2642        struct ext3_sb_info *sbi = EXT3_SB(sb);
2643        ext3_fsblk_t n_blocks_count = 0;
2644        unsigned long old_sb_flags;
2645        struct ext3_mount_options old_opts;
2646        int enable_quota = 0;
2647        int err;
2648#ifdef CONFIG_QUOTA
2649        int i;
2650#endif
2651
2652        /* Store the original options */
2653        old_sb_flags = sb->s_flags;
2654        old_opts.s_mount_opt = sbi->s_mount_opt;
2655        old_opts.s_resuid = sbi->s_resuid;
2656        old_opts.s_resgid = sbi->s_resgid;
2657        old_opts.s_commit_interval = sbi->s_commit_interval;
2658#ifdef CONFIG_QUOTA
2659        old_opts.s_jquota_fmt = sbi->s_jquota_fmt;
2660        for (i = 0; i < MAXQUOTAS; i++)
2661                if (sbi->s_qf_names[i]) {
2662                        old_opts.s_qf_names[i] = kstrdup(sbi->s_qf_names[i],
2663                                                         GFP_KERNEL);
2664                        if (!old_opts.s_qf_names[i]) {
2665                                int j;
2666
2667                                for (j = 0; j < i; j++)
2668                                        kfree(old_opts.s_qf_names[j]);
2669                                return -ENOMEM;
2670                        }
2671                } else
2672                        old_opts.s_qf_names[i] = NULL;
2673#endif
2674
2675        /*
2676         * Allow the "check" option to be passed as a remount option.
2677         */
2678        if (!parse_options(data, sb, NULL, NULL, &n_blocks_count, 1)) {
2679                err = -EINVAL;
2680                goto restore_opts;
2681        }
2682
2683        if (test_opt(sb, ABORT))
2684                ext3_abort(sb, __func__, "Abort forced by user");
2685
2686        sb->s_flags = (sb->s_flags & ~MS_POSIXACL) |
2687                (test_opt(sb, POSIX_ACL) ? MS_POSIXACL : 0);
2688
2689        es = sbi->s_es;
2690
2691        ext3_init_journal_params(sb, sbi->s_journal);
2692
2693        if ((*flags & MS_RDONLY) != (sb->s_flags & MS_RDONLY) ||
2694                n_blocks_count > le32_to_cpu(es->s_blocks_count)) {
2695                if (test_opt(sb, ABORT)) {
2696                        err = -EROFS;
2697                        goto restore_opts;
2698                }
2699
2700                if (*flags & MS_RDONLY) {
2701                        err = dquot_suspend(sb, -1);
2702                        if (err < 0)
2703                                goto restore_opts;
2704
2705                        /*
2706                         * First of all, the unconditional stuff we have to do
2707                         * to disable replay of the journal when we next remount
2708                         */
2709                        sb->s_flags |= MS_RDONLY;
2710
2711                        /*
2712                         * OK, test if we are remounting a valid rw partition
2713                         * readonly, and if so set the rdonly flag and then
2714                         * mark the partition as valid again.
2715                         */
2716                        if (!(es->s_state & cpu_to_le16(EXT3_VALID_FS)) &&
2717                            (sbi->s_mount_state & EXT3_VALID_FS))
2718                                es->s_state = cpu_to_le16(sbi->s_mount_state);
2719
2720                        ext3_mark_recovery_complete(sb, es);
2721                } else {
2722                        __le32 ret;
2723                        if ((ret = EXT3_HAS_RO_COMPAT_FEATURE(sb,
2724                                        ~EXT3_FEATURE_RO_COMPAT_SUPP))) {
2725                                ext3_msg(sb, KERN_WARNING,
2726                                        "warning: couldn't remount RDWR "
2727                                        "because of unsupported optional "
2728                                        "features (%x)", le32_to_cpu(ret));
2729                                err = -EROFS;
2730                                goto restore_opts;
2731                        }
2732
2733                        /*
2734                         * If we have an unprocessed orphan list hanging
2735                         * around from a previously readonly bdev mount,
2736                         * require a full umount & mount for now.
2737                         */
2738                        if (es->s_last_orphan) {
2739                                ext3_msg(sb, KERN_WARNING, "warning: couldn't "
2740                                       "remount RDWR because of unprocessed "
2741                                       "orphan inode list.  Please "
2742                                       "umount & mount instead.");
2743                                err = -EINVAL;
2744                                goto restore_opts;
2745                        }
2746
2747                        /*
2748                         * Mounting a RDONLY partition read-write, so reread
2749                         * and store the current valid flag.  (It may have
2750                         * been changed by e2fsck since we originally mounted
2751                         * the partition.)
2752                         */
2753                        ext3_clear_journal_err(sb, es);
2754                        sbi->s_mount_state = le16_to_cpu(es->s_state);
2755                        if ((err = ext3_group_extend(sb, es, n_blocks_count)))
2756                                goto restore_opts;
2757                        if (!ext3_setup_super (sb, es, 0))
2758                                sb->s_flags &= ~MS_RDONLY;
2759                        enable_quota = 1;
2760                }
2761        }
2762#ifdef CONFIG_QUOTA
2763        /* Release old quota file names */
2764        for (i = 0; i < MAXQUOTAS; i++)
2765                kfree(old_opts.s_qf_names[i]);
2766#endif
2767        if (enable_quota)
2768                dquot_resume(sb, -1);
2769        return 0;
2770restore_opts:
2771        sb->s_flags = old_sb_flags;
2772        sbi->s_mount_opt = old_opts.s_mount_opt;
2773        sbi->s_resuid = old_opts.s_resuid;
2774        sbi->s_resgid = old_opts.s_resgid;
2775        sbi->s_commit_interval = old_opts.s_commit_interval;
2776#ifdef CONFIG_QUOTA
2777        sbi->s_jquota_fmt = old_opts.s_jquota_fmt;
2778        for (i = 0; i < MAXQUOTAS; i++) {
2779                kfree(sbi->s_qf_names[i]);
2780                sbi->s_qf_names[i] = old_opts.s_qf_names[i];
2781        }
2782#endif
2783        return err;
2784}
2785
2786static int ext3_statfs (struct dentry * dentry, struct kstatfs * buf)
2787{
2788        struct super_block *sb = dentry->d_sb;
2789        struct ext3_sb_info *sbi = EXT3_SB(sb);
2790        struct ext3_super_block *es = sbi->s_es;
2791        u64 fsid;
2792
2793        if (test_opt(sb, MINIX_DF)) {
2794                sbi->s_overhead_last = 0;
2795        } else if (sbi->s_blocks_last != le32_to_cpu(es->s_blocks_count)) {
2796                unsigned long ngroups = sbi->s_groups_count, i;
2797                ext3_fsblk_t overhead = 0;
2798                smp_rmb();
2799
2800                /*
2801                 * Compute the overhead (FS structures).  This is constant
2802                 * for a given filesystem unless the number of block groups
2803                 * changes so we cache the previous value until it does.
2804                 */
2805
2806                /*
2807                 * All of the blocks before first_data_block are
2808                 * overhead
2809                 */
2810                overhead = le32_to_cpu(es->s_first_data_block);
2811
2812                /*
2813                 * Add the overhead attributed to the superblock and
2814                 * block group descriptors.  If the sparse superblocks
2815                 * feature is turned on, then not all groups have this.
2816                 */
2817                for (i = 0; i < ngroups; i++) {
2818                        overhead += ext3_bg_has_super(sb, i) +
2819                                ext3_bg_num_gdb(sb, i);
2820                        cond_resched();
2821                }
2822
2823                /*
2824                 * Every block group has an inode bitmap, a block
2825                 * bitmap, and an inode table.
2826                 */
2827                overhead += ngroups * (2 + sbi->s_itb_per_group);
2828                sbi->s_overhead_last = overhead;
2829                smp_wmb();
2830                sbi->s_blocks_last = le32_to_cpu(es->s_blocks_count);
2831        }
2832
2833        buf->f_type = EXT3_SUPER_MAGIC;
2834        buf->f_bsize = sb->s_blocksize;
2835        buf->f_blocks = le32_to_cpu(es->s_blocks_count) - sbi->s_overhead_last;
2836        buf->f_bfree = percpu_counter_sum_positive(&sbi->s_freeblocks_counter);
2837        buf->f_bavail = buf->f_bfree - le32_to_cpu(es->s_r_blocks_count);
2838        if (buf->f_bfree < le32_to_cpu(es->s_r_blocks_count))
2839                buf->f_bavail = 0;
2840        buf->f_files = le32_to_cpu(es->s_inodes_count);
2841        buf->f_ffree = percpu_counter_sum_positive(&sbi->s_freeinodes_counter);
2842        buf->f_namelen = EXT3_NAME_LEN;
2843        fsid = le64_to_cpup((void *)es->s_uuid) ^
2844               le64_to_cpup((void *)es->s_uuid + sizeof(u64));
2845        buf->f_fsid.val[0] = fsid & 0xFFFFFFFFUL;
2846        buf->f_fsid.val[1] = (fsid >> 32) & 0xFFFFFFFFUL;
2847        return 0;
2848}
2849
2850/* Helper function for writing quotas on sync - we need to start transaction before quota file
2851 * is locked for write. Otherwise the are possible deadlocks:
2852 * Process 1                         Process 2
2853 * ext3_create()                     quota_sync()
2854 *   journal_start()                   write_dquot()
2855 *   dquot_initialize()                       down(dqio_mutex)
2856 *     down(dqio_mutex)                    journal_start()
2857 *
2858 */
2859
2860#ifdef CONFIG_QUOTA
2861
2862static inline struct inode *dquot_to_inode(struct dquot *dquot)
2863{
2864        return sb_dqopt(dquot->dq_sb)->files[dquot->dq_id.type];
2865}
2866
2867static int ext3_write_dquot(struct dquot *dquot)
2868{
2869        int ret, err;
2870        handle_t *handle;
2871        struct inode *inode;
2872
2873        inode = dquot_to_inode(dquot);
2874        handle = ext3_journal_start(inode,
2875                                        EXT3_QUOTA_TRANS_BLOCKS(dquot->dq_sb));
2876        if (IS_ERR(handle))
2877                return PTR_ERR(handle);
2878        ret = dquot_commit(dquot);
2879        err = ext3_journal_stop(handle);
2880        if (!ret)
2881                ret = err;
2882        return ret;
2883}
2884
2885static int ext3_acquire_dquot(struct dquot *dquot)
2886{
2887        int ret, err;
2888        handle_t *handle;
2889
2890        handle = ext3_journal_start(dquot_to_inode(dquot),
2891                                        EXT3_QUOTA_INIT_BLOCKS(dquot->dq_sb));
2892        if (IS_ERR(handle))
2893                return PTR_ERR(handle);
2894        ret = dquot_acquire(dquot);
2895        err = ext3_journal_stop(handle);
2896        if (!ret)
2897                ret = err;
2898        return ret;
2899}
2900
2901static int ext3_release_dquot(struct dquot *dquot)
2902{
2903        int ret, err;
2904        handle_t *handle;
2905
2906        handle = ext3_journal_start(dquot_to_inode(dquot),
2907                                        EXT3_QUOTA_DEL_BLOCKS(dquot->dq_sb));
2908        if (IS_ERR(handle)) {
2909                /* Release dquot anyway to avoid endless cycle in dqput() */
2910                dquot_release(dquot);
2911                return PTR_ERR(handle);
2912        }
2913        ret = dquot_release(dquot);
2914        err = ext3_journal_stop(handle);
2915        if (!ret)
2916                ret = err;
2917        return ret;
2918}
2919
2920static int ext3_mark_dquot_dirty(struct dquot *dquot)
2921{
2922        /* Are we journaling quotas? */
2923        if (EXT3_SB(dquot->dq_sb)->s_qf_names[USRQUOTA] ||
2924            EXT3_SB(dquot->dq_sb)->s_qf_names[GRPQUOTA]) {
2925                dquot_mark_dquot_dirty(dquot);
2926                return ext3_write_dquot(dquot);
2927        } else {
2928                return dquot_mark_dquot_dirty(dquot);
2929        }
2930}
2931
2932static int ext3_write_info(struct super_block *sb, int type)
2933{
2934        int ret, err;
2935        handle_t *handle;
2936
2937        /* Data block + inode block */
2938        handle = ext3_journal_start(sb->s_root->d_inode, 2);
2939        if (IS_ERR(handle))
2940                return PTR_ERR(handle);
2941        ret = dquot_commit_info(sb, type);
2942        err = ext3_journal_stop(handle);
2943        if (!ret)
2944                ret = err;
2945        return ret;
2946}
2947
2948/*
2949 * Turn on quotas during mount time - we need to find
2950 * the quota file and such...
2951 */
2952static int ext3_quota_on_mount(struct super_block *sb, int type)
2953{
2954        return dquot_quota_on_mount(sb, EXT3_SB(sb)->s_qf_names[type],
2955                                        EXT3_SB(sb)->s_jquota_fmt, type);
2956}
2957
2958/*
2959 * Standard function to be called on quota_on
2960 */
2961static int ext3_quota_on(struct super_block *sb, int type, int format_id,
2962                         struct path *path)
2963{
2964        int err;
2965
2966        if (!test_opt(sb, QUOTA))
2967                return -EINVAL;
2968
2969        /* Quotafile not on the same filesystem? */
2970        if (path->dentry->d_sb != sb)
2971                return -EXDEV;
2972        /* Journaling quota? */
2973        if (EXT3_SB(sb)->s_qf_names[type]) {
2974                /* Quotafile not of fs root? */
2975                if (path->dentry->d_parent != sb->s_root)
2976                        ext3_msg(sb, KERN_WARNING,
2977                                "warning: Quota file not on filesystem root. "
2978                                "Journaled quota will not work.");
2979        }
2980
2981        /*
2982         * When we journal data on quota file, we have to flush journal to see
2983         * all updates to the file when we bypass pagecache...
2984         */
2985        if (ext3_should_journal_data(path->dentry->d_inode)) {
2986                /*
2987                 * We don't need to lock updates but journal_flush() could
2988                 * otherwise be livelocked...
2989                 */
2990                journal_lock_updates(EXT3_SB(sb)->s_journal);
2991                err = journal_flush(EXT3_SB(sb)->s_journal);
2992                journal_unlock_updates(EXT3_SB(sb)->s_journal);
2993                if (err)
2994                        return err;
2995        }
2996
2997        return dquot_quota_on(sb, type, format_id, path);
2998}
2999
3000/* Read data from quotafile - avoid pagecache and such because we cannot afford
3001 * acquiring the locks... As quota files are never truncated and quota code
3002 * itself serializes the operations (and no one else should touch the files)
3003 * we don't have to be afraid of races */
3004static ssize_t ext3_quota_read(struct super_block *sb, int type, char *data,
3005                               size_t len, loff_t off)
3006{
3007        struct inode *inode = sb_dqopt(sb)->files[type];
3008        sector_t blk = off >> EXT3_BLOCK_SIZE_BITS(sb);
3009        int err = 0;
3010        int offset = off & (sb->s_blocksize - 1);
3011        int tocopy;
3012        size_t toread;
3013        struct buffer_head *bh;
3014        loff_t i_size = i_size_read(inode);
3015
3016        if (off > i_size)
3017                return 0;
3018        if (off+len > i_size)
3019                len = i_size-off;
3020        toread = len;
3021        while (toread > 0) {
3022                tocopy = sb->s_blocksize - offset < toread ?
3023                                sb->s_blocksize - offset : toread;
3024                bh = ext3_bread(NULL, inode, blk, 0, &err);
3025                if (err)
3026                        return err;
3027                if (!bh)        /* A hole? */
3028                        memset(data, 0, tocopy);
3029                else
3030                        memcpy(data, bh->b_data+offset, tocopy);
3031                brelse(bh);
3032                offset = 0;
3033                toread -= tocopy;
3034                data += tocopy;
3035                blk++;
3036        }
3037        return len;
3038}
3039
3040/* Write to quotafile (we know the transaction is already started and has
3041 * enough credits) */
3042static ssize_t ext3_quota_write(struct super_block *sb, int type,
3043                                const char *data, size_t len, loff_t off)
3044{
3045        struct inode *inode = sb_dqopt(sb)->files[type];
3046        sector_t blk = off >> EXT3_BLOCK_SIZE_BITS(sb);
3047        int err = 0;
3048        int offset = off & (sb->s_blocksize - 1);
3049        int journal_quota = EXT3_SB(sb)->s_qf_names[type] != NULL;
3050        struct buffer_head *bh;
3051        handle_t *handle = journal_current_handle();
3052
3053        if (!handle) {
3054                ext3_msg(sb, KERN_WARNING,
3055                        "warning: quota write (off=%llu, len=%llu)"
3056                        " cancelled because transaction is not started.",
3057                        (unsigned long long)off, (unsigned long long)len);
3058                return -EIO;
3059        }
3060
3061        /*
3062         * Since we account only one data block in transaction credits,
3063         * then it is impossible to cross a block boundary.
3064         */
3065        if (sb->s_blocksize - offset < len) {
3066                ext3_msg(sb, KERN_WARNING, "Quota write (off=%llu, len=%llu)"
3067                        " cancelled because not block aligned",
3068                        (unsigned long long)off, (unsigned long long)len);
3069                return -EIO;
3070        }
3071        bh = ext3_bread(handle, inode, blk, 1, &err);
3072        if (!bh)
3073                goto out;
3074        if (journal_quota) {
3075                err = ext3_journal_get_write_access(handle, bh);
3076                if (err) {
3077                        brelse(bh);
3078                        goto out;
3079                }
3080        }
3081        lock_buffer(bh);
3082        memcpy(bh->b_data+offset, data, len);
3083        flush_dcache_page(bh->b_page);
3084        unlock_buffer(bh);
3085        if (journal_quota)
3086                err = ext3_journal_dirty_metadata(handle, bh);
3087        else {
3088                /* Always do at least ordered writes for quotas */
3089                err = ext3_journal_dirty_data(handle, bh);
3090                mark_buffer_dirty(bh);
3091        }
3092        brelse(bh);
3093out:
3094        if (err)
3095                return err;
3096        if (inode->i_size < off + len) {
3097                i_size_write(inode, off + len);
3098                EXT3_I(inode)->i_disksize = inode->i_size;
3099        }
3100        inode->i_version++;
3101        inode->i_mtime = inode->i_ctime = CURRENT_TIME;
3102        ext3_mark_inode_dirty(handle, inode);
3103        return len;
3104}
3105
3106#endif
3107
3108static struct dentry *ext3_mount(struct file_system_type *fs_type,
3109        int flags, const char *dev_name, void *data)
3110{
3111        return mount_bdev(fs_type, flags, dev_name, data, ext3_fill_super);
3112}
3113
3114static struct file_system_type ext3_fs_type = {
3115        .owner          = THIS_MODULE,
3116        .name           = "ext3",
3117        .mount          = ext3_mount,
3118        .kill_sb        = kill_block_super,
3119        .fs_flags       = FS_REQUIRES_DEV,
3120};
3121MODULE_ALIAS_FS("ext3");
3122
3123static int __init init_ext3_fs(void)
3124{
3125        int err = init_ext3_xattr();
3126        if (err)
3127                return err;
3128        err = init_inodecache();
3129        if (err)
3130                goto out1;
3131        err = register_filesystem(&ext3_fs_type);
3132        if (err)
3133                goto out;
3134        return 0;
3135out:
3136        destroy_inodecache();
3137out1:
3138        exit_ext3_xattr();
3139        return err;
3140}
3141
3142static void __exit exit_ext3_fs(void)
3143{
3144        unregister_filesystem(&ext3_fs_type);
3145        destroy_inodecache();
3146        exit_ext3_xattr();
3147}
3148
3149MODULE_AUTHOR("Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore Ts'o and others");
3150MODULE_DESCRIPTION("Second Extended Filesystem with journaling extensions");
3151MODULE_LICENSE("GPL");
3152module_init(init_ext3_fs)
3153module_exit(exit_ext3_fs)
3154