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, __func__,
  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, __func__,
 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_RO)) {
 579                int def_errors = le16_to_cpu(es->s_errors);
 580
 581                if (def_errors == EXT3_ERRORS_PANIC ||
 582                    def_errors == EXT3_ERRORS_CONTINUE) {
 583                        seq_puts(seq, ",errors=remount-ro");
 584                }
 585        }
 586        if (test_opt(sb, ERRORS_CONT))
 587                seq_puts(seq, ",errors=continue");
 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 = ext3_iget(sb, ino);
 653        if (IS_ERR(inode))
 654                return ERR_CAST(inode);
 655        if (generation && inode->i_generation != generation) {
 656                iput(inode);
 657                return ERR_PTR(-ESTALE);
 658        }
 659
 660        return inode;
 661}
 662
 663static struct dentry *ext3_fh_to_dentry(struct super_block *sb, struct fid *fid,
 664                int fh_len, int fh_type)
 665{
 666        return generic_fh_to_dentry(sb, fid, fh_len, fh_type,
 667                                    ext3_nfs_get_inode);
 668}
 669
 670static struct dentry *ext3_fh_to_parent(struct super_block *sb, struct fid *fid,
 671                int fh_len, int fh_type)
 672{
 673        return generic_fh_to_parent(sb, fid, fh_len, fh_type,
 674                                    ext3_nfs_get_inode);
 675}
 676
 677#ifdef CONFIG_QUOTA
 678#define QTYPE2NAME(t) ((t)==USRQUOTA?"user":"group")
 679#define QTYPE2MOPT(on, t) ((t)==USRQUOTA?((on)##USRJQUOTA):((on)##GRPJQUOTA))
 680
 681static int ext3_dquot_initialize(struct inode *inode, int type);
 682static int ext3_dquot_drop(struct inode *inode);
 683static int ext3_write_dquot(struct dquot *dquot);
 684static int ext3_acquire_dquot(struct dquot *dquot);
 685static int ext3_release_dquot(struct dquot *dquot);
 686static int ext3_mark_dquot_dirty(struct dquot *dquot);
 687static int ext3_write_info(struct super_block *sb, int type);
 688static int ext3_quota_on(struct super_block *sb, int type, int format_id,
 689                                char *path, int remount);
 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        .write_inode    = ext3_write_inode,
 726        .dirty_inode    = ext3_dirty_inode,
 727        .delete_inode   = ext3_delete_inode,
 728        .put_super      = ext3_put_super,
 729        .write_super    = ext3_write_super,
 730        .sync_fs        = ext3_sync_fs,
 731        .write_super_lockfs = ext3_write_super_lockfs,
 732        .unlockfs       = ext3_unlockfs,
 733        .statfs         = ext3_statfs,
 734        .remount_fs     = ext3_remount,
 735        .clear_inode    = ext3_clear_inode,
 736        .show_options   = ext3_show_options,
 737#ifdef CONFIG_QUOTA
 738        .quota_read     = ext3_quota_read,
 739        .quota_write    = ext3_quota_write,
 740#endif
 741};
 742
 743static const struct export_operations ext3_export_ops = {
 744        .fh_to_dentry = ext3_fh_to_dentry,
 745        .fh_to_parent = ext3_fh_to_parent,
 746        .get_parent = ext3_get_parent,
 747};
 748
 749enum {
 750        Opt_bsd_df, Opt_minix_df, Opt_grpid, Opt_nogrpid,
 751        Opt_resgid, Opt_resuid, Opt_sb, Opt_err_cont, Opt_err_panic, Opt_err_ro,
 752        Opt_nouid32, Opt_nocheck, Opt_debug, Opt_oldalloc, Opt_orlov,
 753        Opt_user_xattr, Opt_nouser_xattr, Opt_acl, Opt_noacl,
 754        Opt_reservation, Opt_noreservation, Opt_noload, Opt_nobh, Opt_bh,
 755        Opt_commit, Opt_journal_update, Opt_journal_inum, Opt_journal_dev,
 756        Opt_abort, Opt_data_journal, Opt_data_ordered, Opt_data_writeback,
 757        Opt_usrjquota, Opt_grpjquota, Opt_offusrjquota, Opt_offgrpjquota,
 758        Opt_jqfmt_vfsold, Opt_jqfmt_vfsv0, Opt_quota, Opt_noquota,
 759        Opt_ignore, Opt_barrier, Opt_err, Opt_resize, Opt_usrquota,
 760        Opt_grpquota
 761};
 762
 763static match_table_t tokens = {
 764        {Opt_bsd_df, "bsddf"},
 765        {Opt_minix_df, "minixdf"},
 766        {Opt_grpid, "grpid"},
 767        {Opt_grpid, "bsdgroups"},
 768        {Opt_nogrpid, "nogrpid"},
 769        {Opt_nogrpid, "sysvgroups"},
 770        {Opt_resgid, "resgid=%u"},
 771        {Opt_resuid, "resuid=%u"},
 772        {Opt_sb, "sb=%u"},
 773        {Opt_err_cont, "errors=continue"},
 774        {Opt_err_panic, "errors=panic"},
 775        {Opt_err_ro, "errors=remount-ro"},
 776        {Opt_nouid32, "nouid32"},
 777        {Opt_nocheck, "nocheck"},
 778        {Opt_nocheck, "check=none"},
 779        {Opt_debug, "debug"},
 780        {Opt_oldalloc, "oldalloc"},
 781        {Opt_orlov, "orlov"},
 782        {Opt_user_xattr, "user_xattr"},
 783        {Opt_nouser_xattr, "nouser_xattr"},
 784        {Opt_acl, "acl"},
 785        {Opt_noacl, "noacl"},
 786        {Opt_reservation, "reservation"},
 787        {Opt_noreservation, "noreservation"},
 788        {Opt_noload, "noload"},
 789        {Opt_nobh, "nobh"},
 790        {Opt_bh, "bh"},
 791        {Opt_commit, "commit=%u"},
 792        {Opt_journal_update, "journal=update"},
 793        {Opt_journal_inum, "journal=%u"},
 794        {Opt_journal_dev, "journal_dev=%u"},
 795        {Opt_abort, "abort"},
 796        {Opt_data_journal, "data=journal"},
 797        {Opt_data_ordered, "data=ordered"},
 798        {Opt_data_writeback, "data=writeback"},
 799        {Opt_offusrjquota, "usrjquota="},
 800        {Opt_usrjquota, "usrjquota=%s"},
 801        {Opt_offgrpjquota, "grpjquota="},
 802        {Opt_grpjquota, "grpjquota=%s"},
 803        {Opt_jqfmt_vfsold, "jqfmt=vfsold"},
 804        {Opt_jqfmt_vfsv0, "jqfmt=vfsv0"},
 805        {Opt_grpquota, "grpquota"},
 806        {Opt_noquota, "noquota"},
 807        {Opt_quota, "quota"},
 808        {Opt_usrquota, "usrquota"},
 809        {Opt_barrier, "barrier=%u"},
 810        {Opt_resize, "resize"},
 811        {Opt_err, NULL},
 812};
 813
 814static ext3_fsblk_t get_sb_block(void **data)
 815{
 816        ext3_fsblk_t    sb_block;
 817        char            *options = (char *) *data;
 818
 819        if (!options || strncmp(options, "sb=", 3) != 0)
 820                return 1;       /* Default location */
 821        options += 3;
 822        /*todo: use simple_strtoll with >32bit ext3 */
 823        sb_block = simple_strtoul(options, &options, 0);
 824        if (*options && *options != ',') {
 825                printk("EXT3-fs: Invalid sb specification: %s\n",
 826                       (char *) *data);
 827                return 1;
 828        }
 829        if (*options == ',')
 830                options++;
 831        *data = (void *) options;
 832        return sb_block;
 833}
 834
 835static int parse_options (char *options, struct super_block *sb,
 836                          unsigned int *inum, unsigned long *journal_devnum,
 837                          ext3_fsblk_t *n_blocks_count, int is_remount)
 838{
 839        struct ext3_sb_info *sbi = EXT3_SB(sb);
 840        char * p;
 841        substring_t args[MAX_OPT_ARGS];
 842        int data_opt = 0;
 843        int option;
 844#ifdef CONFIG_QUOTA
 845        int qtype;
 846        char *qname;
 847#endif
 848
 849        if (!options)
 850                return 1;
 851
 852        while ((p = strsep (&options, ",")) != NULL) {
 853                int token;
 854                if (!*p)
 855                        continue;
 856
 857                token = match_token(p, tokens, args);
 858                switch (token) {
 859                case Opt_bsd_df:
 860                        clear_opt (sbi->s_mount_opt, MINIX_DF);
 861                        break;
 862                case Opt_minix_df:
 863                        set_opt (sbi->s_mount_opt, MINIX_DF);
 864                        break;
 865                case Opt_grpid:
 866                        set_opt (sbi->s_mount_opt, GRPID);
 867                        break;
 868                case Opt_nogrpid:
 869                        clear_opt (sbi->s_mount_opt, GRPID);
 870                        break;
 871                case Opt_resuid:
 872                        if (match_int(&args[0], &option))
 873                                return 0;
 874                        sbi->s_resuid = option;
 875                        break;
 876                case Opt_resgid:
 877                        if (match_int(&args[0], &option))
 878                                return 0;
 879                        sbi->s_resgid = option;
 880                        break;
 881                case Opt_sb:
 882                        /* handled by get_sb_block() instead of here */
 883                        /* *sb_block = match_int(&args[0]); */
 884                        break;
 885                case Opt_err_panic:
 886                        clear_opt (sbi->s_mount_opt, ERRORS_CONT);
 887                        clear_opt (sbi->s_mount_opt, ERRORS_RO);
 888                        set_opt (sbi->s_mount_opt, ERRORS_PANIC);
 889                        break;
 890                case Opt_err_ro:
 891                        clear_opt (sbi->s_mount_opt, ERRORS_CONT);
 892                        clear_opt (sbi->s_mount_opt, ERRORS_PANIC);
 893                        set_opt (sbi->s_mount_opt, ERRORS_RO);
 894                        break;
 895                case Opt_err_cont:
 896                        clear_opt (sbi->s_mount_opt, ERRORS_RO);
 897                        clear_opt (sbi->s_mount_opt, ERRORS_PANIC);
 898                        set_opt (sbi->s_mount_opt, ERRORS_CONT);
 899                        break;
 900                case Opt_nouid32:
 901                        set_opt (sbi->s_mount_opt, NO_UID32);
 902                        break;
 903                case Opt_nocheck:
 904                        clear_opt (sbi->s_mount_opt, CHECK);
 905                        break;
 906                case Opt_debug:
 907                        set_opt (sbi->s_mount_opt, DEBUG);
 908                        break;
 909                case Opt_oldalloc:
 910                        set_opt (sbi->s_mount_opt, OLDALLOC);
 911                        break;
 912                case Opt_orlov:
 913                        clear_opt (sbi->s_mount_opt, OLDALLOC);
 914                        break;
 915#ifdef CONFIG_EXT3_FS_XATTR
 916                case Opt_user_xattr:
 917                        set_opt (sbi->s_mount_opt, XATTR_USER);
 918                        break;
 919                case Opt_nouser_xattr:
 920                        clear_opt (sbi->s_mount_opt, XATTR_USER);
 921                        break;
 922#else
 923                case Opt_user_xattr:
 924                case Opt_nouser_xattr:
 925                        printk("EXT3 (no)user_xattr options not supported\n");
 926                        break;
 927#endif
 928#ifdef CONFIG_EXT3_FS_POSIX_ACL
 929                case Opt_acl:
 930                        set_opt(sbi->s_mount_opt, POSIX_ACL);
 931                        break;
 932                case Opt_noacl:
 933                        clear_opt(sbi->s_mount_opt, POSIX_ACL);
 934                        break;
 935#else
 936                case Opt_acl:
 937                case Opt_noacl:
 938                        printk("EXT3 (no)acl options not supported\n");
 939                        break;
 940#endif
 941                case Opt_reservation:
 942                        set_opt(sbi->s_mount_opt, RESERVATION);
 943                        break;
 944                case Opt_noreservation:
 945                        clear_opt(sbi->s_mount_opt, RESERVATION);
 946                        break;
 947                case Opt_journal_update:
 948                        /* @@@ FIXME */
 949                        /* Eventually we will want to be able to create
 950                           a journal file here.  For now, only allow the
 951                           user to specify an existing inode to be the
 952                           journal file. */
 953                        if (is_remount) {
 954                                printk(KERN_ERR "EXT3-fs: cannot specify "
 955                                       "journal on remount\n");
 956                                return 0;
 957                        }
 958                        set_opt (sbi->s_mount_opt, UPDATE_JOURNAL);
 959                        break;
 960                case Opt_journal_inum:
 961                        if (is_remount) {
 962                                printk(KERN_ERR "EXT3-fs: cannot specify "
 963                                       "journal on remount\n");
 964                                return 0;
 965                        }
 966                        if (match_int(&args[0], &option))
 967                                return 0;
 968                        *inum = option;
 969                        break;
 970                case Opt_journal_dev:
 971                        if (is_remount) {
 972                                printk(KERN_ERR "EXT3-fs: cannot specify "
 973                                       "journal on remount\n");
 974                                return 0;
 975                        }
 976                        if (match_int(&args[0], &option))
 977                                return 0;
 978                        *journal_devnum = option;
 979                        break;
 980                case Opt_noload:
 981                        set_opt (sbi->s_mount_opt, NOLOAD);
 982                        break;
 983                case Opt_commit:
 984                        if (match_int(&args[0], &option))
 985                                return 0;
 986                        if (option < 0)
 987                                return 0;
 988                        if (option == 0)
 989                                option = JBD_DEFAULT_MAX_COMMIT_AGE;
 990                        sbi->s_commit_interval = HZ * option;
 991                        break;
 992                case Opt_data_journal:
 993                        data_opt = EXT3_MOUNT_JOURNAL_DATA;
 994                        goto datacheck;
 995                case Opt_data_ordered:
 996                        data_opt = EXT3_MOUNT_ORDERED_DATA;
 997                        goto datacheck;
 998                case Opt_data_writeback:
 999                        data_opt = EXT3_MOUNT_WRITEBACK_DATA;
1000                datacheck:
1001                        if (is_remount) {
1002                                if ((sbi->s_mount_opt & EXT3_MOUNT_DATA_FLAGS)
1003                                                != data_opt) {
1004                                        printk(KERN_ERR
1005                                                "EXT3-fs: cannot change data "
1006                                                "mode on remount\n");
1007                                        return 0;
1008                                }
1009                        } else {
1010                                sbi->s_mount_opt &= ~EXT3_MOUNT_DATA_FLAGS;
1011                                sbi->s_mount_opt |= data_opt;
1012                        }
1013                        break;
1014#ifdef CONFIG_QUOTA
1015                case Opt_usrjquota:
1016                        qtype = USRQUOTA;
1017                        goto set_qf_name;
1018                case Opt_grpjquota:
1019                        qtype = GRPQUOTA;
1020set_qf_name:
1021                        if (sb_any_quota_enabled(sb)) {
1022                                printk(KERN_ERR
1023                                        "EXT3-fs: Cannot change journalled "
1024                                        "quota options when quota turned on.\n");
1025                                return 0;
1026                        }
1027                        qname = match_strdup(&args[0]);
1028                        if (!qname) {
1029                                printk(KERN_ERR
1030                                        "EXT3-fs: not enough memory for "
1031                                        "storing quotafile name.\n");
1032                                return 0;
1033                        }
1034                        if (sbi->s_qf_names[qtype] &&
1035                            strcmp(sbi->s_qf_names[qtype], qname)) {
1036                                printk(KERN_ERR
1037                                        "EXT3-fs: %s quota file already "
1038                                        "specified.\n", QTYPE2NAME(qtype));
1039                                kfree(qname);
1040                                return 0;
1041                        }
1042                        sbi->s_qf_names[qtype] = qname;
1043                        if (strchr(sbi->s_qf_names[qtype], '/')) {
1044                                printk(KERN_ERR
1045                                        "EXT3-fs: quotafile must be on "
1046                                        "filesystem root.\n");
1047                                kfree(sbi->s_qf_names[qtype]);
1048                                sbi->s_qf_names[qtype] = NULL;
1049                                return 0;
1050                        }
1051                        set_opt(sbi->s_mount_opt, QUOTA);
1052                        break;
1053                case Opt_offusrjquota:
1054                        qtype = USRQUOTA;
1055                        goto clear_qf_name;
1056                case Opt_offgrpjquota:
1057                        qtype = GRPQUOTA;
1058clear_qf_name:
1059                        if (sb_any_quota_enabled(sb)) {
1060                                printk(KERN_ERR "EXT3-fs: Cannot change "
1061                                        "journalled quota options when "
1062                                        "quota turned on.\n");
1063                                return 0;
1064                        }
1065                        /*
1066                         * The space will be released later when all options
1067                         * are confirmed to be correct
1068                         */
1069                        sbi->s_qf_names[qtype] = NULL;
1070                        break;
1071                case Opt_jqfmt_vfsold:
1072                        sbi->s_jquota_fmt = QFMT_VFS_OLD;
1073                        break;
1074                case Opt_jqfmt_vfsv0:
1075                        sbi->s_jquota_fmt = QFMT_VFS_V0;
1076                        break;
1077                case Opt_quota:
1078                case Opt_usrquota:
1079                        set_opt(sbi->s_mount_opt, QUOTA);
1080                        set_opt(sbi->s_mount_opt, USRQUOTA);
1081                        break;
1082                case Opt_grpquota:
1083                        set_opt(sbi->s_mount_opt, QUOTA);
1084                        set_opt(sbi->s_mount_opt, GRPQUOTA);
1085                        break;
1086                case Opt_noquota:
1087                        if (sb_any_quota_enabled(sb)) {
1088                                printk(KERN_ERR "EXT3-fs: Cannot change quota "
1089                                        "options when quota turned on.\n");
1090                                return 0;
1091                        }
1092                        clear_opt(sbi->s_mount_opt, QUOTA);
1093                        clear_opt(sbi->s_mount_opt, USRQUOTA);
1094                        clear_opt(sbi->s_mount_opt, GRPQUOTA);
1095                        break;
1096#else
1097                case Opt_quota:
1098                case Opt_usrquota:
1099                case Opt_grpquota:
1100                        printk(KERN_ERR
1101                                "EXT3-fs: quota options not supported.\n");
1102                        break;
1103                case Opt_usrjquota:
1104                case Opt_grpjquota:
1105                case Opt_offusrjquota:
1106                case Opt_offgrpjquota:
1107                case Opt_jqfmt_vfsold:
1108                case Opt_jqfmt_vfsv0:
1109                        printk(KERN_ERR
1110                                "EXT3-fs: journaled quota options not "
1111                                "supported.\n");
1112                        break;
1113                case Opt_noquota:
1114                        break;
1115#endif
1116                case Opt_abort:
1117                        set_opt(sbi->s_mount_opt, ABORT);
1118                        break;
1119                case Opt_barrier:
1120                        if (match_int(&args[0], &option))
1121                                return 0;
1122                        if (option)
1123                                set_opt(sbi->s_mount_opt, BARRIER);
1124                        else
1125                                clear_opt(sbi->s_mount_opt, BARRIER);
1126                        break;
1127                case Opt_ignore:
1128                        break;
1129                case Opt_resize:
1130                        if (!is_remount) {
1131                                printk("EXT3-fs: resize option only available "
1132                                        "for remount\n");
1133                                return 0;
1134                        }
1135                        if (match_int(&args[0], &option) != 0)
1136                                return 0;
1137                        *n_blocks_count = option;
1138                        break;
1139                case Opt_nobh:
1140                        set_opt(sbi->s_mount_opt, NOBH);
1141                        break;
1142                case Opt_bh:
1143                        clear_opt(sbi->s_mount_opt, NOBH);
1144                        break;
1145                default:
1146                        printk (KERN_ERR
1147                                "EXT3-fs: Unrecognized mount option \"%s\" "
1148                                "or missing value\n", p);
1149                        return 0;
1150                }
1151        }
1152#ifdef CONFIG_QUOTA
1153        if (sbi->s_qf_names[USRQUOTA] || sbi->s_qf_names[GRPQUOTA]) {
1154                if ((sbi->s_mount_opt & EXT3_MOUNT_USRQUOTA) &&
1155                     sbi->s_qf_names[USRQUOTA])
1156                        clear_opt(sbi->s_mount_opt, USRQUOTA);
1157
1158                if ((sbi->s_mount_opt & EXT3_MOUNT_GRPQUOTA) &&
1159                     sbi->s_qf_names[GRPQUOTA])
1160                        clear_opt(sbi->s_mount_opt, GRPQUOTA);
1161
1162                if ((sbi->s_qf_names[USRQUOTA] &&
1163                                (sbi->s_mount_opt & EXT3_MOUNT_GRPQUOTA)) ||
1164                    (sbi->s_qf_names[GRPQUOTA] &&
1165                                (sbi->s_mount_opt & EXT3_MOUNT_USRQUOTA))) {
1166                        printk(KERN_ERR "EXT3-fs: old and new quota "
1167                                        "format mixing.\n");
1168                        return 0;
1169                }
1170
1171                if (!sbi->s_jquota_fmt) {
1172                        printk(KERN_ERR "EXT3-fs: journalled quota format "
1173                                        "not specified.\n");
1174                        return 0;
1175                }
1176        } else {
1177                if (sbi->s_jquota_fmt) {
1178                        printk(KERN_ERR "EXT3-fs: journalled quota format "
1179                                        "specified with no journalling "
1180                                        "enabled.\n");
1181                        return 0;
1182                }
1183        }
1184#endif
1185        return 1;
1186}
1187
1188static int ext3_setup_super(struct super_block *sb, struct ext3_super_block *es,
1189                            int read_only)
1190{
1191        struct ext3_sb_info *sbi = EXT3_SB(sb);
1192        int res = 0;
1193
1194        if (le32_to_cpu(es->s_rev_level) > EXT3_MAX_SUPP_REV) {
1195                printk (KERN_ERR "EXT3-fs warning: revision level too high, "
1196                        "forcing read-only mode\n");
1197                res = MS_RDONLY;
1198        }
1199        if (read_only)
1200                return res;
1201        if (!(sbi->s_mount_state & EXT3_VALID_FS))
1202                printk (KERN_WARNING "EXT3-fs warning: mounting unchecked fs, "
1203                        "running e2fsck is recommended\n");
1204        else if ((sbi->s_mount_state & EXT3_ERROR_FS))
1205                printk (KERN_WARNING
1206                        "EXT3-fs warning: mounting fs with errors, "
1207                        "running e2fsck is recommended\n");
1208        else if ((__s16) le16_to_cpu(es->s_max_mnt_count) >= 0 &&
1209                 le16_to_cpu(es->s_mnt_count) >=
1210                 (unsigned short) (__s16) le16_to_cpu(es->s_max_mnt_count))
1211                printk (KERN_WARNING
1212                        "EXT3-fs warning: maximal mount count reached, "
1213                        "running e2fsck is recommended\n");
1214        else if (le32_to_cpu(es->s_checkinterval) &&
1215                (le32_to_cpu(es->s_lastcheck) +
1216                        le32_to_cpu(es->s_checkinterval) <= get_seconds()))
1217                printk (KERN_WARNING
1218                        "EXT3-fs warning: checktime reached, "
1219                        "running e2fsck is recommended\n");
1220#if 0
1221                /* @@@ We _will_ want to clear the valid bit if we find
1222                   inconsistencies, to force a fsck at reboot.  But for
1223                   a plain journaled filesystem we can keep it set as
1224                   valid forever! :) */
1225        es->s_state &= cpu_to_le16(~EXT3_VALID_FS);
1226#endif
1227        if (!(__s16) le16_to_cpu(es->s_max_mnt_count))
1228                es->s_max_mnt_count = cpu_to_le16(EXT3_DFL_MAX_MNT_COUNT);
1229        le16_add_cpu(&es->s_mnt_count, 1);
1230        es->s_mtime = cpu_to_le32(get_seconds());
1231        ext3_update_dynamic_rev(sb);
1232        EXT3_SET_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_RECOVER);
1233
1234        ext3_commit_super(sb, es, 1);
1235        if (test_opt(sb, DEBUG))
1236                printk(KERN_INFO "[EXT3 FS bs=%lu, gc=%lu, "
1237                                "bpg=%lu, ipg=%lu, mo=%04lx]\n",
1238                        sb->s_blocksize,
1239                        sbi->s_groups_count,
1240                        EXT3_BLOCKS_PER_GROUP(sb),
1241                        EXT3_INODES_PER_GROUP(sb),
1242                        sbi->s_mount_opt);
1243
1244        printk(KERN_INFO "EXT3 FS on %s, ", sb->s_id);
1245        if (EXT3_SB(sb)->s_journal->j_inode == NULL) {
1246                char b[BDEVNAME_SIZE];
1247
1248                printk("external journal on %s\n",
1249                        bdevname(EXT3_SB(sb)->s_journal->j_dev, b));
1250        } else {
1251                printk("internal journal\n");
1252        }
1253        return res;
1254}
1255
1256/* Called at mount-time, super-block is locked */
1257static int ext3_check_descriptors(struct super_block *sb)
1258{
1259        struct ext3_sb_info *sbi = EXT3_SB(sb);
1260        int i;
1261
1262        ext3_debug ("Checking group descriptors");
1263
1264        for (i = 0; i < sbi->s_groups_count; i++) {
1265                struct ext3_group_desc *gdp = ext3_get_group_desc(sb, i, NULL);
1266                ext3_fsblk_t first_block = ext3_group_first_block_no(sb, i);
1267                ext3_fsblk_t last_block;
1268
1269                if (i == sbi->s_groups_count - 1)
1270                        last_block = le32_to_cpu(sbi->s_es->s_blocks_count) - 1;
1271                else
1272                        last_block = first_block +
1273                                (EXT3_BLOCKS_PER_GROUP(sb) - 1);
1274
1275                if (le32_to_cpu(gdp->bg_block_bitmap) < first_block ||
1276                    le32_to_cpu(gdp->bg_block_bitmap) > last_block)
1277                {
1278                        ext3_error (sb, "ext3_check_descriptors",
1279                                    "Block bitmap for group %d"
1280                                    " not in group (block %lu)!",
1281                                    i, (unsigned long)
1282                                        le32_to_cpu(gdp->bg_block_bitmap));
1283                        return 0;
1284                }
1285                if (le32_to_cpu(gdp->bg_inode_bitmap) < first_block ||
1286                    le32_to_cpu(gdp->bg_inode_bitmap) > last_block)
1287                {
1288                        ext3_error (sb, "ext3_check_descriptors",
1289                                    "Inode bitmap for group %d"
1290                                    " not in group (block %lu)!",
1291                                    i, (unsigned long)
1292                                        le32_to_cpu(gdp->bg_inode_bitmap));
1293                        return 0;
1294                }
1295                if (le32_to_cpu(gdp->bg_inode_table) < first_block ||
1296                    le32_to_cpu(gdp->bg_inode_table) + sbi->s_itb_per_group - 1 >
1297                    last_block)
1298                {
1299                        ext3_error (sb, "ext3_check_descriptors",
1300                                    "Inode table for group %d"
1301                                    " not in group (block %lu)!",
1302                                    i, (unsigned long)
1303                                        le32_to_cpu(gdp->bg_inode_table));
1304                        return 0;
1305                }
1306        }
1307
1308        sbi->s_es->s_free_blocks_count=cpu_to_le32(ext3_count_free_blocks(sb));
1309        sbi->s_es->s_free_inodes_count=cpu_to_le32(ext3_count_free_inodes(sb));
1310        return 1;
1311}
1312
1313
1314/* ext3_orphan_cleanup() walks a singly-linked list of inodes (starting at
1315 * the superblock) which were deleted from all directories, but held open by
1316 * a process at the time of a crash.  We walk the list and try to delete these
1317 * inodes at recovery time (only with a read-write filesystem).
1318 *
1319 * In order to keep the orphan inode chain consistent during traversal (in
1320 * case of crash during recovery), we link each inode into the superblock
1321 * orphan list_head and handle it the same way as an inode deletion during
1322 * normal operation (which journals the operations for us).
1323 *
1324 * We only do an iget() and an iput() on each inode, which is very safe if we
1325 * accidentally point at an in-use or already deleted inode.  The worst that
1326 * can happen in this case is that we get a "bit already cleared" message from
1327 * ext3_free_inode().  The only reason we would point at a wrong inode is if
1328 * e2fsck was run on this filesystem, and it must have already done the orphan
1329 * inode cleanup for us, so we can safely abort without any further action.
1330 */
1331static void ext3_orphan_cleanup (struct super_block * sb,
1332                                 struct ext3_super_block * es)
1333{
1334        unsigned int s_flags = sb->s_flags;
1335        int nr_orphans = 0, nr_truncates = 0;
1336#ifdef CONFIG_QUOTA
1337        int i;
1338#endif
1339        if (!es->s_last_orphan) {
1340                jbd_debug(4, "no orphan inodes to clean up\n");
1341                return;
1342        }
1343
1344        if (bdev_read_only(sb->s_bdev)) {
1345                printk(KERN_ERR "EXT3-fs: write access "
1346                        "unavailable, skipping orphan cleanup.\n");
1347                return;
1348        }
1349
1350        if (EXT3_SB(sb)->s_mount_state & EXT3_ERROR_FS) {
1351                if (es->s_last_orphan)
1352                        jbd_debug(1, "Errors on filesystem, "
1353                                  "clearing orphan list.\n");
1354                es->s_last_orphan = 0;
1355                jbd_debug(1, "Skipping orphan recovery on fs with errors.\n");
1356                return;
1357        }
1358
1359        if (s_flags & MS_RDONLY) {
1360                printk(KERN_INFO "EXT3-fs: %s: orphan cleanup on readonly fs\n",
1361                       sb->s_id);
1362                sb->s_flags &= ~MS_RDONLY;
1363        }
1364#ifdef CONFIG_QUOTA
1365        /* Needed for iput() to work correctly and not trash data */
1366        sb->s_flags |= MS_ACTIVE;
1367        /* Turn on quotas so that they are updated correctly */
1368        for (i = 0; i < MAXQUOTAS; i++) {
1369                if (EXT3_SB(sb)->s_qf_names[i]) {
1370                        int ret = ext3_quota_on_mount(sb, i);
1371                        if (ret < 0)
1372                                printk(KERN_ERR
1373                                        "EXT3-fs: Cannot turn on journalled "
1374                                        "quota: error %d\n", ret);
1375                }
1376        }
1377#endif
1378
1379        while (es->s_last_orphan) {
1380                struct inode *inode;
1381
1382                inode = ext3_orphan_get(sb, le32_to_cpu(es->s_last_orphan));
1383                if (IS_ERR(inode)) {
1384                        es->s_last_orphan = 0;
1385                        break;
1386                }
1387
1388                list_add(&EXT3_I(inode)->i_orphan, &EXT3_SB(sb)->s_orphan);
1389                DQUOT_INIT(inode);
1390                if (inode->i_nlink) {
1391                        printk(KERN_DEBUG
1392                                "%s: truncating inode %lu to %Ld bytes\n",
1393                                __func__, inode->i_ino, inode->i_size);
1394                        jbd_debug(2, "truncating inode %lu to %Ld bytes\n",
1395                                  inode->i_ino, inode->i_size);
1396                        ext3_truncate(inode);
1397                        nr_truncates++;
1398                } else {
1399                        printk(KERN_DEBUG
1400                                "%s: deleting unreferenced inode %lu\n",
1401                                __func__, inode->i_ino);
1402                        jbd_debug(2, "deleting unreferenced inode %lu\n",
1403                                  inode->i_ino);
1404                        nr_orphans++;
1405                }
1406                iput(inode);  /* The delete magic happens here! */
1407        }
1408
1409#define PLURAL(x) (x), ((x)==1) ? "" : "s"
1410
1411        if (nr_orphans)
1412                printk(KERN_INFO "EXT3-fs: %s: %d orphan inode%s deleted\n",
1413                       sb->s_id, PLURAL(nr_orphans));
1414        if (nr_truncates)
1415                printk(KERN_INFO "EXT3-fs: %s: %d truncate%s cleaned up\n",
1416                       sb->s_id, PLURAL(nr_truncates));
1417#ifdef CONFIG_QUOTA
1418        /* Turn quotas off */
1419        for (i = 0; i < MAXQUOTAS; i++) {
1420                if (sb_dqopt(sb)->files[i])
1421                        vfs_quota_off(sb, i, 0);
1422        }
1423#endif
1424        sb->s_flags = s_flags; /* Restore MS_RDONLY status */
1425}
1426
1427/*
1428 * Maximal file size.  There is a direct, and {,double-,triple-}indirect
1429 * block limit, and also a limit of (2^32 - 1) 512-byte sectors in i_blocks.
1430 * We need to be 1 filesystem block less than the 2^32 sector limit.
1431 */
1432static loff_t ext3_max_size(int bits)
1433{
1434        loff_t res = EXT3_NDIR_BLOCKS;
1435        int meta_blocks;
1436        loff_t upper_limit;
1437
1438        /* This is calculated to be the largest file size for a
1439         * dense, file such that the total number of
1440         * sectors in the file, including data and all indirect blocks,
1441         * does not exceed 2^32 -1
1442         * __u32 i_blocks representing the total number of
1443         * 512 bytes blocks of the file
1444         */
1445        upper_limit = (1LL << 32) - 1;
1446
1447        /* total blocks in file system block size */
1448        upper_limit >>= (bits - 9);
1449
1450
1451        /* indirect blocks */
1452        meta_blocks = 1;
1453        /* double indirect blocks */
1454        meta_blocks += 1 + (1LL << (bits-2));
1455        /* tripple indirect blocks */
1456        meta_blocks += 1 + (1LL << (bits-2)) + (1LL << (2*(bits-2)));
1457
1458        upper_limit -= meta_blocks;
1459        upper_limit <<= bits;
1460
1461        res += 1LL << (bits-2);
1462        res += 1LL << (2*(bits-2));
1463        res += 1LL << (3*(bits-2));
1464        res <<= bits;
1465        if (res > upper_limit)
1466                res = upper_limit;
1467
1468        if (res > MAX_LFS_FILESIZE)
1469                res = MAX_LFS_FILESIZE;
1470
1471        return res;
1472}
1473
1474static ext3_fsblk_t descriptor_loc(struct super_block *sb,
1475                                    ext3_fsblk_t logic_sb_block,
1476                                    int nr)
1477{
1478        struct ext3_sb_info *sbi = EXT3_SB(sb);
1479        unsigned long bg, first_meta_bg;
1480        int has_super = 0;
1481
1482        first_meta_bg = le32_to_cpu(sbi->s_es->s_first_meta_bg);
1483
1484        if (!EXT3_HAS_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_META_BG) ||
1485            nr < first_meta_bg)
1486                return (logic_sb_block + nr + 1);
1487        bg = sbi->s_desc_per_block * nr;
1488        if (ext3_bg_has_super(sb, bg))
1489                has_super = 1;
1490        return (has_super + ext3_group_first_block_no(sb, bg));
1491}
1492
1493
1494static int ext3_fill_super (struct super_block *sb, void *data, int silent)
1495{
1496        struct buffer_head * bh;
1497        struct ext3_super_block *es = NULL;
1498        struct ext3_sb_info *sbi;
1499        ext3_fsblk_t block;
1500        ext3_fsblk_t sb_block = get_sb_block(&data);
1501        ext3_fsblk_t logic_sb_block;
1502        unsigned long offset = 0;
1503        unsigned int journal_inum = 0;
1504        unsigned long journal_devnum = 0;
1505        unsigned long def_mount_opts;
1506        struct inode *root;
1507        int blocksize;
1508        int hblock;
1509        int db_count;
1510        int i;
1511        int needs_recovery;
1512        int ret = -EINVAL;
1513        __le32 features;
1514        int err;
1515
1516        sbi = kzalloc(sizeof(*sbi), GFP_KERNEL);
1517        if (!sbi)
1518                return -ENOMEM;
1519        sb->s_fs_info = sbi;
1520        sbi->s_mount_opt = 0;
1521        sbi->s_resuid = EXT3_DEF_RESUID;
1522        sbi->s_resgid = EXT3_DEF_RESGID;
1523        sbi->s_sb_block = sb_block;
1524
1525        unlock_kernel();
1526
1527        blocksize = sb_min_blocksize(sb, EXT3_MIN_BLOCK_SIZE);
1528        if (!blocksize) {
1529                printk(KERN_ERR "EXT3-fs: unable to set blocksize\n");
1530                goto out_fail;
1531        }
1532
1533        /*
1534         * The ext3 superblock will not be buffer aligned for other than 1kB
1535         * block sizes.  We need to calculate the offset from buffer start.
1536         */
1537        if (blocksize != EXT3_MIN_BLOCK_SIZE) {
1538                logic_sb_block = (sb_block * EXT3_MIN_BLOCK_SIZE) / blocksize;
1539                offset = (sb_block * EXT3_MIN_BLOCK_SIZE) % blocksize;
1540        } else {
1541                logic_sb_block = sb_block;
1542        }
1543
1544        if (!(bh = sb_bread(sb, logic_sb_block))) {
1545                printk (KERN_ERR "EXT3-fs: unable to read superblock\n");
1546                goto out_fail;
1547        }
1548        /*
1549         * Note: s_es must be initialized as soon as possible because
1550         *       some ext3 macro-instructions depend on its value
1551         */
1552        es = (struct ext3_super_block *) (((char *)bh->b_data) + offset);
1553        sbi->s_es = es;
1554        sb->s_magic = le16_to_cpu(es->s_magic);
1555        if (sb->s_magic != EXT3_SUPER_MAGIC)
1556                goto cantfind_ext3;
1557
1558        /* Set defaults before we parse the mount options */
1559        def_mount_opts = le32_to_cpu(es->s_default_mount_opts);
1560        if (def_mount_opts & EXT3_DEFM_DEBUG)
1561                set_opt(sbi->s_mount_opt, DEBUG);
1562        if (def_mount_opts & EXT3_DEFM_BSDGROUPS)
1563                set_opt(sbi->s_mount_opt, GRPID);
1564        if (def_mount_opts & EXT3_DEFM_UID16)
1565                set_opt(sbi->s_mount_opt, NO_UID32);
1566#ifdef CONFIG_EXT3_FS_XATTR
1567        if (def_mount_opts & EXT3_DEFM_XATTR_USER)
1568                set_opt(sbi->s_mount_opt, XATTR_USER);
1569#endif
1570#ifdef CONFIG_EXT3_FS_POSIX_ACL
1571        if (def_mount_opts & EXT3_DEFM_ACL)
1572                set_opt(sbi->s_mount_opt, POSIX_ACL);
1573#endif
1574        if ((def_mount_opts & EXT3_DEFM_JMODE) == EXT3_DEFM_JMODE_DATA)
1575                sbi->s_mount_opt |= EXT3_MOUNT_JOURNAL_DATA;
1576        else if ((def_mount_opts & EXT3_DEFM_JMODE) == EXT3_DEFM_JMODE_ORDERED)
1577                sbi->s_mount_opt |= EXT3_MOUNT_ORDERED_DATA;
1578        else if ((def_mount_opts & EXT3_DEFM_JMODE) == EXT3_DEFM_JMODE_WBACK)
1579                sbi->s_mount_opt |= EXT3_MOUNT_WRITEBACK_DATA;
1580
1581        if (le16_to_cpu(sbi->s_es->s_errors) == EXT3_ERRORS_PANIC)
1582                set_opt(sbi->s_mount_opt, ERRORS_PANIC);
1583        else if (le16_to_cpu(sbi->s_es->s_errors) == EXT3_ERRORS_CONTINUE)
1584                set_opt(sbi->s_mount_opt, ERRORS_CONT);
1585        else
1586                set_opt(sbi->s_mount_opt, ERRORS_RO);
1587
1588        sbi->s_resuid = le16_to_cpu(es->s_def_resuid);
1589        sbi->s_resgid = le16_to_cpu(es->s_def_resgid);
1590
1591        set_opt(sbi->s_mount_opt, RESERVATION);
1592
1593        if (!parse_options ((char *) data, sb, &journal_inum, &journal_devnum,
1594                            NULL, 0))
1595                goto failed_mount;
1596
1597        sb->s_flags = (sb->s_flags & ~MS_POSIXACL) |
1598                ((sbi->s_mount_opt & EXT3_MOUNT_POSIX_ACL) ? MS_POSIXACL : 0);
1599
1600        if (le32_to_cpu(es->s_rev_level) == EXT3_GOOD_OLD_REV &&
1601            (EXT3_HAS_COMPAT_FEATURE(sb, ~0U) ||
1602             EXT3_HAS_RO_COMPAT_FEATURE(sb, ~0U) ||
1603             EXT3_HAS_INCOMPAT_FEATURE(sb, ~0U)))
1604                printk(KERN_WARNING
1605                       "EXT3-fs warning: feature flags set on rev 0 fs, "
1606                       "running e2fsck is recommended\n");
1607        /*
1608         * Check feature flags regardless of the revision level, since we
1609         * previously didn't change the revision level when setting the flags,
1610         * so there is a chance incompat flags are set on a rev 0 filesystem.
1611         */
1612        features = EXT3_HAS_INCOMPAT_FEATURE(sb, ~EXT3_FEATURE_INCOMPAT_SUPP);
1613        if (features) {
1614                printk(KERN_ERR "EXT3-fs: %s: couldn't mount because of "
1615                       "unsupported optional features (%x).\n",
1616                       sb->s_id, le32_to_cpu(features));
1617                goto failed_mount;
1618        }
1619        features = EXT3_HAS_RO_COMPAT_FEATURE(sb, ~EXT3_FEATURE_RO_COMPAT_SUPP);
1620        if (!(sb->s_flags & MS_RDONLY) && features) {
1621                printk(KERN_ERR "EXT3-fs: %s: couldn't mount RDWR because of "
1622                       "unsupported optional features (%x).\n",
1623                       sb->s_id, le32_to_cpu(features));
1624                goto failed_mount;
1625        }
1626        blocksize = BLOCK_SIZE << le32_to_cpu(es->s_log_block_size);
1627
1628        if (blocksize < EXT3_MIN_BLOCK_SIZE ||
1629            blocksize > EXT3_MAX_BLOCK_SIZE) {
1630                printk(KERN_ERR
1631                       "EXT3-fs: Unsupported filesystem blocksize %d on %s.\n",
1632                       blocksize, sb->s_id);
1633                goto failed_mount;
1634        }
1635
1636        hblock = bdev_hardsect_size(sb->s_bdev);
1637        if (sb->s_blocksize != blocksize) {
1638                /*
1639                 * Make sure the blocksize for the filesystem is larger
1640                 * than the hardware sectorsize for the machine.
1641                 */
1642                if (blocksize < hblock) {
1643                        printk(KERN_ERR "EXT3-fs: blocksize %d too small for "
1644                               "device blocksize %d.\n", blocksize, hblock);
1645                        goto failed_mount;
1646                }
1647
1648                brelse (bh);
1649                if (!sb_set_blocksize(sb, blocksize)) {
1650                        printk(KERN_ERR "EXT3-fs: bad blocksize %d.\n",
1651                                blocksize);
1652                        goto out_fail;
1653                }
1654                logic_sb_block = (sb_block * EXT3_MIN_BLOCK_SIZE) / blocksize;
1655                offset = (sb_block * EXT3_MIN_BLOCK_SIZE) % blocksize;
1656                bh = sb_bread(sb, logic_sb_block);
1657                if (!bh) {
1658                        printk(KERN_ERR
1659                               "EXT3-fs: Can't read superblock on 2nd try.\n");
1660                        goto failed_mount;
1661                }
1662                es = (struct ext3_super_block *)(((char *)bh->b_data) + offset);
1663                sbi->s_es = es;
1664                if (es->s_magic != cpu_to_le16(EXT3_SUPER_MAGIC)) {
1665                        printk (KERN_ERR
1666                                "EXT3-fs: Magic mismatch, very weird !\n");
1667                        goto failed_mount;
1668                }
1669        }
1670
1671        sb->s_maxbytes = ext3_max_size(sb->s_blocksize_bits);
1672
1673        if (le32_to_cpu(es->s_rev_level) == EXT3_GOOD_OLD_REV) {
1674                sbi->s_inode_size = EXT3_GOOD_OLD_INODE_SIZE;
1675                sbi->s_first_ino = EXT3_GOOD_OLD_FIRST_INO;
1676        } else {
1677                sbi->s_inode_size = le16_to_cpu(es->s_inode_size);
1678                sbi->s_first_ino = le32_to_cpu(es->s_first_ino);
1679                if ((sbi->s_inode_size < EXT3_GOOD_OLD_INODE_SIZE) ||
1680                    (!is_power_of_2(sbi->s_inode_size)) ||
1681                    (sbi->s_inode_size > blocksize)) {
1682                        printk (KERN_ERR
1683                                "EXT3-fs: unsupported inode size: %d\n",
1684                                sbi->s_inode_size);
1685                        goto failed_mount;
1686                }
1687        }
1688        sbi->s_frag_size = EXT3_MIN_FRAG_SIZE <<
1689                                   le32_to_cpu(es->s_log_frag_size);
1690        if (blocksize != sbi->s_frag_size) {
1691                printk(KERN_ERR
1692                       "EXT3-fs: fragsize %lu != blocksize %u (unsupported)\n",
1693                       sbi->s_frag_size, blocksize);
1694                goto failed_mount;
1695        }
1696        sbi->s_frags_per_block = 1;
1697        sbi->s_blocks_per_group = le32_to_cpu(es->s_blocks_per_group);
1698        sbi->s_frags_per_group = le32_to_cpu(es->s_frags_per_group);
1699        sbi->s_inodes_per_group = le32_to_cpu(es->s_inodes_per_group);
1700        if (EXT3_INODE_SIZE(sb) == 0 || EXT3_INODES_PER_GROUP(sb) == 0)
1701                goto cantfind_ext3;
1702        sbi->s_inodes_per_block = blocksize / EXT3_INODE_SIZE(sb);
1703        if (sbi->s_inodes_per_block == 0)
1704                goto cantfind_ext3;
1705        sbi->s_itb_per_group = sbi->s_inodes_per_group /
1706                                        sbi->s_inodes_per_block;
1707        sbi->s_desc_per_block = blocksize / sizeof(struct ext3_group_desc);
1708        sbi->s_sbh = bh;
1709        sbi->s_mount_state = le16_to_cpu(es->s_state);
1710        sbi->s_addr_per_block_bits = ilog2(EXT3_ADDR_PER_BLOCK(sb));
1711        sbi->s_desc_per_block_bits = ilog2(EXT3_DESC_PER_BLOCK(sb));
1712        for (i=0; i < 4; i++)
1713                sbi->s_hash_seed[i] = le32_to_cpu(es->s_hash_seed[i]);
1714        sbi->s_def_hash_version = es->s_def_hash_version;
1715
1716        if (sbi->s_blocks_per_group > blocksize * 8) {
1717                printk (KERN_ERR
1718                        "EXT3-fs: #blocks per group too big: %lu\n",
1719                        sbi->s_blocks_per_group);
1720                goto failed_mount;
1721        }
1722        if (sbi->s_frags_per_group > blocksize * 8) {
1723                printk (KERN_ERR
1724                        "EXT3-fs: #fragments per group too big: %lu\n",
1725                        sbi->s_frags_per_group);
1726                goto failed_mount;
1727        }
1728        if (sbi->s_inodes_per_group > blocksize * 8) {
1729                printk (KERN_ERR
1730                        "EXT3-fs: #inodes per group too big: %lu\n",
1731                        sbi->s_inodes_per_group);
1732                goto failed_mount;
1733        }
1734
1735        if (le32_to_cpu(es->s_blocks_count) >
1736                    (sector_t)(~0ULL) >> (sb->s_blocksize_bits - 9)) {
1737                printk(KERN_ERR "EXT3-fs: filesystem on %s:"
1738                        " too large to mount safely\n", sb->s_id);
1739                if (sizeof(sector_t) < 8)
1740                        printk(KERN_WARNING "EXT3-fs: CONFIG_LBD not "
1741                                        "enabled\n");
1742                goto failed_mount;
1743        }
1744
1745        if (EXT3_BLOCKS_PER_GROUP(sb) == 0)
1746                goto cantfind_ext3;
1747        sbi->s_groups_count = ((le32_to_cpu(es->s_blocks_count) -
1748                               le32_to_cpu(es->s_first_data_block) - 1)
1749                                       / EXT3_BLOCKS_PER_GROUP(sb)) + 1;
1750        db_count = (sbi->s_groups_count + EXT3_DESC_PER_BLOCK(sb) - 1) /
1751                   EXT3_DESC_PER_BLOCK(sb);
1752        sbi->s_group_desc = kmalloc(db_count * sizeof (struct buffer_head *),
1753                                    GFP_KERNEL);
1754        if (sbi->s_group_desc == NULL) {
1755                printk (KERN_ERR "EXT3-fs: not enough memory\n");
1756                goto failed_mount;
1757        }
1758
1759        bgl_lock_init(&sbi->s_blockgroup_lock);
1760
1761        for (i = 0; i < db_count; i++) {
1762                block = descriptor_loc(sb, logic_sb_block, i);
1763                sbi->s_group_desc[i] = sb_bread(sb, block);
1764                if (!sbi->s_group_desc[i]) {
1765                        printk (KERN_ERR "EXT3-fs: "
1766                                "can't read group descriptor %d\n", i);
1767                        db_count = i;
1768                        goto failed_mount2;
1769                }
1770        }
1771        if (!ext3_check_descriptors (sb)) {
1772                printk(KERN_ERR "EXT3-fs: group descriptors corrupted!\n");
1773                goto failed_mount2;
1774        }
1775        sbi->s_gdb_count = db_count;
1776        get_random_bytes(&sbi->s_next_generation, sizeof(u32));
1777        spin_lock_init(&sbi->s_next_gen_lock);
1778
1779        err = percpu_counter_init(&sbi->s_freeblocks_counter,
1780                        ext3_count_free_blocks(sb));
1781        if (!err) {
1782                err = percpu_counter_init(&sbi->s_freeinodes_counter,
1783                                ext3_count_free_inodes(sb));
1784        }
1785        if (!err) {
1786                err = percpu_counter_init(&sbi->s_dirs_counter,
1787                                ext3_count_dirs(sb));
1788        }
1789        if (err) {
1790                printk(KERN_ERR "EXT3-fs: insufficient memory\n");
1791                goto failed_mount3;
1792        }
1793
1794        /* per fileystem reservation list head & lock */
1795        spin_lock_init(&sbi->s_rsv_window_lock);
1796        sbi->s_rsv_window_root = RB_ROOT;
1797        /* Add a single, static dummy reservation to the start of the
1798         * reservation window list --- it gives us a placeholder for
1799         * append-at-start-of-list which makes the allocation logic
1800         * _much_ simpler. */
1801        sbi->s_rsv_window_head.rsv_start = EXT3_RESERVE_WINDOW_NOT_ALLOCATED;
1802        sbi->s_rsv_window_head.rsv_end = EXT3_RESERVE_WINDOW_NOT_ALLOCATED;
1803        sbi->s_rsv_window_head.rsv_alloc_hit = 0;
1804        sbi->s_rsv_window_head.rsv_goal_size = 0;
1805        ext3_rsv_window_add(sb, &sbi->s_rsv_window_head);
1806
1807        /*
1808         * set up enough so that it can read an inode
1809         */
1810        sb->s_op = &ext3_sops;
1811        sb->s_export_op = &ext3_export_ops;
1812        sb->s_xattr = ext3_xattr_handlers;
1813#ifdef CONFIG_QUOTA
1814        sb->s_qcop = &ext3_qctl_operations;
1815        sb->dq_op = &ext3_quota_operations;
1816#endif
1817        INIT_LIST_HEAD(&sbi->s_orphan); /* unlinked but open files */
1818
1819        sb->s_root = NULL;
1820
1821        needs_recovery = (es->s_last_orphan != 0 ||
1822                          EXT3_HAS_INCOMPAT_FEATURE(sb,
1823                                    EXT3_FEATURE_INCOMPAT_RECOVER));
1824
1825        /*
1826         * The first inode we look at is the journal inode.  Don't try
1827         * root first: it may be modified in the journal!
1828         */
1829        if (!test_opt(sb, NOLOAD) &&
1830            EXT3_HAS_COMPAT_FEATURE(sb, EXT3_FEATURE_COMPAT_HAS_JOURNAL)) {
1831                if (ext3_load_journal(sb, es, journal_devnum))
1832                        goto failed_mount3;
1833        } else if (journal_inum) {
1834                if (ext3_create_journal(sb, es, journal_inum))
1835                        goto failed_mount3;
1836        } else {
1837                if (!silent)
1838                        printk (KERN_ERR
1839                                "ext3: No journal on filesystem on %s\n",
1840                                sb->s_id);
1841                goto failed_mount3;
1842        }
1843
1844        /* We have now updated the journal if required, so we can
1845         * validate the data journaling mode. */
1846        switch (test_opt(sb, DATA_FLAGS)) {
1847        case 0:
1848                /* No mode set, assume a default based on the journal
1849                   capabilities: ORDERED_DATA if the journal can
1850                   cope, else JOURNAL_DATA */
1851                if (journal_check_available_features
1852                    (sbi->s_journal, 0, 0, JFS_FEATURE_INCOMPAT_REVOKE))
1853                        set_opt(sbi->s_mount_opt, ORDERED_DATA);
1854                else
1855                        set_opt(sbi->s_mount_opt, JOURNAL_DATA);
1856                break;
1857
1858        case EXT3_MOUNT_ORDERED_DATA:
1859        case EXT3_MOUNT_WRITEBACK_DATA:
1860                if (!journal_check_available_features
1861                    (sbi->s_journal, 0, 0, JFS_FEATURE_INCOMPAT_REVOKE)) {
1862                        printk(KERN_ERR "EXT3-fs: Journal does not support "
1863                               "requested data journaling mode\n");
1864                        goto failed_mount4;
1865                }
1866        default:
1867                break;
1868        }
1869
1870        if (test_opt(sb, NOBH)) {
1871                if (!(test_opt(sb, DATA_FLAGS) == EXT3_MOUNT_WRITEBACK_DATA)) {
1872                        printk(KERN_WARNING "EXT3-fs: Ignoring nobh option - "
1873                                "its supported only with writeback mode\n");
1874                        clear_opt(sbi->s_mount_opt, NOBH);
1875                }
1876        }
1877        /*
1878         * The journal_load will have done any necessary log recovery,
1879         * so we can safely mount the rest of the filesystem now.
1880         */
1881
1882        root = ext3_iget(sb, EXT3_ROOT_INO);
1883        if (IS_ERR(root)) {
1884                printk(KERN_ERR "EXT3-fs: get root inode failed\n");
1885                ret = PTR_ERR(root);
1886                goto failed_mount4;
1887        }
1888        if (!S_ISDIR(root->i_mode) || !root->i_blocks || !root->i_size) {
1889                iput(root);
1890                printk(KERN_ERR "EXT3-fs: corrupt root inode, run e2fsck\n");
1891                goto failed_mount4;
1892        }
1893        sb->s_root = d_alloc_root(root);
1894        if (!sb->s_root) {
1895                printk(KERN_ERR "EXT3-fs: get root dentry failed\n");
1896                iput(root);
1897                ret = -ENOMEM;
1898                goto failed_mount4;
1899        }
1900
1901        ext3_setup_super (sb, es, sb->s_flags & MS_RDONLY);
1902        /*
1903         * akpm: core read_super() calls in here with the superblock locked.
1904         * That deadlocks, because orphan cleanup needs to lock the superblock
1905         * in numerous places.  Here we just pop the lock - it's relatively
1906         * harmless, because we are now ready to accept write_super() requests,
1907         * and aviro says that's the only reason for hanging onto the
1908         * superblock lock.
1909         */
1910        EXT3_SB(sb)->s_mount_state |= EXT3_ORPHAN_FS;
1911        ext3_orphan_cleanup(sb, es);
1912        EXT3_SB(sb)->s_mount_state &= ~EXT3_ORPHAN_FS;
1913        if (needs_recovery)
1914                printk (KERN_INFO "EXT3-fs: recovery complete.\n");
1915        ext3_mark_recovery_complete(sb, es);
1916        printk (KERN_INFO "EXT3-fs: mounted filesystem with %s data mode.\n",
1917                test_opt(sb,DATA_FLAGS) == EXT3_MOUNT_JOURNAL_DATA ? "journal":
1918                test_opt(sb,DATA_FLAGS) == EXT3_MOUNT_ORDERED_DATA ? "ordered":
1919                "writeback");
1920
1921        lock_kernel();
1922        return 0;
1923
1924cantfind_ext3:
1925        if (!silent)
1926                printk(KERN_ERR "VFS: Can't find ext3 filesystem on dev %s.\n",
1927                       sb->s_id);
1928        goto failed_mount;
1929
1930failed_mount4:
1931        journal_destroy(sbi->s_journal);
1932failed_mount3:
1933        percpu_counter_destroy(&sbi->s_freeblocks_counter);
1934        percpu_counter_destroy(&sbi->s_freeinodes_counter);
1935        percpu_counter_destroy(&sbi->s_dirs_counter);
1936failed_mount2:
1937        for (i = 0; i < db_count; i++)
1938                brelse(sbi->s_group_desc[i]);
1939        kfree(sbi->s_group_desc);
1940failed_mount:
1941#ifdef CONFIG_QUOTA
1942        for (i = 0; i < MAXQUOTAS; i++)
1943                kfree(sbi->s_qf_names[i]);
1944#endif
1945        ext3_blkdev_remove(sbi);
1946        brelse(bh);
1947out_fail:
1948        sb->s_fs_info = NULL;
1949        kfree(sbi);
1950        lock_kernel();
1951        return ret;
1952}
1953
1954/*
1955 * Setup any per-fs journal parameters now.  We'll do this both on
1956 * initial mount, once the journal has been initialised but before we've
1957 * done any recovery; and again on any subsequent remount.
1958 */
1959static void ext3_init_journal_params(struct super_block *sb, journal_t *journal)
1960{
1961        struct ext3_sb_info *sbi = EXT3_SB(sb);
1962
1963        if (sbi->s_commit_interval)
1964                journal->j_commit_interval = sbi->s_commit_interval;
1965        /* We could also set up an ext3-specific default for the commit
1966         * interval here, but for now we'll just fall back to the jbd
1967         * default. */
1968
1969        spin_lock(&journal->j_state_lock);
1970        if (test_opt(sb, BARRIER))
1971                journal->j_flags |= JFS_BARRIER;
1972        else
1973                journal->j_flags &= ~JFS_BARRIER;
1974        spin_unlock(&journal->j_state_lock);
1975}
1976
1977static journal_t *ext3_get_journal(struct super_block *sb,
1978                                   unsigned int journal_inum)
1979{
1980        struct inode *journal_inode;
1981        journal_t *journal;
1982
1983        /* First, test for the existence of a valid inode on disk.  Bad
1984         * things happen if we iget() an unused inode, as the subsequent
1985         * iput() will try to delete it. */
1986
1987        journal_inode = ext3_iget(sb, journal_inum);
1988        if (IS_ERR(journal_inode)) {
1989                printk(KERN_ERR "EXT3-fs: no journal found.\n");
1990                return NULL;
1991        }
1992        if (!journal_inode->i_nlink) {
1993                make_bad_inode(journal_inode);
1994                iput(journal_inode);
1995                printk(KERN_ERR "EXT3-fs: journal inode is deleted.\n");
1996                return NULL;
1997        }
1998
1999        jbd_debug(2, "Journal inode found at %p: %Ld bytes\n",
2000                  journal_inode, journal_inode->i_size);
2001        if (!S_ISREG(journal_inode->i_mode)) {
2002                printk(KERN_ERR "EXT3-fs: invalid journal inode.\n");
2003                iput(journal_inode);
2004                return NULL;
2005        }
2006
2007        journal = journal_init_inode(journal_inode);
2008        if (!journal) {
2009                printk(KERN_ERR "EXT3-fs: Could not load journal inode\n");
2010                iput(journal_inode);
2011                return NULL;
2012        }
2013        journal->j_private = sb;
2014        ext3_init_journal_params(sb, journal);
2015        return journal;
2016}
2017
2018static journal_t *ext3_get_dev_journal(struct super_block *sb,
2019                                       dev_t j_dev)
2020{
2021        struct buffer_head * bh;
2022        journal_t *journal;
2023        ext3_fsblk_t start;
2024        ext3_fsblk_t len;
2025        int hblock, blocksize;
2026        ext3_fsblk_t sb_block;
2027        unsigned long offset;
2028        struct ext3_super_block * es;
2029        struct block_device *bdev;
2030
2031        bdev = ext3_blkdev_get(j_dev);
2032        if (bdev == NULL)
2033                return NULL;
2034
2035        if (bd_claim(bdev, sb)) {
2036                printk(KERN_ERR
2037                        "EXT3: failed to claim external journal device.\n");
2038                blkdev_put(bdev);
2039                return NULL;
2040        }
2041
2042        blocksize = sb->s_blocksize;
2043        hblock = bdev_hardsect_size(bdev);
2044        if (blocksize < hblock) {
2045                printk(KERN_ERR
2046                        "EXT3-fs: blocksize too small for journal device.\n");
2047                goto out_bdev;
2048        }
2049
2050        sb_block = EXT3_MIN_BLOCK_SIZE / blocksize;
2051        offset = EXT3_MIN_BLOCK_SIZE % blocksize;
2052        set_blocksize(bdev, blocksize);
2053        if (!(bh = __bread(bdev, sb_block, blocksize))) {
2054                printk(KERN_ERR "EXT3-fs: couldn't read superblock of "
2055                       "external journal\n");
2056                goto out_bdev;
2057        }
2058
2059        es = (struct ext3_super_block *) (((char *)bh->b_data) + offset);
2060        if ((le16_to_cpu(es->s_magic) != EXT3_SUPER_MAGIC) ||
2061            !(le32_to_cpu(es->s_feature_incompat) &
2062              EXT3_FEATURE_INCOMPAT_JOURNAL_DEV)) {
2063                printk(KERN_ERR "EXT3-fs: external journal has "
2064                                        "bad superblock\n");
2065                brelse(bh);
2066                goto out_bdev;
2067        }
2068
2069        if (memcmp(EXT3_SB(sb)->s_es->s_journal_uuid, es->s_uuid, 16)) {
2070                printk(KERN_ERR "EXT3-fs: journal UUID does not match\n");
2071                brelse(bh);
2072                goto out_bdev;
2073        }
2074
2075        len = le32_to_cpu(es->s_blocks_count);
2076        start = sb_block + 1;
2077        brelse(bh);     /* we're done with the superblock */
2078
2079        journal = journal_init_dev(bdev, sb->s_bdev,
2080                                        start, len, blocksize);
2081        if (!journal) {
2082                printk(KERN_ERR "EXT3-fs: failed to create device journal\n");
2083                goto out_bdev;
2084        }
2085        journal->j_private = sb;
2086        ll_rw_block(READ, 1, &journal->j_sb_buffer);
2087        wait_on_buffer(journal->j_sb_buffer);
2088        if (!buffer_uptodate(journal->j_sb_buffer)) {
2089                printk(KERN_ERR "EXT3-fs: I/O error on journal device\n");
2090                goto out_journal;
2091        }
2092        if (be32_to_cpu(journal->j_superblock->s_nr_users) != 1) {
2093                printk(KERN_ERR "EXT3-fs: External journal has more than one "
2094                                        "user (unsupported) - %d\n",
2095                        be32_to_cpu(journal->j_superblock->s_nr_users));
2096                goto out_journal;
2097        }
2098        EXT3_SB(sb)->journal_bdev = bdev;
2099        ext3_init_journal_params(sb, journal);
2100        return journal;
2101out_journal:
2102        journal_destroy(journal);
2103out_bdev:
2104        ext3_blkdev_put(bdev);
2105        return NULL;
2106}
2107
2108static int ext3_load_journal(struct super_block *sb,
2109                             struct ext3_super_block *es,
2110                             unsigned long journal_devnum)
2111{
2112        journal_t *journal;
2113        unsigned int journal_inum = le32_to_cpu(es->s_journal_inum);
2114        dev_t journal_dev;
2115        int err = 0;
2116        int really_read_only;
2117
2118        if (journal_devnum &&
2119            journal_devnum != le32_to_cpu(es->s_journal_dev)) {
2120                printk(KERN_INFO "EXT3-fs: external journal device major/minor "
2121                        "numbers have changed\n");
2122                journal_dev = new_decode_dev(journal_devnum);
2123        } else
2124                journal_dev = new_decode_dev(le32_to_cpu(es->s_journal_dev));
2125
2126        really_read_only = bdev_read_only(sb->s_bdev);
2127
2128        /*
2129         * Are we loading a blank journal or performing recovery after a
2130         * crash?  For recovery, we need to check in advance whether we
2131         * can get read-write access to the device.
2132         */
2133
2134        if (EXT3_HAS_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_RECOVER)) {
2135                if (sb->s_flags & MS_RDONLY) {
2136                        printk(KERN_INFO "EXT3-fs: INFO: recovery "
2137                                        "required on readonly filesystem.\n");
2138                        if (really_read_only) {
2139                                printk(KERN_ERR "EXT3-fs: write access "
2140                                        "unavailable, cannot proceed.\n");
2141                                return -EROFS;
2142                        }
2143                        printk (KERN_INFO "EXT3-fs: write access will "
2144                                        "be enabled during recovery.\n");
2145                }
2146        }
2147
2148        if (journal_inum && journal_dev) {
2149                printk(KERN_ERR "EXT3-fs: filesystem has both journal "
2150                       "and inode journals!\n");
2151                return -EINVAL;
2152        }
2153
2154        if (journal_inum) {
2155                if (!(journal = ext3_get_journal(sb, journal_inum)))
2156                        return -EINVAL;
2157        } else {
2158                if (!(journal = ext3_get_dev_journal(sb, journal_dev)))
2159                        return -EINVAL;
2160        }
2161
2162        if (!really_read_only && test_opt(sb, UPDATE_JOURNAL)) {
2163                err = journal_update_format(journal);
2164                if (err)  {
2165                        printk(KERN_ERR "EXT3-fs: error updating journal.\n");
2166                        journal_destroy(journal);
2167                        return err;
2168                }
2169        }
2170
2171        if (!EXT3_HAS_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_RECOVER))
2172                err = journal_wipe(journal, !really_read_only);
2173        if (!err)
2174                err = journal_load(journal);
2175
2176        if (err) {
2177                printk(KERN_ERR "EXT3-fs: error loading journal.\n");
2178                journal_destroy(journal);
2179                return err;
2180        }
2181
2182        EXT3_SB(sb)->s_journal = journal;
2183        ext3_clear_journal_err(sb, es);
2184
2185        if (journal_devnum &&
2186            journal_devnum != le32_to_cpu(es->s_journal_dev)) {
2187                es->s_journal_dev = cpu_to_le32(journal_devnum);
2188                sb->s_dirt = 1;
2189
2190                /* Make sure we flush the recovery flag to disk. */
2191                ext3_commit_super(sb, es, 1);
2192        }
2193
2194        return 0;
2195}
2196
2197static int ext3_create_journal(struct super_block * sb,
2198                               struct ext3_super_block * es,
2199                               unsigned int journal_inum)
2200{
2201        journal_t *journal;
2202        int err;
2203
2204        if (sb->s_flags & MS_RDONLY) {
2205                printk(KERN_ERR "EXT3-fs: readonly filesystem when trying to "
2206                                "create journal.\n");
2207                return -EROFS;
2208        }
2209
2210        journal = ext3_get_journal(sb, journal_inum);
2211        if (!journal)
2212                return -EINVAL;
2213
2214        printk(KERN_INFO "EXT3-fs: creating new journal on inode %u\n",
2215               journal_inum);
2216
2217        err = journal_create(journal);
2218        if (err) {
2219                printk(KERN_ERR "EXT3-fs: error creating journal.\n");
2220                journal_destroy(journal);
2221                return -EIO;
2222        }
2223
2224        EXT3_SB(sb)->s_journal = journal;
2225
2226        ext3_update_dynamic_rev(sb);
2227        EXT3_SET_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_RECOVER);
2228        EXT3_SET_COMPAT_FEATURE(sb, EXT3_FEATURE_COMPAT_HAS_JOURNAL);
2229
2230        es->s_journal_inum = cpu_to_le32(journal_inum);
2231        sb->s_dirt = 1;
2232
2233        /* Make sure we flush the recovery flag to disk. */
2234        ext3_commit_super(sb, es, 1);
2235
2236        return 0;
2237}
2238
2239static void ext3_commit_super (struct super_block * sb,
2240                               struct ext3_super_block * es,
2241                               int sync)
2242{
2243        struct buffer_head *sbh = EXT3_SB(sb)->s_sbh;
2244
2245        if (!sbh)
2246                return;
2247        es->s_wtime = cpu_to_le32(get_seconds());
2248        es->s_free_blocks_count = cpu_to_le32(ext3_count_free_blocks(sb));
2249        es->s_free_inodes_count = cpu_to_le32(ext3_count_free_inodes(sb));
2250        BUFFER_TRACE(sbh, "marking dirty");
2251        mark_buffer_dirty(sbh);
2252        if (sync)
2253                sync_dirty_buffer(sbh);
2254}
2255
2256
2257/*
2258 * Have we just finished recovery?  If so, and if we are mounting (or
2259 * remounting) the filesystem readonly, then we will end up with a
2260 * consistent fs on disk.  Record that fact.
2261 */
2262static void ext3_mark_recovery_complete(struct super_block * sb,
2263                                        struct ext3_super_block * es)
2264{
2265        journal_t *journal = EXT3_SB(sb)->s_journal;
2266
2267        journal_lock_updates(journal);
2268        journal_flush(journal);
2269        lock_super(sb);
2270        if (EXT3_HAS_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_RECOVER) &&
2271            sb->s_flags & MS_RDONLY) {
2272                EXT3_CLEAR_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_RECOVER);
2273                sb->s_dirt = 0;
2274                ext3_commit_super(sb, es, 1);
2275        }
2276        unlock_super(sb);
2277        journal_unlock_updates(journal);
2278}
2279
2280/*
2281 * If we are mounting (or read-write remounting) a filesystem whose journal
2282 * has recorded an error from a previous lifetime, move that error to the
2283 * main filesystem now.
2284 */
2285static void ext3_clear_journal_err(struct super_block * sb,
2286                                   struct ext3_super_block * es)
2287{
2288        journal_t *journal;
2289        int j_errno;
2290        const char *errstr;
2291
2292        journal = EXT3_SB(sb)->s_journal;
2293
2294        /*
2295         * Now check for any error status which may have been recorded in the
2296         * journal by a prior ext3_error() or ext3_abort()
2297         */
2298
2299        j_errno = journal_errno(journal);
2300        if (j_errno) {
2301                char nbuf[16];
2302
2303                errstr = ext3_decode_error(sb, j_errno, nbuf);
2304                ext3_warning(sb, __func__, "Filesystem error recorded "
2305                             "from previous mount: %s", errstr);
2306                ext3_warning(sb, __func__, "Marking fs in need of "
2307                             "filesystem check.");
2308
2309                EXT3_SB(sb)->s_mount_state |= EXT3_ERROR_FS;
2310                es->s_state |= cpu_to_le16(EXT3_ERROR_FS);
2311                ext3_commit_super (sb, es, 1);
2312
2313                journal_clear_err(journal);
2314        }
2315}
2316
2317/*
2318 * Force the running and committing transactions to commit,
2319 * and wait on the commit.
2320 */
2321int ext3_force_commit(struct super_block *sb)
2322{
2323        journal_t *journal;
2324        int ret;
2325
2326        if (sb->s_flags & MS_RDONLY)
2327                return 0;
2328
2329        journal = EXT3_SB(sb)->s_journal;
2330        sb->s_dirt = 0;
2331        ret = ext3_journal_force_commit(journal);
2332        return ret;
2333}
2334
2335/*
2336 * Ext3 always journals updates to the superblock itself, so we don't
2337 * have to propagate any other updates to the superblock on disk at this
2338 * point.  Just start an async writeback to get the buffers on their way
2339 * to the disk.
2340 *
2341 * This implicitly triggers the writebehind on sync().
2342 */
2343
2344static void ext3_write_super (struct super_block * sb)
2345{
2346        if (mutex_trylock(&sb->s_lock) != 0)
2347                BUG();
2348        sb->s_dirt = 0;
2349}
2350
2351static int ext3_sync_fs(struct super_block *sb, int wait)
2352{
2353        tid_t target;
2354
2355        sb->s_dirt = 0;
2356        if (journal_start_commit(EXT3_SB(sb)->s_journal, &target)) {
2357                if (wait)
2358                        log_wait_commit(EXT3_SB(sb)->s_journal, target);
2359        }
2360        return 0;
2361}
2362
2363/*
2364 * LVM calls this function before a (read-only) snapshot is created.  This
2365 * gives us a chance to flush the journal completely and mark the fs clean.
2366 */
2367static void ext3_write_super_lockfs(struct super_block *sb)
2368{
2369        sb->s_dirt = 0;
2370
2371        if (!(sb->s_flags & MS_RDONLY)) {
2372                journal_t *journal = EXT3_SB(sb)->s_journal;
2373
2374                /* Now we set up the journal barrier. */
2375                journal_lock_updates(journal);
2376                journal_flush(journal);
2377
2378                /* Journal blocked and flushed, clear needs_recovery flag. */
2379                EXT3_CLEAR_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_RECOVER);
2380                ext3_commit_super(sb, EXT3_SB(sb)->s_es, 1);
2381        }
2382}
2383
2384/*
2385 * Called by LVM after the snapshot is done.  We need to reset the RECOVER
2386 * flag here, even though the filesystem is not technically dirty yet.
2387 */
2388static void ext3_unlockfs(struct super_block *sb)
2389{
2390        if (!(sb->s_flags & MS_RDONLY)) {
2391                lock_super(sb);
2392                /* Reser the needs_recovery flag before the fs is unlocked. */
2393                EXT3_SET_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_RECOVER);
2394                ext3_commit_super(sb, EXT3_SB(sb)->s_es, 1);
2395                unlock_super(sb);
2396                journal_unlock_updates(EXT3_SB(sb)->s_journal);
2397        }
2398}
2399
2400static int ext3_remount (struct super_block * sb, int * flags, char * data)
2401{
2402        struct ext3_super_block * es;
2403        struct ext3_sb_info *sbi = EXT3_SB(sb);
2404        ext3_fsblk_t n_blocks_count = 0;
2405        unsigned long old_sb_flags;
2406        struct ext3_mount_options old_opts;
2407        int err;
2408#ifdef CONFIG_QUOTA
2409        int i;
2410#endif
2411
2412        /* Store the original options */
2413        old_sb_flags = sb->s_flags;
2414        old_opts.s_mount_opt = sbi->s_mount_opt;
2415        old_opts.s_resuid = sbi->s_resuid;
2416        old_opts.s_resgid = sbi->s_resgid;
2417        old_opts.s_commit_interval = sbi->s_commit_interval;
2418#ifdef CONFIG_QUOTA
2419        old_opts.s_jquota_fmt = sbi->s_jquota_fmt;
2420        for (i = 0; i < MAXQUOTAS; i++)
2421                old_opts.s_qf_names[i] = sbi->s_qf_names[i];
2422#endif
2423
2424        /*
2425         * Allow the "check" option to be passed as a remount option.
2426         */
2427        if (!parse_options(data, sb, NULL, NULL, &n_blocks_count, 1)) {
2428                err = -EINVAL;
2429                goto restore_opts;
2430        }
2431
2432        if (sbi->s_mount_opt & EXT3_MOUNT_ABORT)
2433                ext3_abort(sb, __func__, "Abort forced by user");
2434
2435        sb->s_flags = (sb->s_flags & ~MS_POSIXACL) |
2436                ((sbi->s_mount_opt & EXT3_MOUNT_POSIX_ACL) ? MS_POSIXACL : 0);
2437
2438        es = sbi->s_es;
2439
2440        ext3_init_journal_params(sb, sbi->s_journal);
2441
2442        if ((*flags & MS_RDONLY) != (sb->s_flags & MS_RDONLY) ||
2443                n_blocks_count > le32_to_cpu(es->s_blocks_count)) {
2444                if (sbi->s_mount_opt & EXT3_MOUNT_ABORT) {
2445                        err = -EROFS;
2446                        goto restore_opts;
2447                }
2448
2449                if (*flags & MS_RDONLY) {
2450                        /*
2451                         * First of all, the unconditional stuff we have to do
2452                         * to disable replay of the journal when we next remount
2453                         */
2454                        sb->s_flags |= MS_RDONLY;
2455
2456                        /*
2457                         * OK, test if we are remounting a valid rw partition
2458                         * readonly, and if so set the rdonly flag and then
2459                         * mark the partition as valid again.
2460                         */
2461                        if (!(es->s_state & cpu_to_le16(EXT3_VALID_FS)) &&
2462                            (sbi->s_mount_state & EXT3_VALID_FS))
2463                                es->s_state = cpu_to_le16(sbi->s_mount_state);
2464
2465                        /*
2466                         * We have to unlock super so that we can wait for
2467                         * transactions.
2468                         */
2469                        unlock_super(sb);
2470                        ext3_mark_recovery_complete(sb, es);
2471                        lock_super(sb);
2472                } else {
2473                        __le32 ret;
2474                        if ((ret = EXT3_HAS_RO_COMPAT_FEATURE(sb,
2475                                        ~EXT3_FEATURE_RO_COMPAT_SUPP))) {
2476                                printk(KERN_WARNING "EXT3-fs: %s: couldn't "
2477                                       "remount RDWR because of unsupported "
2478                                       "optional features (%x).\n",
2479                                       sb->s_id, le32_to_cpu(ret));
2480                                err = -EROFS;
2481                                goto restore_opts;
2482                        }
2483
2484                        /*
2485                         * If we have an unprocessed orphan list hanging
2486                         * around from a previously readonly bdev mount,
2487                         * require a full umount/remount for now.
2488                         */
2489                        if (es->s_last_orphan) {
2490                                printk(KERN_WARNING "EXT3-fs: %s: couldn't "
2491                                       "remount RDWR because of unprocessed "
2492                                       "orphan inode list.  Please "
2493                                       "umount/remount instead.\n",
2494                                       sb->s_id);
2495                                err = -EINVAL;
2496                                goto restore_opts;
2497                        }
2498
2499                        /*
2500                         * Mounting a RDONLY partition read-write, so reread
2501                         * and store the current valid flag.  (It may have
2502                         * been changed by e2fsck since we originally mounted
2503                         * the partition.)
2504                         */
2505                        ext3_clear_journal_err(sb, es);
2506                        sbi->s_mount_state = le16_to_cpu(es->s_state);
2507                        if ((err = ext3_group_extend(sb, es, n_blocks_count)))
2508                                goto restore_opts;
2509                        if (!ext3_setup_super (sb, es, 0))
2510                                sb->s_flags &= ~MS_RDONLY;
2511                }
2512        }
2513#ifdef CONFIG_QUOTA
2514        /* Release old quota file names */
2515        for (i = 0; i < MAXQUOTAS; i++)
2516                if (old_opts.s_qf_names[i] &&
2517                    old_opts.s_qf_names[i] != sbi->s_qf_names[i])
2518                        kfree(old_opts.s_qf_names[i]);
2519#endif
2520        return 0;
2521restore_opts:
2522        sb->s_flags = old_sb_flags;
2523        sbi->s_mount_opt = old_opts.s_mount_opt;
2524        sbi->s_resuid = old_opts.s_resuid;
2525        sbi->s_resgid = old_opts.s_resgid;
2526        sbi->s_commit_interval = old_opts.s_commit_interval;
2527#ifdef CONFIG_QUOTA
2528        sbi->s_jquota_fmt = old_opts.s_jquota_fmt;
2529        for (i = 0; i < MAXQUOTAS; i++) {
2530                if (sbi->s_qf_names[i] &&
2531                    old_opts.s_qf_names[i] != sbi->s_qf_names[i])
2532                        kfree(sbi->s_qf_names[i]);
2533                sbi->s_qf_names[i] = old_opts.s_qf_names[i];
2534        }
2535#endif
2536        return err;
2537}
2538
2539static int ext3_statfs (struct dentry * dentry, struct kstatfs * buf)
2540{
2541        struct super_block *sb = dentry->d_sb;
2542        struct ext3_sb_info *sbi = EXT3_SB(sb);
2543        struct ext3_super_block *es = sbi->s_es;
2544        u64 fsid;
2545
2546        if (test_opt(sb, MINIX_DF)) {
2547                sbi->s_overhead_last = 0;
2548        } else if (sbi->s_blocks_last != le32_to_cpu(es->s_blocks_count)) {
2549                unsigned long ngroups = sbi->s_groups_count, i;
2550                ext3_fsblk_t overhead = 0;
2551                smp_rmb();
2552
2553                /*
2554                 * Compute the overhead (FS structures).  This is constant
2555                 * for a given filesystem unless the number of block groups
2556                 * changes so we cache the previous value until it does.
2557                 */
2558
2559                /*
2560                 * All of the blocks before first_data_block are
2561                 * overhead
2562                 */
2563                overhead = le32_to_cpu(es->s_first_data_block);
2564
2565                /*
2566                 * Add the overhead attributed to the superblock and
2567                 * block group descriptors.  If the sparse superblocks
2568                 * feature is turned on, then not all groups have this.
2569                 */
2570                for (i = 0; i < ngroups; i++) {
2571                        overhead += ext3_bg_has_super(sb, i) +
2572                                ext3_bg_num_gdb(sb, i);
2573                        cond_resched();
2574                }
2575
2576                /*
2577                 * Every block group has an inode bitmap, a block
2578                 * bitmap, and an inode table.
2579                 */
2580                overhead += ngroups * (2 + sbi->s_itb_per_group);
2581                sbi->s_overhead_last = overhead;
2582                smp_wmb();
2583                sbi->s_blocks_last = le32_to_cpu(es->s_blocks_count);
2584        }
2585
2586        buf->f_type = EXT3_SUPER_MAGIC;
2587        buf->f_bsize = sb->s_blocksize;
2588        buf->f_blocks = le32_to_cpu(es->s_blocks_count) - sbi->s_overhead_last;
2589        buf->f_bfree = percpu_counter_sum_positive(&sbi->s_freeblocks_counter);
2590        es->s_free_blocks_count = cpu_to_le32(buf->f_bfree);
2591        buf->f_bavail = buf->f_bfree - le32_to_cpu(es->s_r_blocks_count);
2592        if (buf->f_bfree < le32_to_cpu(es->s_r_blocks_count))
2593                buf->f_bavail = 0;
2594        buf->f_files = le32_to_cpu(es->s_inodes_count);
2595        buf->f_ffree = percpu_counter_sum_positive(&sbi->s_freeinodes_counter);
2596        es->s_free_inodes_count = cpu_to_le32(buf->f_ffree);
2597        buf->f_namelen = EXT3_NAME_LEN;
2598        fsid = le64_to_cpup((void *)es->s_uuid) ^
2599               le64_to_cpup((void *)es->s_uuid + sizeof(u64));
2600        buf->f_fsid.val[0] = fsid & 0xFFFFFFFFUL;
2601        buf->f_fsid.val[1] = (fsid >> 32) & 0xFFFFFFFFUL;
2602        return 0;
2603}
2604
2605/* Helper function for writing quotas on sync - we need to start transaction before quota file
2606 * is locked for write. Otherwise the are possible deadlocks:
2607 * Process 1                         Process 2
2608 * ext3_create()                     quota_sync()
2609 *   journal_start()                   write_dquot()
2610 *   DQUOT_INIT()                        down(dqio_mutex)
2611 *     down(dqio_mutex)                    journal_start()
2612 *
2613 */
2614
2615#ifdef CONFIG_QUOTA
2616
2617static inline struct inode *dquot_to_inode(struct dquot *dquot)
2618{
2619        return sb_dqopt(dquot->dq_sb)->files[dquot->dq_type];
2620}
2621
2622static int ext3_dquot_initialize(struct inode *inode, int type)
2623{
2624        handle_t *handle;
2625        int ret, err;
2626
2627        /* We may create quota structure so we need to reserve enough blocks */
2628        handle = ext3_journal_start(inode, 2*EXT3_QUOTA_INIT_BLOCKS(inode->i_sb));
2629        if (IS_ERR(handle))
2630                return PTR_ERR(handle);
2631        ret = dquot_initialize(inode, type);
2632        err = ext3_journal_stop(handle);
2633        if (!ret)
2634                ret = err;
2635        return ret;
2636}
2637
2638static int ext3_dquot_drop(struct inode *inode)
2639{
2640        handle_t *handle;
2641        int ret, err;
2642
2643        /* We may delete quota structure so we need to reserve enough blocks */
2644        handle = ext3_journal_start(inode, 2*EXT3_QUOTA_DEL_BLOCKS(inode->i_sb));
2645        if (IS_ERR(handle)) {
2646                /*
2647                 * We call dquot_drop() anyway to at least release references
2648                 * to quota structures so that umount does not hang.
2649                 */
2650                dquot_drop(inode);
2651                return PTR_ERR(handle);
2652        }
2653        ret = dquot_drop(inode);
2654        err = ext3_journal_stop(handle);
2655        if (!ret)
2656                ret = err;
2657        return ret;
2658}
2659
2660static int ext3_write_dquot(struct dquot *dquot)
2661{
2662        int ret, err;
2663        handle_t *handle;
2664        struct inode *inode;
2665
2666        inode = dquot_to_inode(dquot);
2667        handle = ext3_journal_start(inode,
2668                                        EXT3_QUOTA_TRANS_BLOCKS(dquot->dq_sb));
2669        if (IS_ERR(handle))
2670                return PTR_ERR(handle);
2671        ret = dquot_commit(dquot);
2672        err = ext3_journal_stop(handle);
2673        if (!ret)
2674                ret = err;
2675        return ret;
2676}
2677
2678static int ext3_acquire_dquot(struct dquot *dquot)
2679{
2680        int ret, err;
2681        handle_t *handle;
2682
2683        handle = ext3_journal_start(dquot_to_inode(dquot),
2684                                        EXT3_QUOTA_INIT_BLOCKS(dquot->dq_sb));
2685        if (IS_ERR(handle))
2686                return PTR_ERR(handle);
2687        ret = dquot_acquire(dquot);
2688        err = ext3_journal_stop(handle);
2689        if (!ret)
2690                ret = err;
2691        return ret;
2692}
2693
2694static int ext3_release_dquot(struct dquot *dquot)
2695{
2696        int ret, err;
2697        handle_t *handle;
2698
2699        handle = ext3_journal_start(dquot_to_inode(dquot),
2700                                        EXT3_QUOTA_DEL_BLOCKS(dquot->dq_sb));
2701        if (IS_ERR(handle)) {
2702                /* Release dquot anyway to avoid endless cycle in dqput() */
2703                dquot_release(dquot);
2704                return PTR_ERR(handle);
2705        }
2706        ret = dquot_release(dquot);
2707        err = ext3_journal_stop(handle);
2708        if (!ret)
2709                ret = err;
2710        return ret;
2711}
2712
2713static int ext3_mark_dquot_dirty(struct dquot *dquot)
2714{
2715        /* Are we journalling quotas? */
2716        if (EXT3_SB(dquot->dq_sb)->s_qf_names[USRQUOTA] ||
2717            EXT3_SB(dquot->dq_sb)->s_qf_names[GRPQUOTA]) {
2718                dquot_mark_dquot_dirty(dquot);
2719                return ext3_write_dquot(dquot);
2720        } else {
2721                return dquot_mark_dquot_dirty(dquot);
2722        }
2723}
2724
2725static int ext3_write_info(struct super_block *sb, int type)
2726{
2727        int ret, err;
2728        handle_t *handle;
2729
2730        /* Data block + inode block */
2731        handle = ext3_journal_start(sb->s_root->d_inode, 2);
2732        if (IS_ERR(handle))
2733                return PTR_ERR(handle);
2734        ret = dquot_commit_info(sb, type);
2735        err = ext3_journal_stop(handle);
2736        if (!ret)
2737                ret = err;
2738        return ret;
2739}
2740
2741/*
2742 * Turn on quotas during mount time - we need to find
2743 * the quota file and such...
2744 */
2745static int ext3_quota_on_mount(struct super_block *sb, int type)
2746{
2747        return vfs_quota_on_mount(sb, EXT3_SB(sb)->s_qf_names[type],
2748                        EXT3_SB(sb)->s_jquota_fmt, type);
2749}
2750
2751/*
2752 * Standard function to be called on quota_on
2753 */
2754static int ext3_quota_on(struct super_block *sb, int type, int format_id,
2755                         char *path, int remount)
2756{
2757        int err;
2758        struct nameidata nd;
2759
2760        if (!test_opt(sb, QUOTA))
2761                return -EINVAL;
2762        /* Not journalling quota or remount? */
2763        if ((!EXT3_SB(sb)->s_qf_names[USRQUOTA] &&
2764            !EXT3_SB(sb)->s_qf_names[GRPQUOTA]) || remount)
2765                return vfs_quota_on(sb, type, format_id, path, remount);
2766        err = path_lookup(path, LOOKUP_FOLLOW, &nd);
2767        if (err)
2768                return err;
2769        /* Quotafile not on the same filesystem? */
2770        if (nd.path.mnt->mnt_sb != sb) {
2771                path_put(&nd.path);
2772                return -EXDEV;
2773        }
2774        /* Quotafile not in fs root? */
2775        if (nd.path.dentry->d_parent->d_inode != sb->s_root->d_inode)
2776                printk(KERN_WARNING
2777                        "EXT3-fs: Quota file not on filesystem root. "
2778                        "Journalled quota will not work.\n");
2779        path_put(&nd.path);
2780        return vfs_quota_on(sb, type, format_id, path, remount);
2781}
2782
2783/* Read data from quotafile - avoid pagecache and such because we cannot afford
2784 * acquiring the locks... As quota files are never truncated and quota code
2785 * itself serializes the operations (and noone else should touch the files)
2786 * we don't have to be afraid of races */
2787static ssize_t ext3_quota_read(struct super_block *sb, int type, char *data,
2788                               size_t len, loff_t off)
2789{
2790        struct inode *inode = sb_dqopt(sb)->files[type];
2791        sector_t blk = off >> EXT3_BLOCK_SIZE_BITS(sb);
2792        int err = 0;
2793        int offset = off & (sb->s_blocksize - 1);
2794        int tocopy;
2795        size_t toread;
2796        struct buffer_head *bh;
2797        loff_t i_size = i_size_read(inode);
2798
2799        if (off > i_size)
2800                return 0;
2801        if (off+len > i_size)
2802                len = i_size-off;
2803        toread = len;
2804        while (toread > 0) {
2805                tocopy = sb->s_blocksize - offset < toread ?
2806                                sb->s_blocksize - offset : toread;
2807                bh = ext3_bread(NULL, inode, blk, 0, &err);
2808                if (err)
2809                        return err;
2810                if (!bh)        /* A hole? */
2811                        memset(data, 0, tocopy);
2812                else
2813                        memcpy(data, bh->b_data+offset, tocopy);
2814                brelse(bh);
2815                offset = 0;
2816                toread -= tocopy;
2817                data += tocopy;
2818                blk++;
2819        }
2820        return len;
2821}
2822
2823/* Write to quotafile (we know the transaction is already started and has
2824 * enough credits) */
2825static ssize_t ext3_quota_write(struct super_block *sb, int type,
2826                                const char *data, size_t len, loff_t off)
2827{
2828        struct inode *inode = sb_dqopt(sb)->files[type];
2829        sector_t blk = off >> EXT3_BLOCK_SIZE_BITS(sb);
2830        int err = 0;
2831        int offset = off & (sb->s_blocksize - 1);
2832        int tocopy;
2833        int journal_quota = EXT3_SB(sb)->s_qf_names[type] != NULL;
2834        size_t towrite = len;
2835        struct buffer_head *bh;
2836        handle_t *handle = journal_current_handle();
2837
2838        if (!handle) {
2839                printk(KERN_WARNING "EXT3-fs: Quota write (off=%Lu, len=%Lu)"
2840                        " cancelled because transaction is not started.\n",
2841                        (unsigned long long)off, (unsigned long long)len);
2842                return -EIO;
2843        }
2844        mutex_lock_nested(&inode->i_mutex, I_MUTEX_QUOTA);
2845        while (towrite > 0) {
2846                tocopy = sb->s_blocksize - offset < towrite ?
2847                                sb->s_blocksize - offset : towrite;
2848                bh = ext3_bread(handle, inode, blk, 1, &err);
2849                if (!bh)
2850                        goto out;
2851                if (journal_quota) {
2852                        err = ext3_journal_get_write_access(handle, bh);
2853                        if (err) {
2854                                brelse(bh);
2855                                goto out;
2856                        }
2857                }
2858                lock_buffer(bh);
2859                memcpy(bh->b_data+offset, data, tocopy);
2860                flush_dcache_page(bh->b_page);
2861                unlock_buffer(bh);
2862                if (journal_quota)
2863                        err = ext3_journal_dirty_metadata(handle, bh);
2864                else {
2865                        /* Always do at least ordered writes for quotas */
2866                        err = ext3_journal_dirty_data(handle, bh);
2867                        mark_buffer_dirty(bh);
2868                }
2869                brelse(bh);
2870                if (err)
2871                        goto out;
2872                offset = 0;
2873                towrite -= tocopy;
2874                data += tocopy;
2875                blk++;
2876        }
2877out:
2878        if (len == towrite) {
2879                mutex_unlock(&inode->i_mutex);
2880                return err;
2881        }
2882        if (inode->i_size < off+len-towrite) {
2883                i_size_write(inode, off+len-towrite);
2884                EXT3_I(inode)->i_disksize = inode->i_size;
2885        }
2886        inode->i_version++;
2887        inode->i_mtime = inode->i_ctime = CURRENT_TIME;
2888        ext3_mark_inode_dirty(handle, inode);
2889        mutex_unlock(&inode->i_mutex);
2890        return len - towrite;
2891}
2892
2893#endif
2894
2895static int ext3_get_sb(struct file_system_type *fs_type,
2896        int flags, const char *dev_name, void *data, struct vfsmount *mnt)
2897{
2898        return get_sb_bdev(fs_type, flags, dev_name, data, ext3_fill_super, mnt);
2899}
2900
2901static struct file_system_type ext3_fs_type = {
2902        .owner          = THIS_MODULE,
2903        .name           = "ext3",
2904        .get_sb         = ext3_get_sb,
2905        .kill_sb        = kill_block_super,
2906        .fs_flags       = FS_REQUIRES_DEV,
2907};
2908
2909static int __init init_ext3_fs(void)
2910{
2911        int err = init_ext3_xattr();
2912        if (err)
2913                return err;
2914        err = init_inodecache();
2915        if (err)
2916                goto out1;
2917        err = register_filesystem(&ext3_fs_type);
2918        if (err)
2919                goto out;
2920        return 0;
2921out:
2922        destroy_inodecache();
2923out1:
2924        exit_ext3_xattr();
2925        return err;
2926}
2927
2928static void __exit exit_ext3_fs(void)
2929{
2930        unregister_filesystem(&ext3_fs_type);
2931        destroy_inodecache();
2932        exit_ext3_xattr();
2933}
2934
2935MODULE_AUTHOR("Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore Ts'o and others");
2936MODULE_DESCRIPTION("Second Extended Filesystem with journaling extensions");
2937MODULE_LICENSE("GPL");
2938module_init(init_ext3_fs)
2939module_exit(exit_ext3_fs)
2940
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.