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