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