1/*
2 *  linux/fs/ext2/super.c
3 *
4 * Copyright (C) 1992, 1993, 1994, 1995
5 * Remy Card (card@masi.ibp.fr)
6 * Laboratoire MASI - Institut Blaise Pascal
7 * Universite Pierre et Marie Curie (Paris VI)
8 *
9 *  from
10 *
11 *  linux/fs/minix/inode.c
12 *
13 *  Copyright (C) 1991, 1992  Linus Torvalds
14 *
15 *  Big-endian to little-endian byte-swapping/bitmaps by
16 *        David S. Miller (davem@caip.rutgers.edu), 1995
17 */
18
19#include <linux/module.h>
20#include <linux/string.h>
21#include <linux/fs.h>
22#include <linux/slab.h>
23#include <linux/init.h>
24#include <linux/blkdev.h>
25#include <linux/parser.h>
26#include <linux/random.h>
27#include <linux/buffer_head.h>
28#include <linux/exportfs.h>
29#include <linux/vfs.h>
30#include <linux/seq_file.h>
31#include <linux/mount.h>
32#include <linux/log2.h>
33#include <linux/quotaops.h>
34#include <asm/uaccess.h>
35#include "ext2.h"
36#include "xattr.h"
37#include "acl.h"
38
39static void ext2_sync_super(struct super_block *sb,
40			    struct ext2_super_block *es, int wait);
41static int ext2_remount (struct super_block * sb, int * flags, char * data);
42static int ext2_statfs (struct dentry * dentry, struct kstatfs * buf);
43static int ext2_sync_fs(struct super_block *sb, int wait);
44static int ext2_freeze(struct super_block *sb);
45static int ext2_unfreeze(struct super_block *sb);
46
47void ext2_error(struct super_block *sb, const char *function,
48		const char *fmt, ...)
49{
50	struct va_format vaf;
51	va_list args;
52	struct ext2_sb_info *sbi = EXT2_SB(sb);
53	struct ext2_super_block *es = sbi->s_es;
54
55	if (!(sb->s_flags & MS_RDONLY)) {
56		spin_lock(&sbi->s_lock);
57		sbi->s_mount_state |= EXT2_ERROR_FS;
58		es->s_state |= cpu_to_le16(EXT2_ERROR_FS);
59		spin_unlock(&sbi->s_lock);
60		ext2_sync_super(sb, es, 1);
61	}
62
63	va_start(args, fmt);
64
65	vaf.fmt = fmt;
66	vaf.va = &args;
67
68	printk(KERN_CRIT "EXT2-fs (%s): error: %s: %pV\n",
69	       sb->s_id, function, &vaf);
70
71	va_end(args);
72
73	if (test_opt(sb, ERRORS_PANIC))
74		panic("EXT2-fs: panic from previous error\n");
75	if (test_opt(sb, ERRORS_RO)) {
76		ext2_msg(sb, KERN_CRIT,
77			     "error: remounting filesystem read-only");
78		sb->s_flags |= MS_RDONLY;
79	}
80}
81
82void ext2_msg(struct super_block *sb, const char *prefix,
83		const char *fmt, ...)
84{
85	struct va_format vaf;
86	va_list args;
87
88	va_start(args, fmt);
89
90	vaf.fmt = fmt;
91	vaf.va = &args;
92
93	printk("%sEXT2-fs (%s): %pV\n", prefix, sb->s_id, &vaf);
94
95	va_end(args);
96}
97
98/*
99 * This must be called with sbi->s_lock held.
100 */
101void ext2_update_dynamic_rev(struct super_block *sb)
102{
103	struct ext2_super_block *es = EXT2_SB(sb)->s_es;
104
105	if (le32_to_cpu(es->s_rev_level) > EXT2_GOOD_OLD_REV)
106		return;
107
108	ext2_msg(sb, KERN_WARNING,
109		     "warning: updating to rev %d because of "
110		     "new feature flag, running e2fsck is recommended",
111		     EXT2_DYNAMIC_REV);
112
113	es->s_first_ino = cpu_to_le32(EXT2_GOOD_OLD_FIRST_INO);
114	es->s_inode_size = cpu_to_le16(EXT2_GOOD_OLD_INODE_SIZE);
115	es->s_rev_level = cpu_to_le32(EXT2_DYNAMIC_REV);
116	/* leave es->s_feature_*compat flags alone */
117	/* es->s_uuid will be set by e2fsck if empty */
118
119	/*
120	 * The rest of the superblock fields should be zero, and if not it
121	 * means they are likely already in use, so leave them alone.  We
122	 * can leave it up to e2fsck to clean up any inconsistencies there.
123	 */
124}
125
126static void ext2_put_super (struct super_block * sb)
127{
128	int db_count;
129	int i;
130	struct ext2_sb_info *sbi = EXT2_SB(sb);
131
132	dquot_disable(sb, -1, DQUOT_USAGE_ENABLED | DQUOT_LIMITS_ENABLED);
133
134	ext2_xattr_put_super(sb);
135	if (!(sb->s_flags & MS_RDONLY)) {
136		struct ext2_super_block *es = sbi->s_es;
137
138		spin_lock(&sbi->s_lock);
139		es->s_state = cpu_to_le16(sbi->s_mount_state);
140		spin_unlock(&sbi->s_lock);
141		ext2_sync_super(sb, es, 1);
142	}
143	db_count = sbi->s_gdb_count;
144	for (i = 0; i < db_count; i++)
145		if (sbi->s_group_desc[i])
146			brelse (sbi->s_group_desc[i]);
147	kfree(sbi->s_group_desc);
148	kfree(sbi->s_debts);
149	percpu_counter_destroy(&sbi->s_freeblocks_counter);
150	percpu_counter_destroy(&sbi->s_freeinodes_counter);
151	percpu_counter_destroy(&sbi->s_dirs_counter);
152	brelse (sbi->s_sbh);
153	sb->s_fs_info = NULL;
154	kfree(sbi->s_blockgroup_lock);
155	kfree(sbi);
156}
157
158static struct kmem_cache * ext2_inode_cachep;
159
160static struct inode *ext2_alloc_inode(struct super_block *sb)
161{
162	struct ext2_inode_info *ei;
163	ei = kmem_cache_alloc(ext2_inode_cachep, GFP_KERNEL);
164	if (!ei)
165		return NULL;
166	ei->i_block_alloc_info = NULL;
167	ei->vfs_inode.i_version = 1;
168#ifdef CONFIG_QUOTA
169	memset(&ei->i_dquot, 0, sizeof(ei->i_dquot));
170#endif
171
172	return &ei->vfs_inode;
173}
174
175static void ext2_i_callback(struct rcu_head *head)
176{
177	struct inode *inode = container_of(head, struct inode, i_rcu);
178	kmem_cache_free(ext2_inode_cachep, EXT2_I(inode));
179}
180
181static void ext2_destroy_inode(struct inode *inode)
182{
183	call_rcu(&inode->i_rcu, ext2_i_callback);
184}
185
186static void init_once(void *foo)
187{
188	struct ext2_inode_info *ei = (struct ext2_inode_info *) foo;
189
190	rwlock_init(&ei->i_meta_lock);
191#ifdef CONFIG_EXT2_FS_XATTR
192	init_rwsem(&ei->xattr_sem);
193#endif
194	mutex_init(&ei->truncate_mutex);
195	inode_init_once(&ei->vfs_inode);
196}
197
198static int __init init_inodecache(void)
199{
200	ext2_inode_cachep = kmem_cache_create("ext2_inode_cache",
201					     sizeof(struct ext2_inode_info),
202					     0, (SLAB_RECLAIM_ACCOUNT|
203						SLAB_MEM_SPREAD),
204					     init_once);
205	if (ext2_inode_cachep == NULL)
206		return -ENOMEM;
207	return 0;
208}
209
210static void destroy_inodecache(void)
211{
212	/*
213	 * Make sure all delayed rcu free inodes are flushed before we
214	 * destroy cache.
215	 */
216	rcu_barrier();
217	kmem_cache_destroy(ext2_inode_cachep);
218}
219
220static int ext2_show_options(struct seq_file *seq, struct dentry *root)
221{
222	struct super_block *sb = root->d_sb;
223	struct ext2_sb_info *sbi = EXT2_SB(sb);
224	struct ext2_super_block *es = sbi->s_es;
225	unsigned long def_mount_opts;
226
227	spin_lock(&sbi->s_lock);
228	def_mount_opts = le32_to_cpu(es->s_default_mount_opts);
229
230	if (sbi->s_sb_block != 1)
231		seq_printf(seq, ",sb=%lu", sbi->s_sb_block);
232	if (test_opt(sb, MINIX_DF))
233		seq_puts(seq, ",minixdf");
234	if (test_opt(sb, GRPID))
235		seq_puts(seq, ",grpid");
236	if (!test_opt(sb, GRPID) && (def_mount_opts & EXT2_DEFM_BSDGROUPS))
237		seq_puts(seq, ",nogrpid");
238	if (!uid_eq(sbi->s_resuid, make_kuid(&init_user_ns, EXT2_DEF_RESUID)) ||
239	    le16_to_cpu(es->s_def_resuid) != EXT2_DEF_RESUID) {
240		seq_printf(seq, ",resuid=%u",
241				from_kuid_munged(&init_user_ns, sbi->s_resuid));
242	}
243	if (!gid_eq(sbi->s_resgid, make_kgid(&init_user_ns, EXT2_DEF_RESGID)) ||
244	    le16_to_cpu(es->s_def_resgid) != EXT2_DEF_RESGID) {
245		seq_printf(seq, ",resgid=%u",
246				from_kgid_munged(&init_user_ns, sbi->s_resgid));
247	}
248	if (test_opt(sb, ERRORS_RO)) {
249		int def_errors = le16_to_cpu(es->s_errors);
250
251		if (def_errors == EXT2_ERRORS_PANIC ||
252		    def_errors == EXT2_ERRORS_CONTINUE) {
253			seq_puts(seq, ",errors=remount-ro");
254		}
255	}
256	if (test_opt(sb, ERRORS_CONT))
257		seq_puts(seq, ",errors=continue");
258	if (test_opt(sb, ERRORS_PANIC))
259		seq_puts(seq, ",errors=panic");
260	if (test_opt(sb, NO_UID32))
261		seq_puts(seq, ",nouid32");
262	if (test_opt(sb, DEBUG))
263		seq_puts(seq, ",debug");
264	if (test_opt(sb, OLDALLOC))
265		seq_puts(seq, ",oldalloc");
266
267#ifdef CONFIG_EXT2_FS_XATTR
268	if (test_opt(sb, XATTR_USER))
269		seq_puts(seq, ",user_xattr");
270	if (!test_opt(sb, XATTR_USER) &&
271	    (def_mount_opts & EXT2_DEFM_XATTR_USER)) {
272		seq_puts(seq, ",nouser_xattr");
273	}
274#endif
275
276#ifdef CONFIG_EXT2_FS_POSIX_ACL
277	if (test_opt(sb, POSIX_ACL))
278		seq_puts(seq, ",acl");
279	if (!test_opt(sb, POSIX_ACL) && (def_mount_opts & EXT2_DEFM_ACL))
280		seq_puts(seq, ",noacl");
281#endif
282
283	if (test_opt(sb, NOBH))
284		seq_puts(seq, ",nobh");
285
286#if defined(CONFIG_QUOTA)
287	if (sbi->s_mount_opt & EXT2_MOUNT_USRQUOTA)
288		seq_puts(seq, ",usrquota");
289
290	if (sbi->s_mount_opt & EXT2_MOUNT_GRPQUOTA)
291		seq_puts(seq, ",grpquota");
292#endif
293
294#ifdef CONFIG_FS_DAX
295	if (sbi->s_mount_opt & EXT2_MOUNT_XIP)
296		seq_puts(seq, ",xip");
297	if (sbi->s_mount_opt & EXT2_MOUNT_DAX)
298		seq_puts(seq, ",dax");
299#endif
300
301	if (!test_opt(sb, RESERVATION))
302		seq_puts(seq, ",noreservation");
303
304	spin_unlock(&sbi->s_lock);
305	return 0;
306}
307
308#ifdef CONFIG_QUOTA
309static ssize_t ext2_quota_read(struct super_block *sb, int type, char *data, size_t len, loff_t off);
310static ssize_t ext2_quota_write(struct super_block *sb, int type, const char *data, size_t len, loff_t off);
311static struct dquot **ext2_get_dquots(struct inode *inode)
312{
313	return EXT2_I(inode)->i_dquot;
314}
315#endif
316
317static const struct super_operations ext2_sops = {
318	.alloc_inode	= ext2_alloc_inode,
319	.destroy_inode	= ext2_destroy_inode,
320	.write_inode	= ext2_write_inode,
321	.evict_inode	= ext2_evict_inode,
322	.put_super	= ext2_put_super,
323	.sync_fs	= ext2_sync_fs,
324	.freeze_fs	= ext2_freeze,
325	.unfreeze_fs	= ext2_unfreeze,
326	.statfs		= ext2_statfs,
327	.remount_fs	= ext2_remount,
328	.show_options	= ext2_show_options,
329#ifdef CONFIG_QUOTA
330	.quota_read	= ext2_quota_read,
331	.quota_write	= ext2_quota_write,
332	.get_dquots	= ext2_get_dquots,
333#endif
334};
335
336static struct inode *ext2_nfs_get_inode(struct super_block *sb,
337		u64 ino, u32 generation)
338{
339	struct inode *inode;
340
341	if (ino < EXT2_FIRST_INO(sb) && ino != EXT2_ROOT_INO)
342		return ERR_PTR(-ESTALE);
343	if (ino > le32_to_cpu(EXT2_SB(sb)->s_es->s_inodes_count))
344		return ERR_PTR(-ESTALE);
345
346	/*
347	 * ext2_iget isn't quite right if the inode is currently unallocated!
348	 * However ext2_iget currently does appropriate checks to handle stale
349	 * inodes so everything is OK.
350	 */
351	inode = ext2_iget(sb, ino);
352	if (IS_ERR(inode))
353		return ERR_CAST(inode);
354	if (generation && inode->i_generation != generation) {
355		/* we didn't find the right inode.. */
356		iput(inode);
357		return ERR_PTR(-ESTALE);
358	}
359	return inode;
360}
361
362static struct dentry *ext2_fh_to_dentry(struct super_block *sb, struct fid *fid,
363		int fh_len, int fh_type)
364{
365	return generic_fh_to_dentry(sb, fid, fh_len, fh_type,
366				    ext2_nfs_get_inode);
367}
368
369static struct dentry *ext2_fh_to_parent(struct super_block *sb, struct fid *fid,
370		int fh_len, int fh_type)
371{
372	return generic_fh_to_parent(sb, fid, fh_len, fh_type,
373				    ext2_nfs_get_inode);
374}
375
376static const struct export_operations ext2_export_ops = {
377	.fh_to_dentry = ext2_fh_to_dentry,
378	.fh_to_parent = ext2_fh_to_parent,
379	.get_parent = ext2_get_parent,
380};
381
382static unsigned long get_sb_block(void **data)
383{
384	unsigned long 	sb_block;
385	char 		*options = (char *) *data;
386
387	if (!options || strncmp(options, "sb=", 3) != 0)
388		return 1;	/* Default location */
389	options += 3;
390	sb_block = simple_strtoul(options, &options, 0);
391	if (*options && *options != ',') {
392		printk("EXT2-fs: Invalid sb specification: %s\n",
393		       (char *) *data);
394		return 1;
395	}
396	if (*options == ',')
397		options++;
398	*data = (void *) options;
399	return sb_block;
400}
401
402enum {
403	Opt_bsd_df, Opt_minix_df, Opt_grpid, Opt_nogrpid,
404	Opt_resgid, Opt_resuid, Opt_sb, Opt_err_cont, Opt_err_panic,
405	Opt_err_ro, Opt_nouid32, Opt_nocheck, Opt_debug,
406	Opt_oldalloc, Opt_orlov, Opt_nobh, Opt_user_xattr, Opt_nouser_xattr,
407	Opt_acl, Opt_noacl, Opt_xip, Opt_dax, Opt_ignore, Opt_err, Opt_quota,
408	Opt_usrquota, Opt_grpquota, Opt_reservation, Opt_noreservation
409};
410
411static const match_table_t tokens = {
412	{Opt_bsd_df, "bsddf"},
413	{Opt_minix_df, "minixdf"},
414	{Opt_grpid, "grpid"},
415	{Opt_grpid, "bsdgroups"},
416	{Opt_nogrpid, "nogrpid"},
417	{Opt_nogrpid, "sysvgroups"},
418	{Opt_resgid, "resgid=%u"},
419	{Opt_resuid, "resuid=%u"},
420	{Opt_sb, "sb=%u"},
421	{Opt_err_cont, "errors=continue"},
422	{Opt_err_panic, "errors=panic"},
423	{Opt_err_ro, "errors=remount-ro"},
424	{Opt_nouid32, "nouid32"},
425	{Opt_nocheck, "check=none"},
426	{Opt_nocheck, "nocheck"},
427	{Opt_debug, "debug"},
428	{Opt_oldalloc, "oldalloc"},
429	{Opt_orlov, "orlov"},
430	{Opt_nobh, "nobh"},
431	{Opt_user_xattr, "user_xattr"},
432	{Opt_nouser_xattr, "nouser_xattr"},
433	{Opt_acl, "acl"},
434	{Opt_noacl, "noacl"},
435	{Opt_xip, "xip"},
436	{Opt_dax, "dax"},
437	{Opt_grpquota, "grpquota"},
438	{Opt_ignore, "noquota"},
439	{Opt_quota, "quota"},
440	{Opt_usrquota, "usrquota"},
441	{Opt_reservation, "reservation"},
442	{Opt_noreservation, "noreservation"},
443	{Opt_err, NULL}
444};
445
446static int parse_options(char *options, struct super_block *sb)
447{
448	char *p;
449	struct ext2_sb_info *sbi = EXT2_SB(sb);
450	substring_t args[MAX_OPT_ARGS];
451	int option;
452	kuid_t uid;
453	kgid_t gid;
454
455	if (!options)
456		return 1;
457
458	while ((p = strsep (&options, ",")) != NULL) {
459		int token;
460		if (!*p)
461			continue;
462
463		token = match_token(p, tokens, args);
464		switch (token) {
465		case Opt_bsd_df:
466			clear_opt (sbi->s_mount_opt, MINIX_DF);
467			break;
468		case Opt_minix_df:
469			set_opt (sbi->s_mount_opt, MINIX_DF);
470			break;
471		case Opt_grpid:
472			set_opt (sbi->s_mount_opt, GRPID);
473			break;
474		case Opt_nogrpid:
475			clear_opt (sbi->s_mount_opt, GRPID);
476			break;
477		case Opt_resuid:
478			if (match_int(&args[0], &option))
479				return 0;
480			uid = make_kuid(current_user_ns(), option);
481			if (!uid_valid(uid)) {
482				ext2_msg(sb, KERN_ERR, "Invalid uid value %d", option);
483				return 0;
484
485			}
486			sbi->s_resuid = uid;
487			break;
488		case Opt_resgid:
489			if (match_int(&args[0], &option))
490				return 0;
491			gid = make_kgid(current_user_ns(), option);
492			if (!gid_valid(gid)) {
493				ext2_msg(sb, KERN_ERR, "Invalid gid value %d", option);
494				return 0;
495			}
496			sbi->s_resgid = gid;
497			break;
498		case Opt_sb:
499			/* handled by get_sb_block() instead of here */
500			/* *sb_block = match_int(&args[0]); */
501			break;
502		case Opt_err_panic:
503			clear_opt (sbi->s_mount_opt, ERRORS_CONT);
504			clear_opt (sbi->s_mount_opt, ERRORS_RO);
505			set_opt (sbi->s_mount_opt, ERRORS_PANIC);
506			break;
507		case Opt_err_ro:
508			clear_opt (sbi->s_mount_opt, ERRORS_CONT);
509			clear_opt (sbi->s_mount_opt, ERRORS_PANIC);
510			set_opt (sbi->s_mount_opt, ERRORS_RO);
511			break;
512		case Opt_err_cont:
513			clear_opt (sbi->s_mount_opt, ERRORS_RO);
514			clear_opt (sbi->s_mount_opt, ERRORS_PANIC);
515			set_opt (sbi->s_mount_opt, ERRORS_CONT);
516			break;
517		case Opt_nouid32:
518			set_opt (sbi->s_mount_opt, NO_UID32);
519			break;
520		case Opt_nocheck:
521			clear_opt (sbi->s_mount_opt, CHECK);
522			break;
523		case Opt_debug:
524			set_opt (sbi->s_mount_opt, DEBUG);
525			break;
526		case Opt_oldalloc:
527			set_opt (sbi->s_mount_opt, OLDALLOC);
528			break;
529		case Opt_orlov:
530			clear_opt (sbi->s_mount_opt, OLDALLOC);
531			break;
532		case Opt_nobh:
533			set_opt (sbi->s_mount_opt, NOBH);
534			break;
535#ifdef CONFIG_EXT2_FS_XATTR
536		case Opt_user_xattr:
537			set_opt (sbi->s_mount_opt, XATTR_USER);
538			break;
539		case Opt_nouser_xattr:
540			clear_opt (sbi->s_mount_opt, XATTR_USER);
541			break;
542#else
543		case Opt_user_xattr:
544		case Opt_nouser_xattr:
545			ext2_msg(sb, KERN_INFO, "(no)user_xattr options"
546				"not supported");
547			break;
548#endif
549#ifdef CONFIG_EXT2_FS_POSIX_ACL
550		case Opt_acl:
551			set_opt(sbi->s_mount_opt, POSIX_ACL);
552			break;
553		case Opt_noacl:
554			clear_opt(sbi->s_mount_opt, POSIX_ACL);
555			break;
556#else
557		case Opt_acl:
558		case Opt_noacl:
559			ext2_msg(sb, KERN_INFO,
560				"(no)acl options not supported");
561			break;
562#endif
563		case Opt_xip:
564			ext2_msg(sb, KERN_INFO, "use dax instead of xip");
565			set_opt(sbi->s_mount_opt, XIP);
566			/* Fall through */
567		case Opt_dax:
568#ifdef CONFIG_FS_DAX
569			set_opt(sbi->s_mount_opt, DAX);
570#else
571			ext2_msg(sb, KERN_INFO, "dax option not supported");
572#endif
573			break;
574
575#if defined(CONFIG_QUOTA)
576		case Opt_quota:
577		case Opt_usrquota:
578			set_opt(sbi->s_mount_opt, USRQUOTA);
579			break;
580
581		case Opt_grpquota:
582			set_opt(sbi->s_mount_opt, GRPQUOTA);
583			break;
584#else
585		case Opt_quota:
586		case Opt_usrquota:
587		case Opt_grpquota:
588			ext2_msg(sb, KERN_INFO,
589				"quota operations not supported");
590			break;
591#endif
592
593		case Opt_reservation:
594			set_opt(sbi->s_mount_opt, RESERVATION);
595			ext2_msg(sb, KERN_INFO, "reservations ON");
596			break;
597		case Opt_noreservation:
598			clear_opt(sbi->s_mount_opt, RESERVATION);
599			ext2_msg(sb, KERN_INFO, "reservations OFF");
600			break;
601		case Opt_ignore:
602			break;
603		default:
604			return 0;
605		}
606	}
607	return 1;
608}
609
610static int ext2_setup_super (struct super_block * sb,
611			      struct ext2_super_block * es,
612			      int read_only)
613{
614	int res = 0;
615	struct ext2_sb_info *sbi = EXT2_SB(sb);
616
617	if (le32_to_cpu(es->s_rev_level) > EXT2_MAX_SUPP_REV) {
618		ext2_msg(sb, KERN_ERR,
619			"error: revision level too high, "
620			"forcing read-only mode");
621		res = MS_RDONLY;
622	}
623	if (read_only)
624		return res;
625	if (!(sbi->s_mount_state & EXT2_VALID_FS))
626		ext2_msg(sb, KERN_WARNING,
627			"warning: mounting unchecked fs, "
628			"running e2fsck is recommended");
629	else if ((sbi->s_mount_state & EXT2_ERROR_FS))
630		ext2_msg(sb, KERN_WARNING,
631			"warning: mounting fs with errors, "
632			"running e2fsck is recommended");
633	else if ((__s16) le16_to_cpu(es->s_max_mnt_count) >= 0 &&
634		 le16_to_cpu(es->s_mnt_count) >=
635		 (unsigned short) (__s16) le16_to_cpu(es->s_max_mnt_count))
636		ext2_msg(sb, KERN_WARNING,
637			"warning: maximal mount count reached, "
638			"running e2fsck is recommended");
639	else if (le32_to_cpu(es->s_checkinterval) &&
640		(le32_to_cpu(es->s_lastcheck) +
641			le32_to_cpu(es->s_checkinterval) <= get_seconds()))
642		ext2_msg(sb, KERN_WARNING,
643			"warning: checktime reached, "
644			"running e2fsck is recommended");
645	if (!le16_to_cpu(es->s_max_mnt_count))
646		es->s_max_mnt_count = cpu_to_le16(EXT2_DFL_MAX_MNT_COUNT);
647	le16_add_cpu(&es->s_mnt_count, 1);
648	if (test_opt (sb, DEBUG))
649		ext2_msg(sb, KERN_INFO, "%s, %s, bs=%lu, fs=%lu, gc=%lu, "
650			"bpg=%lu, ipg=%lu, mo=%04lx]",
651			EXT2FS_VERSION, EXT2FS_DATE, sb->s_blocksize,
652			sbi->s_frag_size,
653			sbi->s_groups_count,
654			EXT2_BLOCKS_PER_GROUP(sb),
655			EXT2_INODES_PER_GROUP(sb),
656			sbi->s_mount_opt);
657	return res;
658}
659
660static int ext2_check_descriptors(struct super_block *sb)
661{
662	int i;
663	struct ext2_sb_info *sbi = EXT2_SB(sb);
664
665	ext2_debug ("Checking group descriptors");
666
667	for (i = 0; i < sbi->s_groups_count; i++) {
668		struct ext2_group_desc *gdp = ext2_get_group_desc(sb, i, NULL);
669		ext2_fsblk_t first_block = ext2_group_first_block_no(sb, i);
670		ext2_fsblk_t last_block;
671
672		if (i == sbi->s_groups_count - 1)
673			last_block = le32_to_cpu(sbi->s_es->s_blocks_count) - 1;
674		else
675			last_block = first_block +
676				(EXT2_BLOCKS_PER_GROUP(sb) - 1);
677
678		if (le32_to_cpu(gdp->bg_block_bitmap) < first_block ||
679		    le32_to_cpu(gdp->bg_block_bitmap) > last_block)
680		{
681			ext2_error (sb, "ext2_check_descriptors",
682				    "Block bitmap for group %d"
683				    " not in group (block %lu)!",
684				    i, (unsigned long) le32_to_cpu(gdp->bg_block_bitmap));
685			return 0;
686		}
687		if (le32_to_cpu(gdp->bg_inode_bitmap) < first_block ||
688		    le32_to_cpu(gdp->bg_inode_bitmap) > last_block)
689		{
690			ext2_error (sb, "ext2_check_descriptors",
691				    "Inode bitmap for group %d"
692				    " not in group (block %lu)!",
693				    i, (unsigned long) le32_to_cpu(gdp->bg_inode_bitmap));
694			return 0;
695		}
696		if (le32_to_cpu(gdp->bg_inode_table) < first_block ||
697		    le32_to_cpu(gdp->bg_inode_table) + sbi->s_itb_per_group - 1 >
698		    last_block)
699		{
700			ext2_error (sb, "ext2_check_descriptors",
701				    "Inode table for group %d"
702				    " not in group (block %lu)!",
703				    i, (unsigned long) le32_to_cpu(gdp->bg_inode_table));
704			return 0;
705		}
706	}
707	return 1;
708}
709
710/*
711 * Maximal file size.  There is a direct, and {,double-,triple-}indirect
712 * block limit, and also a limit of (2^32 - 1) 512-byte sectors in i_blocks.
713 * We need to be 1 filesystem block less than the 2^32 sector limit.
714 */
715static loff_t ext2_max_size(int bits)
716{
717	loff_t res = EXT2_NDIR_BLOCKS;
718	int meta_blocks;
719	loff_t upper_limit;
720
721	/* This is calculated to be the largest file size for a
722	 * dense, file such that the total number of
723	 * sectors in the file, including data and all indirect blocks,
724	 * does not exceed 2^32 -1
725	 * __u32 i_blocks representing the total number of
726	 * 512 bytes blocks of the file
727	 */
728	upper_limit = (1LL << 32) - 1;
729
730	/* total blocks in file system block size */
731	upper_limit >>= (bits - 9);
732
733
734	/* indirect blocks */
735	meta_blocks = 1;
736	/* double indirect blocks */
737	meta_blocks += 1 + (1LL << (bits-2));
738	/* tripple indirect blocks */
739	meta_blocks += 1 + (1LL << (bits-2)) + (1LL << (2*(bits-2)));
740
741	upper_limit -= meta_blocks;
742	upper_limit <<= bits;
743
744	res += 1LL << (bits-2);
745	res += 1LL << (2*(bits-2));
746	res += 1LL << (3*(bits-2));
747	res <<= bits;
748	if (res > upper_limit)
749		res = upper_limit;
750
751	if (res > MAX_LFS_FILESIZE)
752		res = MAX_LFS_FILESIZE;
753
754	return res;
755}
756
757static unsigned long descriptor_loc(struct super_block *sb,
758				    unsigned long logic_sb_block,
759				    int nr)
760{
761	struct ext2_sb_info *sbi = EXT2_SB(sb);
762	unsigned long bg, first_meta_bg;
763	int has_super = 0;
764
765	first_meta_bg = le32_to_cpu(sbi->s_es->s_first_meta_bg);
766
767	if (!EXT2_HAS_INCOMPAT_FEATURE(sb, EXT2_FEATURE_INCOMPAT_META_BG) ||
768	    nr < first_meta_bg)
769		return (logic_sb_block + nr + 1);
770	bg = sbi->s_desc_per_block * nr;
771	if (ext2_bg_has_super(sb, bg))
772		has_super = 1;
773
774	return ext2_group_first_block_no(sb, bg) + has_super;
775}
776
777static int ext2_fill_super(struct super_block *sb, void *data, int silent)
778{
779	struct buffer_head * bh;
780	struct ext2_sb_info * sbi;
781	struct ext2_super_block * es;
782	struct inode *root;
783	unsigned long block;
784	unsigned long sb_block = get_sb_block(&data);
785	unsigned long logic_sb_block;
786	unsigned long offset = 0;
787	unsigned long def_mount_opts;
788	long ret = -EINVAL;
789	int blocksize = BLOCK_SIZE;
790	int db_count;
791	int i, j;
792	__le32 features;
793	int err;
794
795	err = -ENOMEM;
796	sbi = kzalloc(sizeof(*sbi), GFP_KERNEL);
797	if (!sbi)
798		goto failed;
799
800	sbi->s_blockgroup_lock =
801		kzalloc(sizeof(struct blockgroup_lock), GFP_KERNEL);
802	if (!sbi->s_blockgroup_lock) {
803		kfree(sbi);
804		goto failed;
805	}
806	sb->s_fs_info = sbi;
807	sbi->s_sb_block = sb_block;
808
809	spin_lock_init(&sbi->s_lock);
810
811	/*
812	 * See what the current blocksize for the device is, and
813	 * use that as the blocksize.  Otherwise (or if the blocksize
814	 * is smaller than the default) use the default.
815	 * This is important for devices that have a hardware
816	 * sectorsize that is larger than the default.
817	 */
818	blocksize = sb_min_blocksize(sb, BLOCK_SIZE);
819	if (!blocksize) {
820		ext2_msg(sb, KERN_ERR, "error: unable to set blocksize");
821		goto failed_sbi;
822	}
823
824	/*
825	 * If the superblock doesn't start on a hardware sector boundary,
826	 * calculate the offset.
827	 */
828	if (blocksize != BLOCK_SIZE) {
829		logic_sb_block = (sb_block*BLOCK_SIZE) / blocksize;
830		offset = (sb_block*BLOCK_SIZE) % blocksize;
831	} else {
832		logic_sb_block = sb_block;
833	}
834
835	if (!(bh = sb_bread(sb, logic_sb_block))) {
836		ext2_msg(sb, KERN_ERR, "error: unable to read superblock");
837		goto failed_sbi;
838	}
839	/*
840	 * Note: s_es must be initialized as soon as possible because
841	 *       some ext2 macro-instructions depend on its value
842	 */
843	es = (struct ext2_super_block *) (((char *)bh->b_data) + offset);
844	sbi->s_es = es;
845	sb->s_magic = le16_to_cpu(es->s_magic);
846
847	if (sb->s_magic != EXT2_SUPER_MAGIC)
848		goto cantfind_ext2;
849
850	/* Set defaults before we parse the mount options */
851	def_mount_opts = le32_to_cpu(es->s_default_mount_opts);
852	if (def_mount_opts & EXT2_DEFM_DEBUG)
853		set_opt(sbi->s_mount_opt, DEBUG);
854	if (def_mount_opts & EXT2_DEFM_BSDGROUPS)
855		set_opt(sbi->s_mount_opt, GRPID);
856	if (def_mount_opts & EXT2_DEFM_UID16)
857		set_opt(sbi->s_mount_opt, NO_UID32);
858#ifdef CONFIG_EXT2_FS_XATTR
859	if (def_mount_opts & EXT2_DEFM_XATTR_USER)
860		set_opt(sbi->s_mount_opt, XATTR_USER);
861#endif
862#ifdef CONFIG_EXT2_FS_POSIX_ACL
863	if (def_mount_opts & EXT2_DEFM_ACL)
864		set_opt(sbi->s_mount_opt, POSIX_ACL);
865#endif
866
867	if (le16_to_cpu(sbi->s_es->s_errors) == EXT2_ERRORS_PANIC)
868		set_opt(sbi->s_mount_opt, ERRORS_PANIC);
869	else if (le16_to_cpu(sbi->s_es->s_errors) == EXT2_ERRORS_CONTINUE)
870		set_opt(sbi->s_mount_opt, ERRORS_CONT);
871	else
872		set_opt(sbi->s_mount_opt, ERRORS_RO);
873
874	sbi->s_resuid = make_kuid(&init_user_ns, le16_to_cpu(es->s_def_resuid));
875	sbi->s_resgid = make_kgid(&init_user_ns, le16_to_cpu(es->s_def_resgid));
876
877	set_opt(sbi->s_mount_opt, RESERVATION);
878
879	if (!parse_options((char *) data, sb))
880		goto failed_mount;
881
882	sb->s_flags = (sb->s_flags & ~MS_POSIXACL) |
883		((EXT2_SB(sb)->s_mount_opt & EXT2_MOUNT_POSIX_ACL) ?
884		 MS_POSIXACL : 0);
885
886	if (le32_to_cpu(es->s_rev_level) == EXT2_GOOD_OLD_REV &&
887	    (EXT2_HAS_COMPAT_FEATURE(sb, ~0U) ||
888	     EXT2_HAS_RO_COMPAT_FEATURE(sb, ~0U) ||
889	     EXT2_HAS_INCOMPAT_FEATURE(sb, ~0U)))
890		ext2_msg(sb, KERN_WARNING,
891			"warning: feature flags set on rev 0 fs, "
892			"running e2fsck is recommended");
893	/*
894	 * Check feature flags regardless of the revision level, since we
895	 * previously didn't change the revision level when setting the flags,
896	 * so there is a chance incompat flags are set on a rev 0 filesystem.
897	 */
898	features = EXT2_HAS_INCOMPAT_FEATURE(sb, ~EXT2_FEATURE_INCOMPAT_SUPP);
899	if (features) {
900		ext2_msg(sb, KERN_ERR,	"error: couldn't mount because of "
901		       "unsupported optional features (%x)",
902			le32_to_cpu(features));
903		goto failed_mount;
904	}
905	if (!(sb->s_flags & MS_RDONLY) &&
906	    (features = EXT2_HAS_RO_COMPAT_FEATURE(sb, ~EXT2_FEATURE_RO_COMPAT_SUPP))){
907		ext2_msg(sb, KERN_ERR, "error: couldn't mount RDWR because of "
908		       "unsupported optional features (%x)",
909		       le32_to_cpu(features));
910		goto failed_mount;
911	}
912
913	blocksize = BLOCK_SIZE << le32_to_cpu(sbi->s_es->s_log_block_size);
914
915	if (sbi->s_mount_opt & EXT2_MOUNT_DAX) {
916		if (blocksize != PAGE_SIZE) {
917			ext2_msg(sb, KERN_ERR,
918					"error: unsupported blocksize for dax");
919			goto failed_mount;
920		}
921		if (!sb->s_bdev->bd_disk->fops->direct_access) {
922			ext2_msg(sb, KERN_ERR,
923					"error: device does not support dax");
924			goto failed_mount;
925		}
926	}
927
928	/* If the blocksize doesn't match, re-read the thing.. */
929	if (sb->s_blocksize != blocksize) {
930		brelse(bh);
931
932		if (!sb_set_blocksize(sb, blocksize)) {
933			ext2_msg(sb, KERN_ERR,
934				"error: bad blocksize %d", blocksize);
935			goto failed_sbi;
936		}
937
938		logic_sb_block = (sb_block*BLOCK_SIZE) / blocksize;
939		offset = (sb_block*BLOCK_SIZE) % blocksize;
940		bh = sb_bread(sb, logic_sb_block);
941		if(!bh) {
942			ext2_msg(sb, KERN_ERR, "error: couldn't read"
943				"superblock on 2nd try");
944			goto failed_sbi;
945		}
946		es = (struct ext2_super_block *) (((char *)bh->b_data) + offset);
947		sbi->s_es = es;
948		if (es->s_magic != cpu_to_le16(EXT2_SUPER_MAGIC)) {
949			ext2_msg(sb, KERN_ERR, "error: magic mismatch");
950			goto failed_mount;
951		}
952	}
953
954	sb->s_maxbytes = ext2_max_size(sb->s_blocksize_bits);
955	sb->s_max_links = EXT2_LINK_MAX;
956
957	if (le32_to_cpu(es->s_rev_level) == EXT2_GOOD_OLD_REV) {
958		sbi->s_inode_size = EXT2_GOOD_OLD_INODE_SIZE;
959		sbi->s_first_ino = EXT2_GOOD_OLD_FIRST_INO;
960	} else {
961		sbi->s_inode_size = le16_to_cpu(es->s_inode_size);
962		sbi->s_first_ino = le32_to_cpu(es->s_first_ino);
963		if ((sbi->s_inode_size < EXT2_GOOD_OLD_INODE_SIZE) ||
964		    !is_power_of_2(sbi->s_inode_size) ||
965		    (sbi->s_inode_size > blocksize)) {
966			ext2_msg(sb, KERN_ERR,
967				"error: unsupported inode size: %d",
968				sbi->s_inode_size);
969			goto failed_mount;
970		}
971	}
972
973	sbi->s_frag_size = EXT2_MIN_FRAG_SIZE <<
974				   le32_to_cpu(es->s_log_frag_size);
975	if (sbi->s_frag_size == 0)
976		goto cantfind_ext2;
977	sbi->s_frags_per_block = sb->s_blocksize / sbi->s_frag_size;
978
979	sbi->s_blocks_per_group = le32_to_cpu(es->s_blocks_per_group);
980	sbi->s_frags_per_group = le32_to_cpu(es->s_frags_per_group);
981	sbi->s_inodes_per_group = le32_to_cpu(es->s_inodes_per_group);
982
983	if (EXT2_INODE_SIZE(sb) == 0)
984		goto cantfind_ext2;
985	sbi->s_inodes_per_block = sb->s_blocksize / EXT2_INODE_SIZE(sb);
986	if (sbi->s_inodes_per_block == 0 || sbi->s_inodes_per_group == 0)
987		goto cantfind_ext2;
988	sbi->s_itb_per_group = sbi->s_inodes_per_group /
989					sbi->s_inodes_per_block;
990	sbi->s_desc_per_block = sb->s_blocksize /
991					sizeof (struct ext2_group_desc);
992	sbi->s_sbh = bh;
993	sbi->s_mount_state = le16_to_cpu(es->s_state);
994	sbi->s_addr_per_block_bits =
995		ilog2 (EXT2_ADDR_PER_BLOCK(sb));
996	sbi->s_desc_per_block_bits =
997		ilog2 (EXT2_DESC_PER_BLOCK(sb));
998
999	if (sb->s_magic != EXT2_SUPER_MAGIC)
1000		goto cantfind_ext2;
1001
1002	if (sb->s_blocksize != bh->b_size) {
1003		if (!silent)
1004			ext2_msg(sb, KERN_ERR, "error: unsupported blocksize");
1005		goto failed_mount;
1006	}
1007
1008	if (sb->s_blocksize != sbi->s_frag_size) {
1009		ext2_msg(sb, KERN_ERR,
1010			"error: fragsize %lu != blocksize %lu"
1011			"(not supported yet)",
1012			sbi->s_frag_size, sb->s_blocksize);
1013		goto failed_mount;
1014	}
1015
1016	if (sbi->s_blocks_per_group > sb->s_blocksize * 8) {
1017		ext2_msg(sb, KERN_ERR,
1018			"error: #blocks per group too big: %lu",
1019			sbi->s_blocks_per_group);
1020		goto failed_mount;
1021	}
1022	if (sbi->s_frags_per_group > sb->s_blocksize * 8) {
1023		ext2_msg(sb, KERN_ERR,
1024			"error: #fragments per group too big: %lu",
1025			sbi->s_frags_per_group);
1026		goto failed_mount;
1027	}
1028	if (sbi->s_inodes_per_group > sb->s_blocksize * 8) {
1029		ext2_msg(sb, KERN_ERR,
1030			"error: #inodes per group too big: %lu",
1031			sbi->s_inodes_per_group);
1032		goto failed_mount;
1033	}
1034
1035	if (EXT2_BLOCKS_PER_GROUP(sb) == 0)
1036		goto cantfind_ext2;
1037 	sbi->s_groups_count = ((le32_to_cpu(es->s_blocks_count) -
1038 				le32_to_cpu(es->s_first_data_block) - 1)
1039 					/ EXT2_BLOCKS_PER_GROUP(sb)) + 1;
1040	db_count = (sbi->s_groups_count + EXT2_DESC_PER_BLOCK(sb) - 1) /
1041		   EXT2_DESC_PER_BLOCK(sb);
1042	sbi->s_group_desc = kmalloc (db_count * sizeof (struct buffer_head *), GFP_KERNEL);
1043	if (sbi->s_group_desc == NULL) {
1044		ext2_msg(sb, KERN_ERR, "error: not enough memory");
1045		goto failed_mount;
1046	}
1047	bgl_lock_init(sbi->s_blockgroup_lock);
1048	sbi->s_debts = kcalloc(sbi->s_groups_count, sizeof(*sbi->s_debts), GFP_KERNEL);
1049	if (!sbi->s_debts) {
1050		ext2_msg(sb, KERN_ERR, "error: not enough memory");
1051		goto failed_mount_group_desc;
1052	}
1053	for (i = 0; i < db_count; i++) {
1054		block = descriptor_loc(sb, logic_sb_block, i);
1055		sbi->s_group_desc[i] = sb_bread(sb, block);
1056		if (!sbi->s_group_desc[i]) {
1057			for (j = 0; j < i; j++)
1058				brelse (sbi->s_group_desc[j]);
1059			ext2_msg(sb, KERN_ERR,
1060				"error: unable to read group descriptors");
1061			goto failed_mount_group_desc;
1062		}
1063	}
1064	if (!ext2_check_descriptors (sb)) {
1065		ext2_msg(sb, KERN_ERR, "group descriptors corrupted");
1066		goto failed_mount2;
1067	}
1068	sbi->s_gdb_count = db_count;
1069	get_random_bytes(&sbi->s_next_generation, sizeof(u32));
1070	spin_lock_init(&sbi->s_next_gen_lock);
1071
1072	/* per fileystem reservation list head & lock */
1073	spin_lock_init(&sbi->s_rsv_window_lock);
1074	sbi->s_rsv_window_root = RB_ROOT;
1075	/*
1076	 * Add a single, static dummy reservation to the start of the
1077	 * reservation window list --- it gives us a placeholder for
1078	 * append-at-start-of-list which makes the allocation logic
1079	 * _much_ simpler.
1080	 */
1081	sbi->s_rsv_window_head.rsv_start = EXT2_RESERVE_WINDOW_NOT_ALLOCATED;
1082	sbi->s_rsv_window_head.rsv_end = EXT2_RESERVE_WINDOW_NOT_ALLOCATED;
1083	sbi->s_rsv_window_head.rsv_alloc_hit = 0;
1084	sbi->s_rsv_window_head.rsv_goal_size = 0;
1085	ext2_rsv_window_add(sb, &sbi->s_rsv_window_head);
1086
1087	err = percpu_counter_init(&sbi->s_freeblocks_counter,
1088				ext2_count_free_blocks(sb), GFP_KERNEL);
1089	if (!err) {
1090		err = percpu_counter_init(&sbi->s_freeinodes_counter,
1091				ext2_count_free_inodes(sb), GFP_KERNEL);
1092	}
1093	if (!err) {
1094		err = percpu_counter_init(&sbi->s_dirs_counter,
1095				ext2_count_dirs(sb), GFP_KERNEL);
1096	}
1097	if (err) {
1098		ext2_msg(sb, KERN_ERR, "error: insufficient memory");
1099		goto failed_mount3;
1100	}
1101	/*
1102	 * set up enough so that it can read an inode
1103	 */
1104	sb->s_op = &ext2_sops;
1105	sb->s_export_op = &ext2_export_ops;
1106	sb->s_xattr = ext2_xattr_handlers;
1107
1108#ifdef CONFIG_QUOTA
1109	sb->dq_op = &dquot_operations;
1110	sb->s_qcop = &dquot_quotactl_ops;
1111	sb->s_quota_types = QTYPE_MASK_USR | QTYPE_MASK_GRP;
1112#endif
1113
1114	root = ext2_iget(sb, EXT2_ROOT_INO);
1115	if (IS_ERR(root)) {
1116		ret = PTR_ERR(root);
1117		goto failed_mount3;
1118	}
1119	if (!S_ISDIR(root->i_mode) || !root->i_blocks || !root->i_size) {
1120		iput(root);
1121		ext2_msg(sb, KERN_ERR, "error: corrupt root inode, run e2fsck");
1122		goto failed_mount3;
1123	}
1124
1125	sb->s_root = d_make_root(root);
1126	if (!sb->s_root) {
1127		ext2_msg(sb, KERN_ERR, "error: get root inode failed");
1128		ret = -ENOMEM;
1129		goto failed_mount3;
1130	}
1131	if (EXT2_HAS_COMPAT_FEATURE(sb, EXT3_FEATURE_COMPAT_HAS_JOURNAL))
1132		ext2_msg(sb, KERN_WARNING,
1133			"warning: mounting ext3 filesystem as ext2");
1134	if (ext2_setup_super (sb, es, sb->s_flags & MS_RDONLY))
1135		sb->s_flags |= MS_RDONLY;
1136	ext2_write_super(sb);
1137	return 0;
1138
1139cantfind_ext2:
1140	if (!silent)
1141		ext2_msg(sb, KERN_ERR,
1142			"error: can't find an ext2 filesystem on dev %s.",
1143			sb->s_id);
1144	goto failed_mount;
1145failed_mount3:
1146	percpu_counter_destroy(&sbi->s_freeblocks_counter);
1147	percpu_counter_destroy(&sbi->s_freeinodes_counter);
1148	percpu_counter_destroy(&sbi->s_dirs_counter);
1149failed_mount2:
1150	for (i = 0; i < db_count; i++)
1151		brelse(sbi->s_group_desc[i]);
1152failed_mount_group_desc:
1153	kfree(sbi->s_group_desc);
1154	kfree(sbi->s_debts);
1155failed_mount:
1156	brelse(bh);
1157failed_sbi:
1158	sb->s_fs_info = NULL;
1159	kfree(sbi->s_blockgroup_lock);
1160	kfree(sbi);
1161failed:
1162	return ret;
1163}
1164
1165static void ext2_clear_super_error(struct super_block *sb)
1166{
1167	struct buffer_head *sbh = EXT2_SB(sb)->s_sbh;
1168
1169	if (buffer_write_io_error(sbh)) {
1170		/*
1171		 * Oh, dear.  A previous attempt to write the
1172		 * superblock failed.  This could happen because the
1173		 * USB device was yanked out.  Or it could happen to
1174		 * be a transient write error and maybe the block will
1175		 * be remapped.  Nothing we can do but to retry the
1176		 * write and hope for the best.
1177		 */
1178		ext2_msg(sb, KERN_ERR,
1179		       "previous I/O error to superblock detected\n");
1180		clear_buffer_write_io_error(sbh);
1181		set_buffer_uptodate(sbh);
1182	}
1183}
1184
1185static void ext2_sync_super(struct super_block *sb, struct ext2_super_block *es,
1186			    int wait)
1187{
1188	ext2_clear_super_error(sb);
1189	spin_lock(&EXT2_SB(sb)->s_lock);
1190	es->s_free_blocks_count = cpu_to_le32(ext2_count_free_blocks(sb));
1191	es->s_free_inodes_count = cpu_to_le32(ext2_count_free_inodes(sb));
1192	es->s_wtime = cpu_to_le32(get_seconds());
1193	/* unlock before we do IO */
1194	spin_unlock(&EXT2_SB(sb)->s_lock);
1195	mark_buffer_dirty(EXT2_SB(sb)->s_sbh);
1196	if (wait)
1197		sync_dirty_buffer(EXT2_SB(sb)->s_sbh);
1198}
1199
1200/*
1201 * In the second extended file system, it is not necessary to
1202 * write the super block since we use a mapping of the
1203 * disk super block in a buffer.
1204 *
1205 * However, this function is still used to set the fs valid
1206 * flags to 0.  We need to set this flag to 0 since the fs
1207 * may have been checked while mounted and e2fsck may have
1208 * set s_state to EXT2_VALID_FS after some corrections.
1209 */
1210static int ext2_sync_fs(struct super_block *sb, int wait)
1211{
1212	struct ext2_sb_info *sbi = EXT2_SB(sb);
1213	struct ext2_super_block *es = EXT2_SB(sb)->s_es;
1214
1215	/*
1216	 * Write quota structures to quota file, sync_blockdev() will write
1217	 * them to disk later
1218	 */
1219	dquot_writeback_dquots(sb, -1);
1220
1221	spin_lock(&sbi->s_lock);
1222	if (es->s_state & cpu_to_le16(EXT2_VALID_FS)) {
1223		ext2_debug("setting valid to 0\n");
1224		es->s_state &= cpu_to_le16(~EXT2_VALID_FS);
1225	}
1226	spin_unlock(&sbi->s_lock);
1227	ext2_sync_super(sb, es, wait);
1228	return 0;
1229}
1230
1231static int ext2_freeze(struct super_block *sb)
1232{
1233	struct ext2_sb_info *sbi = EXT2_SB(sb);
1234
1235	/*
1236	 * Open but unlinked files present? Keep EXT2_VALID_FS flag cleared
1237	 * because we have unattached inodes and thus filesystem is not fully
1238	 * consistent.
1239	 */
1240	if (atomic_long_read(&sb->s_remove_count)) {
1241		ext2_sync_fs(sb, 1);
1242		return 0;
1243	}
1244	/* Set EXT2_FS_VALID flag */
1245	spin_lock(&sbi->s_lock);
1246	sbi->s_es->s_state = cpu_to_le16(sbi->s_mount_state);
1247	spin_unlock(&sbi->s_lock);
1248	ext2_sync_super(sb, sbi->s_es, 1);
1249
1250	return 0;
1251}
1252
1253static int ext2_unfreeze(struct super_block *sb)
1254{
1255	/* Just write sb to clear EXT2_VALID_FS flag */
1256	ext2_write_super(sb);
1257
1258	return 0;
1259}
1260
1261void ext2_write_super(struct super_block *sb)
1262{
1263	if (!(sb->s_flags & MS_RDONLY))
1264		ext2_sync_fs(sb, 1);
1265}
1266
1267static int ext2_remount (struct super_block * sb, int * flags, char * data)
1268{
1269	struct ext2_sb_info * sbi = EXT2_SB(sb);
1270	struct ext2_super_block * es;
1271	struct ext2_mount_options old_opts;
1272	unsigned long old_sb_flags;
1273	int err;
1274
1275	sync_filesystem(sb);
1276	spin_lock(&sbi->s_lock);
1277
1278	/* Store the old options */
1279	old_sb_flags = sb->s_flags;
1280	old_opts.s_mount_opt = sbi->s_mount_opt;
1281	old_opts.s_resuid = sbi->s_resuid;
1282	old_opts.s_resgid = sbi->s_resgid;
1283
1284	/*
1285	 * Allow the "check" option to be passed as a remount option.
1286	 */
1287	if (!parse_options(data, sb)) {
1288		err = -EINVAL;
1289		goto restore_opts;
1290	}
1291
1292	sb->s_flags = (sb->s_flags & ~MS_POSIXACL) |
1293		((sbi->s_mount_opt & EXT2_MOUNT_POSIX_ACL) ? MS_POSIXACL : 0);
1294
1295	es = sbi->s_es;
1296	if ((sbi->s_mount_opt ^ old_opts.s_mount_opt) & EXT2_MOUNT_DAX) {
1297		ext2_msg(sb, KERN_WARNING, "warning: refusing change of "
1298			 "dax flag with busy inodes while remounting");
1299		sbi->s_mount_opt ^= EXT2_MOUNT_DAX;
1300	}
1301	if ((*flags & MS_RDONLY) == (sb->s_flags & MS_RDONLY)) {
1302		spin_unlock(&sbi->s_lock);
1303		return 0;
1304	}
1305	if (*flags & MS_RDONLY) {
1306		if (le16_to_cpu(es->s_state) & EXT2_VALID_FS ||
1307		    !(sbi->s_mount_state & EXT2_VALID_FS)) {
1308			spin_unlock(&sbi->s_lock);
1309			return 0;
1310		}
1311
1312		/*
1313		 * OK, we are remounting a valid rw partition rdonly, so set
1314		 * the rdonly flag and then mark the partition as valid again.
1315		 */
1316		es->s_state = cpu_to_le16(sbi->s_mount_state);
1317		es->s_mtime = cpu_to_le32(get_seconds());
1318		spin_unlock(&sbi->s_lock);
1319
1320		err = dquot_suspend(sb, -1);
1321		if (err < 0) {
1322			spin_lock(&sbi->s_lock);
1323			goto restore_opts;
1324		}
1325
1326		ext2_sync_super(sb, es, 1);
1327	} else {
1328		__le32 ret = EXT2_HAS_RO_COMPAT_FEATURE(sb,
1329					       ~EXT2_FEATURE_RO_COMPAT_SUPP);
1330		if (ret) {
1331			ext2_msg(sb, KERN_WARNING,
1332				"warning: couldn't remount RDWR because of "
1333				"unsupported optional features (%x).",
1334				le32_to_cpu(ret));
1335			err = -EROFS;
1336			goto restore_opts;
1337		}
1338		/*
1339		 * Mounting a RDONLY partition read-write, so reread and
1340		 * store the current valid flag.  (It may have been changed
1341		 * by e2fsck since we originally mounted the partition.)
1342		 */
1343		sbi->s_mount_state = le16_to_cpu(es->s_state);
1344		if (!ext2_setup_super (sb, es, 0))
1345			sb->s_flags &= ~MS_RDONLY;
1346		spin_unlock(&sbi->s_lock);
1347
1348		ext2_write_super(sb);
1349
1350		dquot_resume(sb, -1);
1351	}
1352
1353	return 0;
1354restore_opts:
1355	sbi->s_mount_opt = old_opts.s_mount_opt;
1356	sbi->s_resuid = old_opts.s_resuid;
1357	sbi->s_resgid = old_opts.s_resgid;
1358	sb->s_flags = old_sb_flags;
1359	spin_unlock(&sbi->s_lock);
1360	return err;
1361}
1362
1363static int ext2_statfs (struct dentry * dentry, struct kstatfs * buf)
1364{
1365	struct super_block *sb = dentry->d_sb;
1366	struct ext2_sb_info *sbi = EXT2_SB(sb);
1367	struct ext2_super_block *es = sbi->s_es;
1368	u64 fsid;
1369
1370	spin_lock(&sbi->s_lock);
1371
1372	if (test_opt (sb, MINIX_DF))
1373		sbi->s_overhead_last = 0;
1374	else if (sbi->s_blocks_last != le32_to_cpu(es->s_blocks_count)) {
1375		unsigned long i, overhead = 0;
1376		smp_rmb();
1377
1378		/*
1379		 * Compute the overhead (FS structures). This is constant
1380		 * for a given filesystem unless the number of block groups
1381		 * changes so we cache the previous value until it does.
1382		 */
1383
1384		/*
1385		 * All of the blocks before first_data_block are
1386		 * overhead
1387		 */
1388		overhead = le32_to_cpu(es->s_first_data_block);
1389
1390		/*
1391		 * Add the overhead attributed to the superblock and
1392		 * block group descriptors.  If the sparse superblocks
1393		 * feature is turned on, then not all groups have this.
1394		 */
1395		for (i = 0; i < sbi->s_groups_count; i++)
1396			overhead += ext2_bg_has_super(sb, i) +
1397				ext2_bg_num_gdb(sb, i);
1398
1399		/*
1400		 * Every block group has an inode bitmap, a block
1401		 * bitmap, and an inode table.
1402		 */
1403		overhead += (sbi->s_groups_count *
1404			     (2 + sbi->s_itb_per_group));
1405		sbi->s_overhead_last = overhead;
1406		smp_wmb();
1407		sbi->s_blocks_last = le32_to_cpu(es->s_blocks_count);
1408	}
1409
1410	buf->f_type = EXT2_SUPER_MAGIC;
1411	buf->f_bsize = sb->s_blocksize;
1412	buf->f_blocks = le32_to_cpu(es->s_blocks_count) - sbi->s_overhead_last;
1413	buf->f_bfree = ext2_count_free_blocks(sb);
1414	es->s_free_blocks_count = cpu_to_le32(buf->f_bfree);
1415	buf->f_bavail = buf->f_bfree - le32_to_cpu(es->s_r_blocks_count);
1416	if (buf->f_bfree < le32_to_cpu(es->s_r_blocks_count))
1417		buf->f_bavail = 0;
1418	buf->f_files = le32_to_cpu(es->s_inodes_count);
1419	buf->f_ffree = ext2_count_free_inodes(sb);
1420	es->s_free_inodes_count = cpu_to_le32(buf->f_ffree);
1421	buf->f_namelen = EXT2_NAME_LEN;
1422	fsid = le64_to_cpup((void *)es->s_uuid) ^
1423	       le64_to_cpup((void *)es->s_uuid + sizeof(u64));
1424	buf->f_fsid.val[0] = fsid & 0xFFFFFFFFUL;
1425	buf->f_fsid.val[1] = (fsid >> 32) & 0xFFFFFFFFUL;
1426	spin_unlock(&sbi->s_lock);
1427	return 0;
1428}
1429
1430static struct dentry *ext2_mount(struct file_system_type *fs_type,
1431	int flags, const char *dev_name, void *data)
1432{
1433	return mount_bdev(fs_type, flags, dev_name, data, ext2_fill_super);
1434}
1435
1436#ifdef CONFIG_QUOTA
1437
1438/* Read data from quotafile - avoid pagecache and such because we cannot afford
1439 * acquiring the locks... As quota files are never truncated and quota code
1440 * itself serializes the operations (and no one else should touch the files)
1441 * we don't have to be afraid of races */
1442static ssize_t ext2_quota_read(struct super_block *sb, int type, char *data,
1443			       size_t len, loff_t off)
1444{
1445	struct inode *inode = sb_dqopt(sb)->files[type];
1446	sector_t blk = off >> EXT2_BLOCK_SIZE_BITS(sb);
1447	int err = 0;
1448	int offset = off & (sb->s_blocksize - 1);
1449	int tocopy;
1450	size_t toread;
1451	struct buffer_head tmp_bh;
1452	struct buffer_head *bh;
1453	loff_t i_size = i_size_read(inode);
1454
1455	if (off > i_size)
1456		return 0;
1457	if (off+len > i_size)
1458		len = i_size-off;
1459	toread = len;
1460	while (toread > 0) {
1461		tocopy = sb->s_blocksize - offset < toread ?
1462				sb->s_blocksize - offset : toread;
1463
1464		tmp_bh.b_state = 0;
1465		tmp_bh.b_size = sb->s_blocksize;
1466		err = ext2_get_block(inode, blk, &tmp_bh, 0);
1467		if (err < 0)
1468			return err;
1469		if (!buffer_mapped(&tmp_bh))	/* A hole? */
1470			memset(data, 0, tocopy);
1471		else {
1472			bh = sb_bread(sb, tmp_bh.b_blocknr);
1473			if (!bh)
1474				return -EIO;
1475			memcpy(data, bh->b_data+offset, tocopy);
1476			brelse(bh);
1477		}
1478		offset = 0;
1479		toread -= tocopy;
1480		data += tocopy;
1481		blk++;
1482	}
1483	return len;
1484}
1485
1486/* Write to quotafile */
1487static ssize_t ext2_quota_write(struct super_block *sb, int type,
1488				const char *data, size_t len, loff_t off)
1489{
1490	struct inode *inode = sb_dqopt(sb)->files[type];
1491	sector_t blk = off >> EXT2_BLOCK_SIZE_BITS(sb);
1492	int err = 0;
1493	int offset = off & (sb->s_blocksize - 1);
1494	int tocopy;
1495	size_t towrite = len;
1496	struct buffer_head tmp_bh;
1497	struct buffer_head *bh;
1498
1499	while (towrite > 0) {
1500		tocopy = sb->s_blocksize - offset < towrite ?
1501				sb->s_blocksize - offset : towrite;
1502
1503		tmp_bh.b_state = 0;
1504		tmp_bh.b_size = sb->s_blocksize;
1505		err = ext2_get_block(inode, blk, &tmp_bh, 1);
1506		if (err < 0)
1507			goto out;
1508		if (offset || tocopy != EXT2_BLOCK_SIZE(sb))
1509			bh = sb_bread(sb, tmp_bh.b_blocknr);
1510		else
1511			bh = sb_getblk(sb, tmp_bh.b_blocknr);
1512		if (unlikely(!bh)) {
1513			err = -EIO;
1514			goto out;
1515		}
1516		lock_buffer(bh);
1517		memcpy(bh->b_data+offset, data, tocopy);
1518		flush_dcache_page(bh->b_page);
1519		set_buffer_uptodate(bh);
1520		mark_buffer_dirty(bh);
1521		unlock_buffer(bh);
1522		brelse(bh);
1523		offset = 0;
1524		towrite -= tocopy;
1525		data += tocopy;
1526		blk++;
1527	}
1528out:
1529	if (len == towrite)
1530		return err;
1531	if (inode->i_size < off+len-towrite)
1532		i_size_write(inode, off+len-towrite);
1533	inode->i_version++;
1534	inode->i_mtime = inode->i_ctime = CURRENT_TIME;
1535	mark_inode_dirty(inode);
1536	return len - towrite;
1537}
1538
1539#endif
1540
1541static struct file_system_type ext2_fs_type = {
1542	.owner		= THIS_MODULE,
1543	.name		= "ext2",
1544	.mount		= ext2_mount,
1545	.kill_sb	= kill_block_super,
1546	.fs_flags	= FS_REQUIRES_DEV,
1547};
1548MODULE_ALIAS_FS("ext2");
1549
1550static int __init init_ext2_fs(void)
1551{
1552	int err = init_ext2_xattr();
1553	if (err)
1554		return err;
1555	err = init_inodecache();
1556	if (err)
1557		goto out1;
1558        err = register_filesystem(&ext2_fs_type);
1559	if (err)
1560		goto out;
1561	return 0;
1562out:
1563	destroy_inodecache();
1564out1:
1565	exit_ext2_xattr();
1566	return err;
1567}
1568
1569static void __exit exit_ext2_fs(void)
1570{
1571	unregister_filesystem(&ext2_fs_type);
1572	destroy_inodecache();
1573	exit_ext2_xattr();
1574}
1575
1576MODULE_AUTHOR("Remy Card and others");
1577MODULE_DESCRIPTION("Second Extended Filesystem");
1578MODULE_LICENSE("GPL");
1579module_init(init_ext2_fs)
1580module_exit(exit_ext2_fs)
1581