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