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/smp_lock.h>
29#include <linux/vfs.h>
30#include <linux/seq_file.h>
31#include <linux/mount.h>
32#include <asm/uaccess.h>
33#include "ext2.h"
34#include "xattr.h"
35#include "acl.h"
36#include "xip.h"
37
38static void ext2_sync_super(struct super_block *sb,
39			    struct ext2_super_block *es);
40static int ext2_remount (struct super_block * sb, int * flags, char * data);
41static int ext2_statfs (struct dentry * dentry, struct kstatfs * buf);
42
43void ext2_error (struct super_block * sb, const char * function,
44		 const char * fmt, ...)
45{
46	va_list args;
47	struct ext2_sb_info *sbi = EXT2_SB(sb);
48	struct ext2_super_block *es = sbi->s_es;
49
50	if (!(sb->s_flags & MS_RDONLY)) {
51		sbi->s_mount_state |= EXT2_ERROR_FS;
52		es->s_state =
53			cpu_to_le16(le16_to_cpu(es->s_state) | EXT2_ERROR_FS);
54		ext2_sync_super(sb, es);
55	}
56
57	va_start(args, fmt);
58	printk(KERN_CRIT "EXT2-fs error (device %s): %s: ",sb->s_id, function);
59	vprintk(fmt, args);
60	printk("\n");
61	va_end(args);
62
63	if (test_opt(sb, ERRORS_PANIC))
64		panic("EXT2-fs panic from previous error\n");
65	if (test_opt(sb, ERRORS_RO)) {
66		printk("Remounting filesystem read-only\n");
67		sb->s_flags |= MS_RDONLY;
68	}
69}
70
71void ext2_warning (struct super_block * sb, const char * function,
72		   const char * fmt, ...)
73{
74	va_list args;
75
76	va_start(args, fmt);
77	printk(KERN_WARNING "EXT2-fs warning (device %s): %s: ",
78	       sb->s_id, function);
79	vprintk(fmt, args);
80	printk("\n");
81	va_end(args);
82}
83
84void ext2_update_dynamic_rev(struct super_block *sb)
85{
86	struct ext2_super_block *es = EXT2_SB(sb)->s_es;
87
88	if (le32_to_cpu(es->s_rev_level) > EXT2_GOOD_OLD_REV)
89		return;
90
91	ext2_warning(sb, __FUNCTION__,
92		     "updating to rev %d because of new feature flag, "
93		     "running e2fsck is recommended",
94		     EXT2_DYNAMIC_REV);
95
96	es->s_first_ino = cpu_to_le32(EXT2_GOOD_OLD_FIRST_INO);
97	es->s_inode_size = cpu_to_le16(EXT2_GOOD_OLD_INODE_SIZE);
98	es->s_rev_level = cpu_to_le32(EXT2_DYNAMIC_REV);
99	/* leave es->s_feature_*compat flags alone */
100	/* es->s_uuid will be set by e2fsck if empty */
101
102	/*
103	 * The rest of the superblock fields should be zero, and if not it
104	 * means they are likely already in use, so leave them alone.  We
105	 * can leave it up to e2fsck to clean up any inconsistencies there.
106	 */
107}
108
109static void ext2_put_super (struct super_block * sb)
110{
111	int db_count;
112	int i;
113	struct ext2_sb_info *sbi = EXT2_SB(sb);
114
115	ext2_xattr_put_super(sb);
116	if (!(sb->s_flags & MS_RDONLY)) {
117		struct ext2_super_block *es = sbi->s_es;
118
119		es->s_state = cpu_to_le16(sbi->s_mount_state);
120		ext2_sync_super(sb, es);
121	}
122	db_count = sbi->s_gdb_count;
123	for (i = 0; i < db_count; i++)
124		if (sbi->s_group_desc[i])
125			brelse (sbi->s_group_desc[i]);
126	kfree(sbi->s_group_desc);
127	kfree(sbi->s_debts);
128	percpu_counter_destroy(&sbi->s_freeblocks_counter);
129	percpu_counter_destroy(&sbi->s_freeinodes_counter);
130	percpu_counter_destroy(&sbi->s_dirs_counter);
131	brelse (sbi->s_sbh);
132	sb->s_fs_info = NULL;
133	kfree(sbi);
134
135	return;
136}
137
138static struct kmem_cache * ext2_inode_cachep;
139
140static struct inode *ext2_alloc_inode(struct super_block *sb)
141{
142	struct ext2_inode_info *ei;
143	ei = (struct ext2_inode_info *)kmem_cache_alloc(ext2_inode_cachep, GFP_KERNEL);
144	if (!ei)
145		return NULL;
146#ifdef CONFIG_EXT2_FS_POSIX_ACL
147	ei->i_acl = EXT2_ACL_NOT_CACHED;
148	ei->i_default_acl = EXT2_ACL_NOT_CACHED;
149#endif
150	ei->vfs_inode.i_version = 1;
151	return &ei->vfs_inode;
152}
153
154static void ext2_destroy_inode(struct inode *inode)
155{
156	kmem_cache_free(ext2_inode_cachep, EXT2_I(inode));
157}
158
159static void init_once(void * foo, struct kmem_cache * cachep, unsigned long flags)
160{
161	struct ext2_inode_info *ei = (struct ext2_inode_info *) foo;
162
163	rwlock_init(&ei->i_meta_lock);
164#ifdef CONFIG_EXT2_FS_XATTR
165	init_rwsem(&ei->xattr_sem);
166#endif
167	inode_init_once(&ei->vfs_inode);
168}
169
170static int init_inodecache(void)
171{
172	ext2_inode_cachep = kmem_cache_create("ext2_inode_cache",
173					     sizeof(struct ext2_inode_info),
174					     0, (SLAB_RECLAIM_ACCOUNT|
175						SLAB_MEM_SPREAD),
176					     init_once, NULL);
177	if (ext2_inode_cachep == NULL)
178		return -ENOMEM;
179	return 0;
180}
181
182static void destroy_inodecache(void)
183{
184	kmem_cache_destroy(ext2_inode_cachep);
185}
186
187static void ext2_clear_inode(struct inode *inode)
188{
189#ifdef CONFIG_EXT2_FS_POSIX_ACL
190	struct ext2_inode_info *ei = EXT2_I(inode);
191
192	if (ei->i_acl && ei->i_acl != EXT2_ACL_NOT_CACHED) {
193		posix_acl_release(ei->i_acl);
194		ei->i_acl = EXT2_ACL_NOT_CACHED;
195	}
196	if (ei->i_default_acl && ei->i_default_acl != EXT2_ACL_NOT_CACHED) {
197		posix_acl_release(ei->i_default_acl);
198		ei->i_default_acl = EXT2_ACL_NOT_CACHED;
199	}
200#endif
201}
202
203static int ext2_show_options(struct seq_file *seq, struct vfsmount *vfs)
204{
205	struct ext2_sb_info *sbi = EXT2_SB(vfs->mnt_sb);
206
207	if (sbi->s_mount_opt & EXT2_MOUNT_GRPID)
208		seq_puts(seq, ",grpid");
209
210#if defined(CONFIG_QUOTA)
211	if (sbi->s_mount_opt & EXT2_MOUNT_USRQUOTA)
212		seq_puts(seq, ",usrquota");
213
214	if (sbi->s_mount_opt & EXT2_MOUNT_GRPQUOTA)
215		seq_puts(seq, ",grpquota");
216#endif
217
218#if defined(CONFIG_EXT2_FS_XIP)
219	if (sbi->s_mount_opt & EXT2_MOUNT_XIP)
220		seq_puts(seq, ",xip");
221#endif
222
223	return 0;
224}
225
226#ifdef CONFIG_QUOTA
227static ssize_t ext2_quota_read(struct super_block *sb, int type, char *data, size_t len, loff_t off);
228static ssize_t ext2_quota_write(struct super_block *sb, int type, const char *data, size_t len, loff_t off);
229#endif
230
231static const struct super_operations ext2_sops = {
232	.alloc_inode	= ext2_alloc_inode,
233	.destroy_inode	= ext2_destroy_inode,
234	.read_inode	= ext2_read_inode,
235	.write_inode	= ext2_write_inode,
236	.put_inode	= ext2_put_inode,
237	.delete_inode	= ext2_delete_inode,
238	.put_super	= ext2_put_super,
239	.write_super	= ext2_write_super,
240	.statfs		= ext2_statfs,
241	.remount_fs	= ext2_remount,
242	.clear_inode	= ext2_clear_inode,
243	.show_options	= ext2_show_options,
244#ifdef CONFIG_QUOTA
245	.quota_read	= ext2_quota_read,
246	.quota_write	= ext2_quota_write,
247#endif
248};
249
250static struct dentry *ext2_get_dentry(struct super_block *sb, void *vobjp)
251{
252	__u32 *objp = vobjp;
253	unsigned long ino = objp[0];
254	__u32 generation = objp[1];
255	struct inode *inode;
256	struct dentry *result;
257
258	if (ino < EXT2_FIRST_INO(sb) && ino != EXT2_ROOT_INO)
259		return ERR_PTR(-ESTALE);
260	if (ino > le32_to_cpu(EXT2_SB(sb)->s_es->s_inodes_count))
261		return ERR_PTR(-ESTALE);
262
263	/* iget isn't really right if the inode is currently unallocated!!
264	 * ext2_read_inode currently does appropriate checks, but
265	 * it might be "neater" to call ext2_get_inode first and check
266	 * if the inode is valid.....
267	 */
268	inode = iget(sb, ino);
269	if (inode == NULL)
270		return ERR_PTR(-ENOMEM);
271	if (is_bad_inode(inode) ||
272	    (generation && inode->i_generation != generation)) {
273		/* we didn't find the right inode.. */
274		iput(inode);
275		return ERR_PTR(-ESTALE);
276	}
277	/* now to find a dentry.
278	 * If possible, get a well-connected one
279	 */
280	result = d_alloc_anon(inode);
281	if (!result) {
282		iput(inode);
283		return ERR_PTR(-ENOMEM);
284	}
285	return result;
286}
287
288/* Yes, most of these are left as NULL!!
289 * A NULL value implies the default, which works with ext2-like file
290 * systems, but can be improved upon.
291 * Currently only get_parent is required.
292 */
293static struct export_operations ext2_export_ops = {
294	.get_parent = ext2_get_parent,
295	.get_dentry = ext2_get_dentry,
296};
297
298static unsigned long get_sb_block(void **data)
299{
300	unsigned long 	sb_block;
301	char 		*options = (char *) *data;
302
303	if (!options || strncmp(options, "sb=", 3) != 0)
304		return 1;	/* Default location */
305	options += 3;
306	sb_block = simple_strtoul(options, &options, 0);
307	if (*options && *options != ',') {
308		printk("EXT2-fs: Invalid sb specification: %s\n",
309		       (char *) *data);
310		return 1;
311	}
312	if (*options == ',')
313		options++;
314	*data = (void *) options;
315	return sb_block;
316}
317
318enum {
319	Opt_bsd_df, Opt_minix_df, Opt_grpid, Opt_nogrpid,
320	Opt_resgid, Opt_resuid, Opt_sb, Opt_err_cont, Opt_err_panic,
321	Opt_err_ro, Opt_nouid32, Opt_nocheck, Opt_debug,
322	Opt_oldalloc, Opt_orlov, Opt_nobh, Opt_user_xattr, Opt_nouser_xattr,
323	Opt_acl, Opt_noacl, Opt_xip, Opt_ignore, Opt_err, Opt_quota,
324	Opt_usrquota, Opt_grpquota
325};
326
327static match_table_t tokens = {
328	{Opt_bsd_df, "bsddf"},
329	{Opt_minix_df, "minixdf"},
330	{Opt_grpid, "grpid"},
331	{Opt_grpid, "bsdgroups"},
332	{Opt_nogrpid, "nogrpid"},
333	{Opt_nogrpid, "sysvgroups"},
334	{Opt_resgid, "resgid=%u"},
335	{Opt_resuid, "resuid=%u"},
336	{Opt_sb, "sb=%u"},
337	{Opt_err_cont, "errors=continue"},
338	{Opt_err_panic, "errors=panic"},
339	{Opt_err_ro, "errors=remount-ro"},
340	{Opt_nouid32, "nouid32"},
341	{Opt_nocheck, "check=none"},
342	{Opt_nocheck, "nocheck"},
343	{Opt_debug, "debug"},
344	{Opt_oldalloc, "oldalloc"},
345	{Opt_orlov, "orlov"},
346	{Opt_nobh, "nobh"},
347	{Opt_user_xattr, "user_xattr"},
348	{Opt_nouser_xattr, "nouser_xattr"},
349	{Opt_acl, "acl"},
350	{Opt_noacl, "noacl"},
351	{Opt_xip, "xip"},
352	{Opt_grpquota, "grpquota"},
353	{Opt_ignore, "noquota"},
354	{Opt_quota, "quota"},
355	{Opt_usrquota, "usrquota"},
356	{Opt_err, NULL}
357};
358
359static int parse_options (char * options,
360			  struct ext2_sb_info *sbi)
361{
362	char * p;
363	substring_t args[MAX_OPT_ARGS];
364	int option;
365
366	if (!options)
367		return 1;
368
369	while ((p = strsep (&options, ",")) != NULL) {
370		int token;
371		if (!*p)
372			continue;
373
374		token = match_token(p, tokens, args);
375		switch (token) {
376		case Opt_bsd_df:
377			clear_opt (sbi->s_mount_opt, MINIX_DF);
378			break;
379		case Opt_minix_df:
380			set_opt (sbi->s_mount_opt, MINIX_DF);
381			break;
382		case Opt_grpid:
383			set_opt (sbi->s_mount_opt, GRPID);
384			break;
385		case Opt_nogrpid:
386			clear_opt (sbi->s_mount_opt, GRPID);
387			break;
388		case Opt_resuid:
389			if (match_int(&args[0], &option))
390				return 0;
391			sbi->s_resuid = option;
392			break;
393		case Opt_resgid:
394			if (match_int(&args[0], &option))
395				return 0;
396			sbi->s_resgid = option;
397			break;
398		case Opt_sb:
399			/* handled by get_sb_block() instead of here */
400			/* *sb_block = match_int(&args[0]); */
401			break;
402		case Opt_err_panic:
403			clear_opt (sbi->s_mount_opt, ERRORS_CONT);
404			clear_opt (sbi->s_mount_opt, ERRORS_RO);
405			set_opt (sbi->s_mount_opt, ERRORS_PANIC);
406			break;
407		case Opt_err_ro:
408			clear_opt (sbi->s_mount_opt, ERRORS_CONT);
409			clear_opt (sbi->s_mount_opt, ERRORS_PANIC);
410			set_opt (sbi->s_mount_opt, ERRORS_RO);
411			break;
412		case Opt_err_cont:
413			clear_opt (sbi->s_mount_opt, ERRORS_RO);
414			clear_opt (sbi->s_mount_opt, ERRORS_PANIC);
415			set_opt (sbi->s_mount_opt, ERRORS_CONT);
416			break;
417		case Opt_nouid32:
418			set_opt (sbi->s_mount_opt, NO_UID32);
419			break;
420		case Opt_nocheck:
421			clear_opt (sbi->s_mount_opt, CHECK);
422			break;
423		case Opt_debug:
424			set_opt (sbi->s_mount_opt, DEBUG);
425			break;
426		case Opt_oldalloc:
427			set_opt (sbi->s_mount_opt, OLDALLOC);
428			break;
429		case Opt_orlov:
430			clear_opt (sbi->s_mount_opt, OLDALLOC);
431			break;
432		case Opt_nobh:
433			set_opt (sbi->s_mount_opt, NOBH);
434			break;
435#ifdef CONFIG_EXT2_FS_XATTR
436		case Opt_user_xattr:
437			set_opt (sbi->s_mount_opt, XATTR_USER);
438			break;
439		case Opt_nouser_xattr:
440			clear_opt (sbi->s_mount_opt, XATTR_USER);
441			break;
442#else
443		case Opt_user_xattr:
444		case Opt_nouser_xattr:
445			printk("EXT2 (no)user_xattr options not supported\n");
446			break;
447#endif
448#ifdef CONFIG_EXT2_FS_POSIX_ACL
449		case Opt_acl:
450			set_opt(sbi->s_mount_opt, POSIX_ACL);
451			break;
452		case Opt_noacl:
453			clear_opt(sbi->s_mount_opt, POSIX_ACL);
454			break;
455#else
456		case Opt_acl:
457		case Opt_noacl:
458			printk("EXT2 (no)acl options not supported\n");
459			break;
460#endif
461		case Opt_xip:
462#ifdef CONFIG_EXT2_FS_XIP
463			set_opt (sbi->s_mount_opt, XIP);
464#else
465			printk("EXT2 xip option not supported\n");
466#endif
467			break;
468
469#if defined(CONFIG_QUOTA)
470		case Opt_quota:
471		case Opt_usrquota:
472			set_opt(sbi->s_mount_opt, USRQUOTA);
473			break;
474
475		case Opt_grpquota:
476			set_opt(sbi->s_mount_opt, GRPQUOTA);
477			break;
478#else
479		case Opt_quota:
480		case Opt_usrquota:
481		case Opt_grpquota:
482			printk(KERN_ERR
483				"EXT2-fs: quota operations not supported.\n");
484
485			break;
486#endif
487
488		case Opt_ignore:
489			break;
490		default:
491			return 0;
492		}
493	}
494	return 1;
495}
496
497static int ext2_setup_super (struct super_block * sb,
498			      struct ext2_super_block * es,
499			      int read_only)
500{
501	int res = 0;
502	struct ext2_sb_info *sbi = EXT2_SB(sb);
503
504	if (le32_to_cpu(es->s_rev_level) > EXT2_MAX_SUPP_REV) {
505		printk ("EXT2-fs warning: revision level too high, "
506			"forcing read-only mode\n");
507		res = MS_RDONLY;
508	}
509	if (read_only)
510		return res;
511	if (!(sbi->s_mount_state & EXT2_VALID_FS))
512		printk ("EXT2-fs warning: mounting unchecked fs, "
513			"running e2fsck is recommended\n");
514	else if ((sbi->s_mount_state & EXT2_ERROR_FS))
515		printk ("EXT2-fs warning: mounting fs with errors, "
516			"running e2fsck is recommended\n");
517	else if ((__s16) le16_to_cpu(es->s_max_mnt_count) >= 0 &&
518		 le16_to_cpu(es->s_mnt_count) >=
519		 (unsigned short) (__s16) le16_to_cpu(es->s_max_mnt_count))
520		printk ("EXT2-fs warning: maximal mount count reached, "
521			"running e2fsck is recommended\n");
522	else if (le32_to_cpu(es->s_checkinterval) &&
523		(le32_to_cpu(es->s_lastcheck) + le32_to_cpu(es->s_checkinterval) <= get_seconds()))
524		printk ("EXT2-fs warning: checktime reached, "
525			"running e2fsck is recommended\n");
526	if (!le16_to_cpu(es->s_max_mnt_count))
527		es->s_max_mnt_count = cpu_to_le16(EXT2_DFL_MAX_MNT_COUNT);
528	es->s_mnt_count=cpu_to_le16(le16_to_cpu(es->s_mnt_count) + 1);
529	ext2_write_super(sb);
530	if (test_opt (sb, DEBUG))
531		printk ("[EXT II FS %s, %s, bs=%lu, fs=%lu, gc=%lu, "
532			"bpg=%lu, ipg=%lu, mo=%04lx]\n",
533			EXT2FS_VERSION, EXT2FS_DATE, sb->s_blocksize,
534			sbi->s_frag_size,
535			sbi->s_groups_count,
536			EXT2_BLOCKS_PER_GROUP(sb),
537			EXT2_INODES_PER_GROUP(sb),
538			sbi->s_mount_opt);
539	return res;
540}
541
542static int ext2_check_descriptors (struct super_block * sb)
543{
544	int i;
545	int desc_block = 0;
546	struct ext2_sb_info *sbi = EXT2_SB(sb);
547	unsigned long first_block = le32_to_cpu(sbi->s_es->s_first_data_block);
548	unsigned long last_block;
549	struct ext2_group_desc * gdp = NULL;
550
551	ext2_debug ("Checking group descriptors");
552
553	for (i = 0; i < sbi->s_groups_count; i++)
554	{
555		if (i == sbi->s_groups_count - 1)
556			last_block = le32_to_cpu(sbi->s_es->s_blocks_count) - 1;
557		else
558			last_block = first_block +
559				(EXT2_BLOCKS_PER_GROUP(sb) - 1);
560
561		if ((i % EXT2_DESC_PER_BLOCK(sb)) == 0)
562			gdp = (struct ext2_group_desc *) sbi->s_group_desc[desc_block++]->b_data;
563		if (le32_to_cpu(gdp->bg_block_bitmap) < first_block ||
564		    le32_to_cpu(gdp->bg_block_bitmap) > last_block)
565		{
566			ext2_error (sb, "ext2_check_descriptors",
567				    "Block bitmap for group %d"
568				    " not in group (block %lu)!",
569				    i, (unsigned long) le32_to_cpu(gdp->bg_block_bitmap));
570			return 0;
571		}
572		if (le32_to_cpu(gdp->bg_inode_bitmap) < first_block ||
573		    le32_to_cpu(gdp->bg_inode_bitmap) > last_block)
574		{
575			ext2_error (sb, "ext2_check_descriptors",
576				    "Inode bitmap for group %d"
577				    " not in group (block %lu)!",
578				    i, (unsigned long) le32_to_cpu(gdp->bg_inode_bitmap));
579			return 0;
580		}
581		if (le32_to_cpu(gdp->bg_inode_table) < first_block ||
582		    le32_to_cpu(gdp->bg_inode_table) + sbi->s_itb_per_group >
583		    last_block)
584		{
585			ext2_error (sb, "ext2_check_descriptors",
586				    "Inode table for group %d"
587				    " not in group (block %lu)!",
588				    i, (unsigned long) le32_to_cpu(gdp->bg_inode_table));
589			return 0;
590		}
591		first_block += EXT2_BLOCKS_PER_GROUP(sb);
592		gdp++;
593	}
594	return 1;
595}
596
597/*
598 * Maximal file size.  There is a direct, and {,double-,triple-}indirect
599 * block limit, and also a limit of (2^32 - 1) 512-byte sectors in i_blocks.
600 * We need to be 1 filesystem block less than the 2^32 sector limit.
601 */
602static loff_t ext2_max_size(int bits)
603{
604	loff_t res = EXT2_NDIR_BLOCKS;
605	/* This constant is calculated to be the largest file size for a
606	 * dense, 4k-blocksize file such that the total number of
607	 * sectors in the file, including data and all indirect blocks,
608	 * does not exceed 2^32. */
609	const loff_t upper_limit = 0x1ff7fffd000LL;
610
611	res += 1LL << (bits-2);
612	res += 1LL << (2*(bits-2));
613	res += 1LL << (3*(bits-2));
614	res <<= bits;
615	if (res > upper_limit)
616		res = upper_limit;
617	return res;
618}
619
620static unsigned long descriptor_loc(struct super_block *sb,
621				    unsigned long logic_sb_block,
622				    int nr)
623{
624	struct ext2_sb_info *sbi = EXT2_SB(sb);
625	unsigned long bg, first_data_block, first_meta_bg;
626	int has_super = 0;
627
628	first_data_block = le32_to_cpu(sbi->s_es->s_first_data_block);
629	first_meta_bg = le32_to_cpu(sbi->s_es->s_first_meta_bg);
630
631	if (!EXT2_HAS_INCOMPAT_FEATURE(sb, EXT2_FEATURE_INCOMPAT_META_BG) ||
632	    nr < first_meta_bg)
633		return (logic_sb_block + nr + 1);
634	bg = sbi->s_desc_per_block * nr;
635	if (ext2_bg_has_super(sb, bg))
636		has_super = 1;
637	return (first_data_block + has_super + (bg * sbi->s_blocks_per_group));
638}
639
640static int ext2_fill_super(struct super_block *sb, void *data, int silent)
641{
642	struct buffer_head * bh;
643	struct ext2_sb_info * sbi;
644	struct ext2_super_block * es;
645	struct inode *root;
646	unsigned long block;
647	unsigned long sb_block = get_sb_block(&data);
648	unsigned long logic_sb_block;
649	unsigned long offset = 0;
650	unsigned long def_mount_opts;
651	int blocksize = BLOCK_SIZE;
652	int db_count;
653	int i, j;
654	__le32 features;
655
656	sbi = kzalloc(sizeof(*sbi), GFP_KERNEL);
657	if (!sbi)
658		return -ENOMEM;
659	sb->s_fs_info = sbi;
660
661	/*
662	 * See what the current blocksize for the device is, and
663	 * use that as the blocksize.  Otherwise (or if the blocksize
664	 * is smaller than the default) use the default.
665	 * This is important for devices that have a hardware
666	 * sectorsize that is larger than the default.
667	 */
668	blocksize = sb_min_blocksize(sb, BLOCK_SIZE);
669	if (!blocksize) {
670		printk ("EXT2-fs: unable to set blocksize\n");
671		goto failed_sbi;
672	}
673
674	/*
675	 * If the superblock doesn't start on a hardware sector boundary,
676	 * calculate the offset.
677	 */
678	if (blocksize != BLOCK_SIZE) {
679		logic_sb_block = (sb_block*BLOCK_SIZE) / blocksize;
680		offset = (sb_block*BLOCK_SIZE) % blocksize;
681	} else {
682		logic_sb_block = sb_block;
683	}
684
685	if (!(bh = sb_bread(sb, logic_sb_block))) {
686		printk ("EXT2-fs: unable to read superblock\n");
687		goto failed_sbi;
688	}
689	/*
690	 * Note: s_es must be initialized as soon as possible because
691	 *       some ext2 macro-instructions depend on its value
692	 */
693	es = (struct ext2_super_block *) (((char *)bh->b_data) + offset);
694	sbi->s_es = es;
695	sb->s_magic = le16_to_cpu(es->s_magic);
696
697	if (sb->s_magic != EXT2_SUPER_MAGIC)
698		goto cantfind_ext2;
699
700	/* Set defaults before we parse the mount options */
701	def_mount_opts = le32_to_cpu(es->s_default_mount_opts);
702	if (def_mount_opts & EXT2_DEFM_DEBUG)
703		set_opt(sbi->s_mount_opt, DEBUG);
704	if (def_mount_opts & EXT2_DEFM_BSDGROUPS)
705		set_opt(sbi->s_mount_opt, GRPID);
706	if (def_mount_opts & EXT2_DEFM_UID16)
707		set_opt(sbi->s_mount_opt, NO_UID32);
708#ifdef CONFIG_EXT2_FS_XATTR
709	if (def_mount_opts & EXT2_DEFM_XATTR_USER)
710		set_opt(sbi->s_mount_opt, XATTR_USER);
711#endif
712#ifdef CONFIG_EXT2_FS_POSIX_ACL
713	if (def_mount_opts & EXT2_DEFM_ACL)
714		set_opt(sbi->s_mount_opt, POSIX_ACL);
715#endif
716
717	if (le16_to_cpu(sbi->s_es->s_errors) == EXT2_ERRORS_PANIC)
718		set_opt(sbi->s_mount_opt, ERRORS_PANIC);
719	else if (le16_to_cpu(sbi->s_es->s_errors) == EXT2_ERRORS_RO)
720		set_opt(sbi->s_mount_opt, ERRORS_RO);
721	else
722		set_opt(sbi->s_mount_opt, ERRORS_CONT);
723
724	sbi->s_resuid = le16_to_cpu(es->s_def_resuid);
725	sbi->s_resgid = le16_to_cpu(es->s_def_resgid);
726
727	if (!parse_options ((char *) data, sbi))
728		goto failed_mount;
729
730	sb->s_flags = (sb->s_flags & ~MS_POSIXACL) |
731		((EXT2_SB(sb)->s_mount_opt & EXT2_MOUNT_POSIX_ACL) ?
732		 MS_POSIXACL : 0);
733
734	ext2_xip_verify_sb(sb); /* see if bdev supports xip, unset
735				    EXT2_MOUNT_XIP if not */
736
737	if (le32_to_cpu(es->s_rev_level) == EXT2_GOOD_OLD_REV &&
738	    (EXT2_HAS_COMPAT_FEATURE(sb, ~0U) ||
739	     EXT2_HAS_RO_COMPAT_FEATURE(sb, ~0U) ||
740	     EXT2_HAS_INCOMPAT_FEATURE(sb, ~0U)))
741		printk("EXT2-fs warning: feature flags set on rev 0 fs, "
742		       "running e2fsck is recommended\n");
743	/*
744	 * Check feature flags regardless of the revision level, since we
745	 * previously didn't change the revision level when setting the flags,
746	 * so there is a chance incompat flags are set on a rev 0 filesystem.
747	 */
748	features = EXT2_HAS_INCOMPAT_FEATURE(sb, ~EXT2_FEATURE_INCOMPAT_SUPP);
749	if (features) {
750		printk("EXT2-fs: %s: couldn't mount because of "
751		       "unsupported optional features (%x).\n",
752		       sb->s_id, le32_to_cpu(features));
753		goto failed_mount;
754	}
755	if (!(sb->s_flags & MS_RDONLY) &&
756	    (features = EXT2_HAS_RO_COMPAT_FEATURE(sb, ~EXT2_FEATURE_RO_COMPAT_SUPP))){
757		printk("EXT2-fs: %s: couldn't mount RDWR because of "
758		       "unsupported optional features (%x).\n",
759		       sb->s_id, le32_to_cpu(features));
760		goto failed_mount;
761	}
762
763	blocksize = BLOCK_SIZE << le32_to_cpu(sbi->s_es->s_log_block_size);
764
765	if ((ext2_use_xip(sb)) && ((blocksize != PAGE_SIZE) ||
766				  (sb->s_blocksize != blocksize))) {
767		if (!silent)
768			printk("XIP: Unsupported blocksize\n");
769		goto failed_mount;
770	}
771
772	/* If the blocksize doesn't match, re-read the thing.. */
773	if (sb->s_blocksize != blocksize) {
774		brelse(bh);
775
776		if (!sb_set_blocksize(sb, blocksize)) {
777			printk(KERN_ERR "EXT2-fs: blocksize too small for device.\n");
778			goto failed_sbi;
779		}
780
781		logic_sb_block = (sb_block*BLOCK_SIZE) / blocksize;
782		offset = (sb_block*BLOCK_SIZE) % blocksize;
783		bh = sb_bread(sb, logic_sb_block);
784		if(!bh) {
785			printk("EXT2-fs: Couldn't read superblock on "
786			       "2nd try.\n");
787			goto failed_sbi;
788		}
789		es = (struct ext2_super_block *) (((char *)bh->b_data) + offset);
790		sbi->s_es = es;
791		if (es->s_magic != cpu_to_le16(EXT2_SUPER_MAGIC)) {
792			printk ("EXT2-fs: Magic mismatch, very weird !\n");
793			goto failed_mount;
794		}
795	}
796
797	sb->s_maxbytes = ext2_max_size(sb->s_blocksize_bits);
798
799	if (le32_to_cpu(es->s_rev_level) == EXT2_GOOD_OLD_REV) {
800		sbi->s_inode_size = EXT2_GOOD_OLD_INODE_SIZE;
801		sbi->s_first_ino = EXT2_GOOD_OLD_FIRST_INO;
802	} else {
803		sbi->s_inode_size = le16_to_cpu(es->s_inode_size);
804		sbi->s_first_ino = le32_to_cpu(es->s_first_ino);
805		if ((sbi->s_inode_size < EXT2_GOOD_OLD_INODE_SIZE) ||
806		    (sbi->s_inode_size & (sbi->s_inode_size - 1)) ||
807		    (sbi->s_inode_size > blocksize)) {
808			printk ("EXT2-fs: unsupported inode size: %d\n",
809				sbi->s_inode_size);
810			goto failed_mount;
811		}
812	}
813
814	sbi->s_frag_size = EXT2_MIN_FRAG_SIZE <<
815				   le32_to_cpu(es->s_log_frag_size);
816	if (sbi->s_frag_size == 0)
817		goto cantfind_ext2;
818	sbi->s_frags_per_block = sb->s_blocksize / sbi->s_frag_size;
819
820	sbi->s_blocks_per_group = le32_to_cpu(es->s_blocks_per_group);
821	sbi->s_frags_per_group = le32_to_cpu(es->s_frags_per_group);
822	sbi->s_inodes_per_group = le32_to_cpu(es->s_inodes_per_group);
823
824	if (EXT2_INODE_SIZE(sb) == 0)
825		goto cantfind_ext2;
826	sbi->s_inodes_per_block = sb->s_blocksize / EXT2_INODE_SIZE(sb);
827	if (sbi->s_inodes_per_block == 0 || sbi->s_inodes_per_group == 0)
828		goto cantfind_ext2;
829	sbi->s_itb_per_group = sbi->s_inodes_per_group /
830					sbi->s_inodes_per_block;
831	sbi->s_desc_per_block = sb->s_blocksize /
832					sizeof (struct ext2_group_desc);
833	sbi->s_sbh = bh;
834	sbi->s_mount_state = le16_to_cpu(es->s_state);
835	sbi->s_addr_per_block_bits =
836		ilog2 (EXT2_ADDR_PER_BLOCK(sb));
837	sbi->s_desc_per_block_bits =
838		ilog2 (EXT2_DESC_PER_BLOCK(sb));
839
840	if (sb->s_magic != EXT2_SUPER_MAGIC)
841		goto cantfind_ext2;
842
843	if (sb->s_blocksize != bh->b_size) {
844		if (!silent)
845			printk ("VFS: Unsupported blocksize on dev "
846				"%s.\n", sb->s_id);
847		goto failed_mount;
848	}
849
850	if (sb->s_blocksize != sbi->s_frag_size) {
851		printk ("EXT2-fs: fragsize %lu != blocksize %lu (not supported yet)\n",
852			sbi->s_frag_size, sb->s_blocksize);
853		goto failed_mount;
854	}
855
856	if (sbi->s_blocks_per_group > sb->s_blocksize * 8) {
857		printk ("EXT2-fs: #blocks per group too big: %lu\n",
858			sbi->s_blocks_per_group);
859		goto failed_mount;
860	}
861	if (sbi->s_frags_per_group > sb->s_blocksize * 8) {
862		printk ("EXT2-fs: #fragments per group too big: %lu\n",
863			sbi->s_frags_per_group);
864		goto failed_mount;
865	}
866	if (sbi->s_inodes_per_group > sb->s_blocksize * 8) {
867		printk ("EXT2-fs: #inodes per group too big: %lu\n",
868			sbi->s_inodes_per_group);
869		goto failed_mount;
870	}
871
872	if (EXT2_BLOCKS_PER_GROUP(sb) == 0)
873		goto cantfind_ext2;
874 	sbi->s_groups_count = ((le32_to_cpu(es->s_blocks_count) -
875 				le32_to_cpu(es->s_first_data_block) - 1)
876 					/ EXT2_BLOCKS_PER_GROUP(sb)) + 1;
877	db_count = (sbi->s_groups_count + EXT2_DESC_PER_BLOCK(sb) - 1) /
878		   EXT2_DESC_PER_BLOCK(sb);
879	sbi->s_group_desc = kmalloc (db_count * sizeof (struct buffer_head *), GFP_KERNEL);
880	if (sbi->s_group_desc == NULL) {
881		printk ("EXT2-fs: not enough memory\n");
882		goto failed_mount;
883	}
884	bgl_lock_init(&sbi->s_blockgroup_lock);
885	sbi->s_debts = kmalloc(sbi->s_groups_count * sizeof(*sbi->s_debts),
886			       GFP_KERNEL);
887	if (!sbi->s_debts) {
888		printk ("EXT2-fs: not enough memory\n");
889		goto failed_mount_group_desc;
890	}
891	memset(sbi->s_debts, 0, sbi->s_groups_count * sizeof(*sbi->s_debts));
892	for (i = 0; i < db_count; i++) {
893		block = descriptor_loc(sb, logic_sb_block, i);
894		sbi->s_group_desc[i] = sb_bread(sb, block);
895		if (!sbi->s_group_desc[i]) {
896			for (j = 0; j < i; j++)
897				brelse (sbi->s_group_desc[j]);
898			printk ("EXT2-fs: unable to read group descriptors\n");
899			goto failed_mount_group_desc;
900		}
901	}
902	if (!ext2_check_descriptors (sb)) {
903		printk ("EXT2-fs: group descriptors corrupted!\n");
904		goto failed_mount2;
905	}
906	sbi->s_gdb_count = db_count;
907	get_random_bytes(&sbi->s_next_generation, sizeof(u32));
908	spin_lock_init(&sbi->s_next_gen_lock);
909
910	percpu_counter_init(&sbi->s_freeblocks_counter,
911				ext2_count_free_blocks(sb));
912	percpu_counter_init(&sbi->s_freeinodes_counter,
913				ext2_count_free_inodes(sb));
914	percpu_counter_init(&sbi->s_dirs_counter,
915				ext2_count_dirs(sb));
916	/*
917	 * set up enough so that it can read an inode
918	 */
919	sb->s_op = &ext2_sops;
920	sb->s_export_op = &ext2_export_ops;
921	sb->s_xattr = ext2_xattr_handlers;
922	root = iget(sb, EXT2_ROOT_INO);
923	sb->s_root = d_alloc_root(root);
924	if (!sb->s_root) {
925		iput(root);
926		printk(KERN_ERR "EXT2-fs: get root inode failed\n");
927		goto failed_mount3;
928	}
929	if (!S_ISDIR(root->i_mode) || !root->i_blocks || !root->i_size) {
930		dput(sb->s_root);
931		sb->s_root = NULL;
932		printk(KERN_ERR "EXT2-fs: corrupt root inode, run e2fsck\n");
933		goto failed_mount3;
934	}
935	if (EXT2_HAS_COMPAT_FEATURE(sb, EXT3_FEATURE_COMPAT_HAS_JOURNAL))
936		ext2_warning(sb, __FUNCTION__,
937			"mounting ext3 filesystem as ext2");
938	ext2_setup_super (sb, es, sb->s_flags & MS_RDONLY);
939	return 0;
940
941cantfind_ext2:
942	if (!silent)
943		printk("VFS: Can't find an ext2 filesystem on dev %s.\n",
944		       sb->s_id);
945	goto failed_mount;
946failed_mount3:
947	percpu_counter_destroy(&sbi->s_freeblocks_counter);
948	percpu_counter_destroy(&sbi->s_freeinodes_counter);
949	percpu_counter_destroy(&sbi->s_dirs_counter);
950failed_mount2:
951	for (i = 0; i < db_count; i++)
952		brelse(sbi->s_group_desc[i]);
953failed_mount_group_desc:
954	kfree(sbi->s_group_desc);
955	kfree(sbi->s_debts);
956failed_mount:
957	brelse(bh);
958failed_sbi:
959	sb->s_fs_info = NULL;
960	kfree(sbi);
961	return -EINVAL;
962}
963
964static void ext2_commit_super (struct super_block * sb,
965			       struct ext2_super_block * es)
966{
967	es->s_wtime = cpu_to_le32(get_seconds());
968	mark_buffer_dirty(EXT2_SB(sb)->s_sbh);
969	sb->s_dirt = 0;
970}
971
972static void ext2_sync_super(struct super_block *sb, struct ext2_super_block *es)
973{
974	es->s_free_blocks_count = cpu_to_le32(ext2_count_free_blocks(sb));
975	es->s_free_inodes_count = cpu_to_le32(ext2_count_free_inodes(sb));
976	es->s_wtime = cpu_to_le32(get_seconds());
977	mark_buffer_dirty(EXT2_SB(sb)->s_sbh);
978	sync_dirty_buffer(EXT2_SB(sb)->s_sbh);
979	sb->s_dirt = 0;
980}
981
982/*
983 * In the second extended file system, it is not necessary to
984 * write the super block since we use a mapping of the
985 * disk super block in a buffer.
986 *
987 * However, this function is still used to set the fs valid
988 * flags to 0.  We need to set this flag to 0 since the fs
989 * may have been checked while mounted and e2fsck may have
990 * set s_state to EXT2_VALID_FS after some corrections.
991 */
992
993void ext2_write_super (struct super_block * sb)
994{
995	struct ext2_super_block * es;
996	lock_kernel();
997	if (!(sb->s_flags & MS_RDONLY)) {
998		es = EXT2_SB(sb)->s_es;
999
1000		if (le16_to_cpu(es->s_state) & EXT2_VALID_FS) {
1001			ext2_debug ("setting valid to 0\n");
1002			es->s_state = cpu_to_le16(le16_to_cpu(es->s_state) &
1003						  ~EXT2_VALID_FS);
1004			es->s_free_blocks_count = cpu_to_le32(ext2_count_free_blocks(sb));
1005			es->s_free_inodes_count = cpu_to_le32(ext2_count_free_inodes(sb));
1006			es->s_mtime = cpu_to_le32(get_seconds());
1007			ext2_sync_super(sb, es);
1008		} else
1009			ext2_commit_super (sb, es);
1010	}
1011	sb->s_dirt = 0;
1012	unlock_kernel();
1013}
1014
1015static int ext2_remount (struct super_block * sb, int * flags, char * data)
1016{
1017	struct ext2_sb_info * sbi = EXT2_SB(sb);
1018	struct ext2_super_block * es;
1019	unsigned long old_mount_opt = sbi->s_mount_opt;
1020	struct ext2_mount_options old_opts;
1021	unsigned long old_sb_flags;
1022	int err;
1023
1024	/* Store the old options */
1025	old_sb_flags = sb->s_flags;
1026	old_opts.s_mount_opt = sbi->s_mount_opt;
1027	old_opts.s_resuid = sbi->s_resuid;
1028	old_opts.s_resgid = sbi->s_resgid;
1029
1030	/*
1031	 * Allow the "check" option to be passed as a remount option.
1032	 */
1033	if (!parse_options (data, sbi)) {
1034		err = -EINVAL;
1035		goto restore_opts;
1036	}
1037
1038	sb->s_flags = (sb->s_flags & ~MS_POSIXACL) |
1039		((sbi->s_mount_opt & EXT2_MOUNT_POSIX_ACL) ? MS_POSIXACL : 0);
1040
1041	ext2_xip_verify_sb(sb); /* see if bdev supports xip, unset
1042				    EXT2_MOUNT_XIP if not */
1043
1044	if ((ext2_use_xip(sb)) && (sb->s_blocksize != PAGE_SIZE)) {
1045		printk("XIP: Unsupported blocksize\n");
1046		err = -EINVAL;
1047		goto restore_opts;
1048	}
1049
1050	es = sbi->s_es;
1051	if (((sbi->s_mount_opt & EXT2_MOUNT_XIP) !=
1052	    (old_mount_opt & EXT2_MOUNT_XIP)) &&
1053	    invalidate_inodes(sb))
1054		ext2_warning(sb, __FUNCTION__, "busy inodes while remounting "\
1055			     "xip remain in cache (no functional problem)");
1056	if ((*flags & MS_RDONLY) == (sb->s_flags & MS_RDONLY))
1057		return 0;
1058	if (*flags & MS_RDONLY) {
1059		if (le16_to_cpu(es->s_state) & EXT2_VALID_FS ||
1060		    !(sbi->s_mount_state & EXT2_VALID_FS))
1061			return 0;
1062		/*
1063		 * OK, we are remounting a valid rw partition rdonly, so set
1064		 * the rdonly flag and then mark the partition as valid again.
1065		 */
1066		es->s_state = cpu_to_le16(sbi->s_mount_state);
1067		es->s_mtime = cpu_to_le32(get_seconds());
1068	} else {
1069		__le32 ret = EXT2_HAS_RO_COMPAT_FEATURE(sb,
1070					       ~EXT2_FEATURE_RO_COMPAT_SUPP);
1071		if (ret) {
1072			printk("EXT2-fs: %s: couldn't remount RDWR because of "
1073			       "unsupported optional features (%x).\n",
1074			       sb->s_id, le32_to_cpu(ret));
1075			err = -EROFS;
1076			goto restore_opts;
1077		}
1078		/*
1079		 * Mounting a RDONLY partition read-write, so reread and
1080		 * store the current valid flag.  (It may have been changed
1081		 * by e2fsck since we originally mounted the partition.)
1082		 */
1083		sbi->s_mount_state = le16_to_cpu(es->s_state);
1084		if (!ext2_setup_super (sb, es, 0))
1085			sb->s_flags &= ~MS_RDONLY;
1086	}
1087	ext2_sync_super(sb, es);
1088	return 0;
1089restore_opts:
1090	sbi->s_mount_opt = old_opts.s_mount_opt;
1091	sbi->s_resuid = old_opts.s_resuid;
1092	sbi->s_resgid = old_opts.s_resgid;
1093	sb->s_flags = old_sb_flags;
1094	return err;
1095}
1096
1097static int ext2_statfs (struct dentry * dentry, struct kstatfs * buf)
1098{
1099	struct super_block *sb = dentry->d_sb;
1100	struct ext2_sb_info *sbi = EXT2_SB(sb);
1101	struct ext2_super_block *es = sbi->s_es;
1102	unsigned long overhead;
1103	int i;
1104	u64 fsid;
1105
1106	if (test_opt (sb, MINIX_DF))
1107		overhead = 0;
1108	else {
1109		/*
1110		 * Compute the overhead (FS structures)
1111		 */
1112
1113		/*
1114		 * All of the blocks before first_data_block are
1115		 * overhead
1116		 */
1117		overhead = le32_to_cpu(es->s_first_data_block);
1118
1119		/*
1120		 * Add the overhead attributed to the superblock and
1121		 * block group descriptors.  If the sparse superblocks
1122		 * feature is turned on, then not all groups have this.
1123		 */
1124		for (i = 0; i < sbi->s_groups_count; i++)
1125			overhead += ext2_bg_has_super(sb, i) +
1126				ext2_bg_num_gdb(sb, i);
1127
1128		/*
1129		 * Every block group has an inode bitmap, a block
1130		 * bitmap, and an inode table.
1131		 */
1132		overhead += (sbi->s_groups_count *
1133			     (2 + sbi->s_itb_per_group));
1134	}
1135
1136	buf->f_type = EXT2_SUPER_MAGIC;
1137	buf->f_bsize = sb->s_blocksize;
1138	buf->f_blocks = le32_to_cpu(es->s_blocks_count) - overhead;
1139	buf->f_bfree = ext2_count_free_blocks(sb);
1140	buf->f_bavail = buf->f_bfree - le32_to_cpu(es->s_r_blocks_count);
1141	if (buf->f_bfree < le32_to_cpu(es->s_r_blocks_count))
1142		buf->f_bavail = 0;
1143	buf->f_files = le32_to_cpu(es->s_inodes_count);
1144	buf->f_ffree = ext2_count_free_inodes(sb);
1145	buf->f_namelen = EXT2_NAME_LEN;
1146	fsid = le64_to_cpup((void *)es->s_uuid) ^
1147	       le64_to_cpup((void *)es->s_uuid + sizeof(u64));
1148	buf->f_fsid.val[0] = fsid & 0xFFFFFFFFUL;
1149	buf->f_fsid.val[1] = (fsid >> 32) & 0xFFFFFFFFUL;
1150	return 0;
1151}
1152
1153static int ext2_get_sb(struct file_system_type *fs_type,
1154	int flags, const char *dev_name, void *data, struct vfsmount *mnt)
1155{
1156	return get_sb_bdev(fs_type, flags, dev_name, data, ext2_fill_super, mnt);
1157}
1158
1159#ifdef CONFIG_QUOTA
1160
1161/* Read data from quotafile - avoid pagecache and such because we cannot afford
1162 * acquiring the locks... As quota files are never truncated and quota code
1163 * itself serializes the operations (and noone else should touch the files)
1164 * we don't have to be afraid of races */
1165static ssize_t ext2_quota_read(struct super_block *sb, int type, char *data,
1166			       size_t len, loff_t off)
1167{
1168	struct inode *inode = sb_dqopt(sb)->files[type];
1169	sector_t blk = off >> EXT2_BLOCK_SIZE_BITS(sb);
1170	int err = 0;
1171	int offset = off & (sb->s_blocksize - 1);
1172	int tocopy;
1173	size_t toread;
1174	struct buffer_head tmp_bh;
1175	struct buffer_head *bh;
1176	loff_t i_size = i_size_read(inode);
1177
1178	if (off > i_size)
1179		return 0;
1180	if (off+len > i_size)
1181		len = i_size-off;
1182	toread = len;
1183	while (toread > 0) {
1184		tocopy = sb->s_blocksize - offset < toread ?
1185				sb->s_blocksize - offset : toread;
1186
1187		tmp_bh.b_state = 0;
1188		err = ext2_get_block(inode, blk, &tmp_bh, 0);
1189		if (err)
1190			return err;
1191		if (!buffer_mapped(&tmp_bh))	/* A hole? */
1192			memset(data, 0, tocopy);
1193		else {
1194			bh = sb_bread(sb, tmp_bh.b_blocknr);
1195			if (!bh)
1196				return -EIO;
1197			memcpy(data, bh->b_data+offset, tocopy);
1198			brelse(bh);
1199		}
1200		offset = 0;
1201		toread -= tocopy;
1202		data += tocopy;
1203		blk++;
1204	}
1205	return len;
1206}
1207
1208/* Write to quotafile */
1209static ssize_t ext2_quota_write(struct super_block *sb, int type,
1210				const char *data, size_t len, loff_t off)
1211{
1212	struct inode *inode = sb_dqopt(sb)->files[type];
1213	sector_t blk = off >> EXT2_BLOCK_SIZE_BITS(sb);
1214	int err = 0;
1215	int offset = off & (sb->s_blocksize - 1);
1216	int tocopy;
1217	size_t towrite = len;
1218	struct buffer_head tmp_bh;
1219	struct buffer_head *bh;
1220
1221	mutex_lock_nested(&inode->i_mutex, I_MUTEX_QUOTA);
1222	while (towrite > 0) {
1223		tocopy = sb->s_blocksize - offset < towrite ?
1224				sb->s_blocksize - offset : towrite;
1225
1226		tmp_bh.b_state = 0;
1227		err = ext2_get_block(inode, blk, &tmp_bh, 1);
1228		if (err)
1229			goto out;
1230		if (offset || tocopy != EXT2_BLOCK_SIZE(sb))
1231			bh = sb_bread(sb, tmp_bh.b_blocknr);
1232		else
1233			bh = sb_getblk(sb, tmp_bh.b_blocknr);
1234		if (!bh) {
1235			err = -EIO;
1236			goto out;
1237		}
1238		lock_buffer(bh);
1239		memcpy(bh->b_data+offset, data, tocopy);
1240		flush_dcache_page(bh->b_page);
1241		set_buffer_uptodate(bh);
1242		mark_buffer_dirty(bh);
1243		unlock_buffer(bh);
1244		brelse(bh);
1245		offset = 0;
1246		towrite -= tocopy;
1247		data += tocopy;
1248		blk++;
1249	}
1250out:
1251	if (len == towrite)
1252		return err;
1253	if (inode->i_size < off+len-towrite)
1254		i_size_write(inode, off+len-towrite);
1255	inode->i_version++;
1256	inode->i_mtime = inode->i_ctime = CURRENT_TIME;
1257	mark_inode_dirty(inode);
1258	mutex_unlock(&inode->i_mutex);
1259	return len - towrite;
1260}
1261
1262#endif
1263
1264static struct file_system_type ext2_fs_type = {
1265	.owner		= THIS_MODULE,
1266	.name		= "ext2",
1267	.get_sb		= ext2_get_sb,
1268	.kill_sb	= kill_block_super,
1269	.fs_flags	= FS_REQUIRES_DEV,
1270};
1271
1272static int __init init_ext2_fs(void)
1273{
1274	int err = init_ext2_xattr();
1275	if (err)
1276		return err;
1277	err = init_inodecache();
1278	if (err)
1279		goto out1;
1280        err = register_filesystem(&ext2_fs_type);
1281	if (err)
1282		goto out;
1283	return 0;
1284out:
1285	destroy_inodecache();
1286out1:
1287	exit_ext2_xattr();
1288	return err;
1289}
1290
1291static void __exit exit_ext2_fs(void)
1292{
1293	unregister_filesystem(&ext2_fs_type);
1294	destroy_inodecache();
1295	exit_ext2_xattr();
1296}
1297
1298module_init(init_ext2_fs)
1299module_exit(exit_ext2_fs)
1300