OpenCores
URL https://opencores.org/ocsvn/test_project/test_project/trunk

Subversion Repositories test_project

[/] [test_project/] [trunk/] [linux_sd_driver/] [fs/] [ext3/] [super.c] - Blame information for rev 78

Go to most recent revision | Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.