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