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