Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]
Version: [ 2.6.11.8 ] [ 2.6.25 ] [ 2.6.25.8 ] [ 2.6.31.13 ] Architecture: [ i386 ]
  1 /*
  2  *  linux/fs/ext4/super.c
  3  *
  4  * Copyright (C) 1992, 1993, 1994, 1995
  5  * Remy Card (card@masi.ibp.fr)
  6  * Laboratoire MASI - Institut Blaise Pascal
  7  * Universite Pierre et Marie Curie (Paris VI)
  8  *
  9  *  from
 10  *
 11  *  linux/fs/minix/inode.c
 12  *
 13  *  Copyright (C) 1991, 1992  Linus Torvalds
 14  *
 15  *  Big-endian to little-endian byte-swapping/bitmaps by
 16  *        David S. Miller (davem@caip.rutgers.edu), 1995
 17  */
 18 
 19 #include <linux/module.h>
 20 #include <linux/string.h>
 21 #include <linux/fs.h>
 22 #include <linux/time.h>
 23 #include <linux/vmalloc.h>
 24 #include <linux/jbd2.h>
 25 #include <linux/slab.h>
 26 #include <linux/init.h>
 27 #include <linux/blkdev.h>
 28 #include <linux/parser.h>
 29 #include <linux/smp_lock.h>
 30 #include <linux/buffer_head.h>
 31 #include <linux/exportfs.h>
 32 #include <linux/vfs.h>
 33 #include <linux/random.h>
 34 #include <linux/mount.h>
 35 #include <linux/namei.h>
 36 #include <linux/quotaops.h>
 37 #include <linux/seq_file.h>
 38 #include <linux/proc_fs.h>
 39 #include <linux/ctype.h>
 40 #include <linux/log2.h>
 41 #include <linux/crc16.h>
 42 #include <asm/uaccess.h>
 43 
 44 #include "ext4.h"
 45 #include "ext4_jbd2.h"
 46 #include "xattr.h"
 47 #include "acl.h"
 48 #include "mballoc.h"
 49 
 50 #define CREATE_TRACE_POINTS
 51 #include <trace/events/ext4.h>
 52 
 53 static int default_mb_history_length = 1000;
 54 
 55 module_param_named(default_mb_history_length, default_mb_history_length,
 56                    int, 0644);
 57 MODULE_PARM_DESC(default_mb_history_length,
 58                  "Default number of entries saved for mb_history");
 59 
 60 struct proc_dir_entry *ext4_proc_root;
 61 static struct kset *ext4_kset;
 62 
 63 static int ext4_load_journal(struct super_block *, struct ext4_super_block *,
 64                              unsigned long journal_devnum);
 65 static int ext4_commit_super(struct super_block *sb, int sync);
 66 static void ext4_mark_recovery_complete(struct super_block *sb,
 67                                         struct ext4_super_block *es);
 68 static void ext4_clear_journal_err(struct super_block *sb,
 69                                    struct ext4_super_block *es);
 70 static int ext4_sync_fs(struct super_block *sb, int wait);
 71 static const char *ext4_decode_error(struct super_block *sb, int errno,
 72                                      char nbuf[16]);
 73 static int ext4_remount(struct super_block *sb, int *flags, char *data);
 74 static int ext4_statfs(struct dentry *dentry, struct kstatfs *buf);
 75 static int ext4_unfreeze(struct super_block *sb);
 76 static void ext4_write_super(struct super_block *sb);
 77 static int ext4_freeze(struct super_block *sb);
 78 
 79 
 80 ext4_fsblk_t ext4_block_bitmap(struct super_block *sb,
 81                                struct ext4_group_desc *bg)
 82 {
 83         return le32_to_cpu(bg->bg_block_bitmap_lo) |
 84                 (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ?
 85                  (ext4_fsblk_t)le32_to_cpu(bg->bg_block_bitmap_hi) << 32 : 0);
 86 }
 87 
 88 ext4_fsblk_t ext4_inode_bitmap(struct super_block *sb,
 89                                struct ext4_group_desc *bg)
 90 {
 91         return le32_to_cpu(bg->bg_inode_bitmap_lo) |
 92                 (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ?
 93                  (ext4_fsblk_t)le32_to_cpu(bg->bg_inode_bitmap_hi) << 32 : 0);
 94 }
 95 
 96 ext4_fsblk_t ext4_inode_table(struct super_block *sb,
 97                               struct ext4_group_desc *bg)
 98 {
 99         return le32_to_cpu(bg->bg_inode_table_lo) |
100                 (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ?
101                  (ext4_fsblk_t)le32_to_cpu(bg->bg_inode_table_hi) << 32 : 0);
102 }
103 
104 __u32 ext4_free_blks_count(struct super_block *sb,
105                               struct ext4_group_desc *bg)
106 {
107         return le16_to_cpu(bg->bg_free_blocks_count_lo) |
108                 (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ?
109                  (__u32)le16_to_cpu(bg->bg_free_blocks_count_hi) << 16 : 0);
110 }
111 
112 __u32 ext4_free_inodes_count(struct super_block *sb,
113                               struct ext4_group_desc *bg)
114 {
115         return le16_to_cpu(bg->bg_free_inodes_count_lo) |
116                 (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ?
117                  (__u32)le16_to_cpu(bg->bg_free_inodes_count_hi) << 16 : 0);
118 }
119 
120 __u32 ext4_used_dirs_count(struct super_block *sb,
121                               struct ext4_group_desc *bg)
122 {
123         return le16_to_cpu(bg->bg_used_dirs_count_lo) |
124                 (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ?
125                  (__u32)le16_to_cpu(bg->bg_used_dirs_count_hi) << 16 : 0);
126 }
127 
128 __u32 ext4_itable_unused_count(struct super_block *sb,
129                               struct ext4_group_desc *bg)
130 {
131         return le16_to_cpu(bg->bg_itable_unused_lo) |
132                 (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ?
133                  (__u32)le16_to_cpu(bg->bg_itable_unused_hi) << 16 : 0);
134 }
135 
136 void ext4_block_bitmap_set(struct super_block *sb,
137                            struct ext4_group_desc *bg, ext4_fsblk_t blk)
138 {
139         bg->bg_block_bitmap_lo = cpu_to_le32((u32)blk);
140         if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT)
141                 bg->bg_block_bitmap_hi = cpu_to_le32(blk >> 32);
142 }
143 
144 void ext4_inode_bitmap_set(struct super_block *sb,
145                            struct ext4_group_desc *bg, ext4_fsblk_t blk)
146 {
147         bg->bg_inode_bitmap_lo  = cpu_to_le32((u32)blk);
148         if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT)
149                 bg->bg_inode_bitmap_hi = cpu_to_le32(blk >> 32);
150 }
151 
152 void ext4_inode_table_set(struct super_block *sb,
153                           struct ext4_group_desc *bg, ext4_fsblk_t blk)
154 {
155         bg->bg_inode_table_lo = cpu_to_le32((u32)blk);
156         if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT)
157                 bg->bg_inode_table_hi = cpu_to_le32(blk >> 32);
158 }
159 
160 void ext4_free_blks_set(struct super_block *sb,
161                           struct ext4_group_desc *bg, __u32 count)
162 {
163         bg->bg_free_blocks_count_lo = cpu_to_le16((__u16)count);
164         if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT)
165                 bg->bg_free_blocks_count_hi = cpu_to_le16(count >> 16);
166 }
167 
168 void ext4_free_inodes_set(struct super_block *sb,
169                           struct ext4_group_desc *bg, __u32 count)
170 {
171         bg->bg_free_inodes_count_lo = cpu_to_le16((__u16)count);
172         if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT)
173                 bg->bg_free_inodes_count_hi = cpu_to_le16(count >> 16);
174 }
175 
176 void ext4_used_dirs_set(struct super_block *sb,
177                           struct ext4_group_desc *bg, __u32 count)
178 {
179         bg->bg_used_dirs_count_lo = cpu_to_le16((__u16)count);
180         if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT)
181                 bg->bg_used_dirs_count_hi = cpu_to_le16(count >> 16);
182 }
183 
184 void ext4_itable_unused_set(struct super_block *sb,
185                           struct ext4_group_desc *bg, __u32 count)
186 {
187         bg->bg_itable_unused_lo = cpu_to_le16((__u16)count);
188         if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT)
189                 bg->bg_itable_unused_hi = cpu_to_le16(count >> 16);
190 }
191 
192 
193 /* Just increment the non-pointer handle value */
194 static handle_t *ext4_get_nojournal(void)
195 {
196         handle_t *handle = current->journal_info;
197         unsigned long ref_cnt = (unsigned long)handle;
198 
199         BUG_ON(ref_cnt >= EXT4_NOJOURNAL_MAX_REF_COUNT);
200 
201         ref_cnt++;
202         handle = (handle_t *)ref_cnt;
203 
204         current->journal_info = handle;
205         return handle;
206 }
207 
208 
209 /* Decrement the non-pointer handle value */
210 static void ext4_put_nojournal(handle_t *handle)
211 {
212         unsigned long ref_cnt = (unsigned long)handle;
213 
214         BUG_ON(ref_cnt == 0);
215 
216         ref_cnt--;
217         handle = (handle_t *)ref_cnt;
218 
219         current->journal_info = handle;
220 }
221 
222 /*
223  * Wrappers for jbd2_journal_start/end.
224  *
225  * The only special thing we need to do here is to make sure that all
226  * journal_end calls result in the superblock being marked dirty, so
227  * that sync() will call the filesystem's write_super callback if
228  * appropriate.
229  */
230 handle_t *ext4_journal_start_sb(struct super_block *sb, int nblocks)
231 {
232         journal_t *journal;
233 
234         if (sb->s_flags & MS_RDONLY)
235                 return ERR_PTR(-EROFS);
236 
237         /* Special case here: if the journal has aborted behind our
238          * backs (eg. EIO in the commit thread), then we still need to
239          * take the FS itself readonly cleanly. */
240         journal = EXT4_SB(sb)->s_journal;
241         if (journal) {
242                 if (is_journal_aborted(journal)) {
243                         ext4_abort(sb, __func__, "Detected aborted journal");
244                         return ERR_PTR(-EROFS);
245                 }
246                 return jbd2_journal_start(journal, nblocks);
247         }
248         return ext4_get_nojournal();
249 }
250 
251 /*
252  * The only special thing we need to do here is to make sure that all
253  * jbd2_journal_stop calls result in the superblock being marked dirty, so
254  * that sync() will call the filesystem's write_super callback if
255  * appropriate.
256  */
257 int __ext4_journal_stop(const char *where, handle_t *handle)
258 {
259         struct super_block *sb;
260         int err;
261         int rc;
262 
263         if (!ext4_handle_valid(handle)) {
264                 ext4_put_nojournal(handle);
265                 return 0;
266         }
267         sb = handle->h_transaction->t_journal->j_private;
268         err = handle->h_err;
269         rc = jbd2_journal_stop(handle);
270 
271         if (!err)
272                 err = rc;
273         if (err)
274                 __ext4_std_error(sb, where, err);
275         return err;
276 }
277 
278 void ext4_journal_abort_handle(const char *caller, const char *err_fn,
279                 struct buffer_head *bh, handle_t *handle, int err)
280 {
281         char nbuf[16];
282         const char *errstr = ext4_decode_error(NULL, err, nbuf);
283 
284         BUG_ON(!ext4_handle_valid(handle));
285 
286         if (bh)
287                 BUFFER_TRACE(bh, "abort");
288 
289         if (!handle->h_err)
290                 handle->h_err = err;
291 
292         if (is_handle_aborted(handle))
293                 return;
294 
295         printk(KERN_ERR "%s: aborting transaction: %s in %s\n",
296                caller, errstr, err_fn);
297 
298         jbd2_journal_abort_handle(handle);
299 }
300 
301 /* Deal with the reporting of failure conditions on a filesystem such as
302  * inconsistencies detected or read IO failures.
303  *
304  * On ext2, we can store the error state of the filesystem in the
305  * superblock.  That is not possible on ext4, because we may have other
306  * write ordering constraints on the superblock which prevent us from
307  * writing it out straight away; and given that the journal is about to
308  * be aborted, we can't rely on the current, or future, transactions to
309  * write out the superblock safely.
310  *
311  * We'll just use the jbd2_journal_abort() error code to record an error in
312  * the journal instead.  On recovery, the journal will compain about
313  * that error until we've noted it down and cleared it.
314  */
315 
316 static void ext4_handle_error(struct super_block *sb)
317 {
318         struct ext4_super_block *es = EXT4_SB(sb)->s_es;
319 
320         EXT4_SB(sb)->s_mount_state |= EXT4_ERROR_FS;
321         es->s_state |= cpu_to_le16(EXT4_ERROR_FS);
322 
323         if (sb->s_flags & MS_RDONLY)
324                 return;
325 
326         if (!test_opt(sb, ERRORS_CONT)) {
327                 journal_t *journal = EXT4_SB(sb)->s_journal;
328 
329                 EXT4_SB(sb)->s_mount_flags |= EXT4_MF_FS_ABORTED;
330                 if (journal)
331                         jbd2_journal_abort(journal, -EIO);
332         }
333         if (test_opt(sb, ERRORS_RO)) {
334                 ext4_msg(sb, KERN_CRIT, "Remounting filesystem read-only");
335                 sb->s_flags |= MS_RDONLY;
336         }
337         ext4_commit_super(sb, 1);
338         if (test_opt(sb, ERRORS_PANIC))
339                 panic("EXT4-fs (device %s): panic forced after error\n",
340                         sb->s_id);
341 }
342 
343 void ext4_error(struct super_block *sb, const char *function,
344                 const char *fmt, ...)
345 {
346         va_list args;
347 
348         va_start(args, fmt);
349         printk(KERN_CRIT "EXT4-fs error (device %s): %s: ", sb->s_id, function);
350         vprintk(fmt, args);
351         printk("\n");
352         va_end(args);
353 
354         ext4_handle_error(sb);
355 }
356 
357 static const char *ext4_decode_error(struct super_block *sb, int errno,
358                                      char nbuf[16])
359 {
360         char *errstr = NULL;
361 
362         switch (errno) {
363         case -EIO:
364                 errstr = "IO failure";
365                 break;
366         case -ENOMEM:
367                 errstr = "Out of memory";
368                 break;
369         case -EROFS:
370                 if (!sb || (EXT4_SB(sb)->s_journal &&
371                             EXT4_SB(sb)->s_journal->j_flags & JBD2_ABORT))
372                         errstr = "Journal has aborted";
373                 else
374                         errstr = "Readonly filesystem";
375                 break;
376         default:
377                 /* If the caller passed in an extra buffer for unknown
378                  * errors, textualise them now.  Else we just return
379                  * NULL. */
380                 if (nbuf) {
381                         /* Check for truncated error codes... */
382                         if (snprintf(nbuf, 16, "error %d", -errno) >= 0)
383                                 errstr = nbuf;
384                 }
385                 break;
386         }
387 
388         return errstr;
389 }
390 
391 /* __ext4_std_error decodes expected errors from journaling functions
392  * automatically and invokes the appropriate error response.  */
393 
394 void __ext4_std_error(struct super_block *sb, const char *function, int errno)
395 {
396         char nbuf[16];
397         const char *errstr;
398 
399         /* Special case: if the error is EROFS, and we're not already
400          * inside a transaction, then there's really no point in logging
401          * an error. */
402         if (errno == -EROFS && journal_current_handle() == NULL &&
403             (sb->s_flags & MS_RDONLY))
404                 return;
405 
406         errstr = ext4_decode_error(sb, errno, nbuf);
407         printk(KERN_CRIT "EXT4-fs error (device %s) in %s: %s\n",
408                sb->s_id, function, errstr);
409 
410         ext4_handle_error(sb);
411 }
412 
413 /*
414  * ext4_abort is a much stronger failure handler than ext4_error.  The
415  * abort function may be used to deal with unrecoverable failures such
416  * as journal IO errors or ENOMEM at a critical moment in log management.
417  *
418  * We unconditionally force the filesystem into an ABORT|READONLY state,
419  * unless the error response on the fs has been set to panic in which
420  * case we take the easy way out and panic immediately.
421  */
422 
423 void ext4_abort(struct super_block *sb, const char *function,
424                 const char *fmt, ...)
425 {
426         va_list args;
427 
428         va_start(args, fmt);
429         printk(KERN_CRIT "EXT4-fs error (device %s): %s: ", sb->s_id, function);
430         vprintk(fmt, args);
431         printk("\n");
432         va_end(args);
433 
434         if (test_opt(sb, ERRORS_PANIC))
435                 panic("EXT4-fs panic from previous error\n");
436 
437         if (sb->s_flags & MS_RDONLY)
438                 return;
439 
440         ext4_msg(sb, KERN_CRIT, "Remounting filesystem read-only");
441         EXT4_SB(sb)->s_mount_state |= EXT4_ERROR_FS;
442         sb->s_flags |= MS_RDONLY;
443         EXT4_SB(sb)->s_mount_flags |= EXT4_MF_FS_ABORTED;
444         if (EXT4_SB(sb)->s_journal)
445                 jbd2_journal_abort(EXT4_SB(sb)->s_journal, -EIO);
446 }
447 
448 void ext4_msg (struct super_block * sb, const char *prefix,
449                    const char *fmt, ...)
450 {
451         va_list args;
452 
453         va_start(args, fmt);
454         printk("%sEXT4-fs (%s): ", prefix, sb->s_id);
455         vprintk(fmt, args);
456         printk("\n");
457         va_end(args);
458 }
459 
460 void ext4_warning(struct super_block *sb, const char *function,
461                   const char *fmt, ...)
462 {
463         va_list args;
464 
465         va_start(args, fmt);
466         printk(KERN_WARNING "EXT4-fs warning (device %s): %s: ",
467                sb->s_id, function);
468         vprintk(fmt, args);
469         printk("\n");
470         va_end(args);
471 }
472 
473 void ext4_grp_locked_error(struct super_block *sb, ext4_group_t grp,
474                            const char *function, const char *fmt, ...)
475 __releases(bitlock)
476 __acquires(bitlock)
477 {
478         va_list args;
479         struct ext4_super_block *es = EXT4_SB(sb)->s_es;
480 
481         va_start(args, fmt);
482         printk(KERN_CRIT "EXT4-fs error (device %s): %s: ", sb->s_id, function);
483         vprintk(fmt, args);
484         printk("\n");
485         va_end(args);
486 
487         if (test_opt(sb, ERRORS_CONT)) {
488                 EXT4_SB(sb)->s_mount_state |= EXT4_ERROR_FS;
489                 es->s_state |= cpu_to_le16(EXT4_ERROR_FS);
490                 ext4_commit_super(sb, 0);
491                 return;
492         }
493         ext4_unlock_group(sb, grp);
494         ext4_handle_error(sb);
495         /*
496          * We only get here in the ERRORS_RO case; relocking the group
497          * may be dangerous, but nothing bad will happen since the
498          * filesystem will have already been marked read/only and the
499          * journal has been aborted.  We return 1 as a hint to callers
500          * who might what to use the return value from
501          * ext4_grp_locked_error() to distinguish beween the
502          * ERRORS_CONT and ERRORS_RO case, and perhaps return more
503          * aggressively from the ext4 function in question, with a
504          * more appropriate error code.
505          */
506         ext4_lock_group(sb, grp);
507         return;
508 }
509 
510 void ext4_update_dynamic_rev(struct super_block *sb)
511 {
512         struct ext4_super_block *es = EXT4_SB(sb)->s_es;
513 
514         if (le32_to_cpu(es->s_rev_level) > EXT4_GOOD_OLD_REV)
515                 return;
516 
517         ext4_warning(sb, __func__,
518                      "updating to rev %d because of new feature flag, "
519                      "running e2fsck is recommended",
520                      EXT4_DYNAMIC_REV);
521 
522         es->s_first_ino = cpu_to_le32(EXT4_GOOD_OLD_FIRST_INO);
523         es->s_inode_size = cpu_to_le16(EXT4_GOOD_OLD_INODE_SIZE);
524         es->s_rev_level = cpu_to_le32(EXT4_DYNAMIC_REV);
525         /* leave es->s_feature_*compat flags alone */
526         /* es->s_uuid will be set by e2fsck if empty */
527 
528         /*
529          * The rest of the superblock fields should be zero, and if not it
530          * means they are likely already in use, so leave them alone.  We
531          * can leave it up to e2fsck to clean up any inconsistencies there.
532          */
533 }
534 
535 /*
536  * Open the external journal device
537  */
538 static struct block_device *ext4_blkdev_get(dev_t dev, struct super_block *sb)
539 {
540         struct block_device *bdev;
541         char b[BDEVNAME_SIZE];
542 
543         bdev = open_by_devnum(dev, FMODE_READ|FMODE_WRITE);
544         if (IS_ERR(bdev))
545                 goto fail;
546         return bdev;
547 
548 fail:
549         ext4_msg(sb, KERN_ERR, "failed to open journal device %s: %ld",
550                         __bdevname(dev, b), PTR_ERR(bdev));
551         return NULL;
552 }
553 
554 /*
555  * Release the journal device
556  */
557 static int ext4_blkdev_put(struct block_device *bdev)
558 {
559         bd_release(bdev);
560         return blkdev_put(bdev, FMODE_READ|FMODE_WRITE);
561 }
562 
563 static int ext4_blkdev_remove(struct ext4_sb_info *sbi)
564 {
565         struct block_device *bdev;
566         int ret = -ENODEV;
567 
568         bdev = sbi->journal_bdev;
569         if (bdev) {
570                 ret = ext4_blkdev_put(bdev);
571                 sbi->journal_bdev = NULL;
572         }
573         return ret;
574 }
575 
576 static inline struct inode *orphan_list_entry(struct list_head *l)
577 {
578         return &list_entry(l, struct ext4_inode_info, i_orphan)->vfs_inode;
579 }
580 
581 static void dump_orphan_list(struct super_block *sb, struct ext4_sb_info *sbi)
582 {
583         struct list_head *l;
584 
585         ext4_msg(sb, KERN_ERR, "sb orphan head is %d",
586                  le32_to_cpu(sbi->s_es->s_last_orphan));
587 
588         printk(KERN_ERR "sb_info orphan list:\n");
589         list_for_each(l, &sbi->s_orphan) {
590                 struct inode *inode = orphan_list_entry(l);
591                 printk(KERN_ERR "  "
592                        "inode %s:%lu at %p: mode %o, nlink %d, next %d\n",
593                        inode->i_sb->s_id, inode->i_ino, inode,
594                        inode->i_mode, inode->i_nlink,
595                        NEXT_ORPHAN(inode));
596         }
597 }
598 
599 static void ext4_put_super(struct super_block *sb)
600 {
601         struct ext4_sb_info *sbi = EXT4_SB(sb);
602         struct ext4_super_block *es = sbi->s_es;
603         int i, err;
604 
605         flush_workqueue(sbi->dio_unwritten_wq);
606         destroy_workqueue(sbi->dio_unwritten_wq);
607 
608         lock_super(sb);
609         lock_kernel();
610         if (sb->s_dirt)
611                 ext4_commit_super(sb, 1);
612 
613         if (sbi->s_journal) {
614                 err = jbd2_journal_destroy(sbi->s_journal);
615                 sbi->s_journal = NULL;
616                 if (err < 0)
617                         ext4_abort(sb, __func__,
618                                    "Couldn't clean up the journal");
619         }
620 
621         ext4_release_system_zone(sb);
622         ext4_mb_release(sb);
623         ext4_ext_release(sb);
624         ext4_xattr_put_super(sb);
625 
626         if (!(sb->s_flags & MS_RDONLY)) {
627                 EXT4_CLEAR_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_RECOVER);
628                 es->s_state = cpu_to_le16(sbi->s_mount_state);
629                 ext4_commit_super(sb, 1);
630         }
631         if (sbi->s_proc) {
632                 remove_proc_entry(sb->s_id, ext4_proc_root);
633         }
634         kobject_del(&sbi->s_kobj);
635 
636         for (i = 0; i < sbi->s_gdb_count; i++)
637                 brelse(sbi->s_group_desc[i]);
638         kfree(sbi->s_group_desc);
639         if (is_vmalloc_addr(sbi->s_flex_groups))
640                 vfree(sbi->s_flex_groups);
641         else
642                 kfree(sbi->s_flex_groups);
643         percpu_counter_destroy(&sbi->s_freeblocks_counter);
644         percpu_counter_destroy(&sbi->s_freeinodes_counter);
645         percpu_counter_destroy(&sbi->s_dirs_counter);
646         percpu_counter_destroy(&sbi->s_dirtyblocks_counter);
647         brelse(sbi->s_sbh);
648 #ifdef CONFIG_QUOTA
649         for (i = 0; i < MAXQUOTAS; i++)
650                 kfree(sbi->s_qf_names[i]);
651 #endif
652 
653         /* Debugging code just in case the in-memory inode orphan list
654          * isn't empty.  The on-disk one can be non-empty if we've
655          * detected an error and taken the fs readonly, but the
656          * in-memory list had better be clean by this point. */
657         if (!list_empty(&sbi->s_orphan))
658                 dump_orphan_list(sb, sbi);
659         J_ASSERT(list_empty(&sbi->s_orphan));
660 
661         invalidate_bdev(sb->s_bdev);
662         if (sbi->journal_bdev && sbi->journal_bdev != sb->s_bdev) {
663                 /*
664                  * Invalidate the journal device's buffers.  We don't want them
665                  * floating about in memory - the physical journal device may
666                  * hotswapped, and it breaks the `ro-after' testing code.
667                  */
668                 sync_blockdev(sbi->journal_bdev);
669                 invalidate_bdev(sbi->journal_bdev);
670                 ext4_blkdev_remove(sbi);
671         }
672         sb->s_fs_info = NULL;
673         /*
674          * Now that we are completely done shutting down the
675          * superblock, we need to actually destroy the kobject.
676          */
677         unlock_kernel();
678         unlock_super(sb);
679         kobject_put(&sbi->s_kobj);
680         wait_for_completion(&sbi->s_kobj_unregister);
681         kfree(sbi->s_blockgroup_lock);
682         kfree(sbi);
683 }
684 
685 static struct kmem_cache *ext4_inode_cachep;
686 
687 /*
688  * Called inside transaction, so use GFP_NOFS
689  */
690 static struct inode *ext4_alloc_inode(struct super_block *sb)
691 {
692         struct ext4_inode_info *ei;
693 
694         ei = kmem_cache_alloc(ext4_inode_cachep, GFP_NOFS);
695         if (!ei)
696                 return NULL;
697 
698         ei->vfs_inode.i_version = 1;
699         ei->vfs_inode.i_data.writeback_index = 0;
700         memset(&ei->i_cached_extent, 0, sizeof(struct ext4_ext_cache));
701         INIT_LIST_HEAD(&ei->i_prealloc_list);
702         spin_lock_init(&ei->i_prealloc_lock);
703         /*
704          * Note:  We can be called before EXT4_SB(sb)->s_journal is set,
705          * therefore it can be null here.  Don't check it, just initialize
706          * jinode.
707          */
708         jbd2_journal_init_jbd_inode(&ei->jinode, &ei->vfs_inode);
709         ei->i_reserved_data_blocks = 0;
710         ei->i_reserved_meta_blocks = 0;
711         ei->i_allocated_meta_blocks = 0;
712         ei->i_delalloc_reserved_flag = 0;
713         spin_lock_init(&(ei->i_block_reservation_lock));
714 #ifdef CONFIG_QUOTA
715         ei->i_reserved_quota = 0;
716 #endif
717         INIT_LIST_HEAD(&ei->i_aio_dio_complete_list);
718         ei->cur_aio_dio = NULL;
719         ei->i_sync_tid = 0;
720         ei->i_datasync_tid = 0;
721 
722         return &ei->vfs_inode;
723 }
724 
725 static void ext4_destroy_inode(struct inode *inode)
726 {
727         if (!list_empty(&(EXT4_I(inode)->i_orphan))) {
728                 ext4_msg(inode->i_sb, KERN_ERR,
729                          "Inode %lu (%p): orphan list check failed!",
730                          inode->i_ino, EXT4_I(inode));
731                 print_hex_dump(KERN_INFO, "", DUMP_PREFIX_ADDRESS, 16, 4,
732                                 EXT4_I(inode), sizeof(struct ext4_inode_info),
733                                 true);
734                 dump_stack();
735         }
736         kmem_cache_free(ext4_inode_cachep, EXT4_I(inode));
737 }
738 
739 static void init_once(void *foo)
740 {
741         struct ext4_inode_info *ei = (struct ext4_inode_info *) foo;
742 
743         INIT_LIST_HEAD(&ei->i_orphan);
744 #ifdef CONFIG_EXT4_FS_XATTR
745         init_rwsem(&ei->xattr_sem);
746 #endif
747         init_rwsem(&ei->i_data_sem);
748         inode_init_once(&ei->vfs_inode);
749 }
750 
751 static int init_inodecache(void)
752 {
753         ext4_inode_cachep = kmem_cache_create("ext4_inode_cache",
754                                              sizeof(struct ext4_inode_info),
755                                              0, (SLAB_RECLAIM_ACCOUNT|
756                                                 SLAB_MEM_SPREAD),
757                                              init_once);
758         if (ext4_inode_cachep == NULL)
759                 return -ENOMEM;
760         return 0;
761 }
762 
763 static void destroy_inodecache(void)
764 {
765         kmem_cache_destroy(ext4_inode_cachep);
766 }
767 
768 static void ext4_clear_inode(struct inode *inode)
769 {
770         ext4_discard_preallocations(inode);
771         if (EXT4_JOURNAL(inode))
772                 jbd2_journal_release_jbd_inode(EXT4_SB(inode->i_sb)->s_journal,
773                                        &EXT4_I(inode)->jinode);
774 }
775 
776 static inline void ext4_show_quota_options(struct seq_file *seq,
777                                            struct super_block *sb)
778 {
779 #if defined(CONFIG_QUOTA)
780         struct ext4_sb_info *sbi = EXT4_SB(sb);
781 
782         if (sbi->s_jquota_fmt)
783                 seq_printf(seq, ",jqfmt=%s",
784                 (sbi->s_jquota_fmt == QFMT_VFS_OLD) ? "vfsold" : "vfsv0");
785 
786         if (sbi->s_qf_names[USRQUOTA])
787                 seq_printf(seq, ",usrjquota=%s", sbi->s_qf_names[USRQUOTA]);
788 
789         if (sbi->s_qf_names[GRPQUOTA])
790                 seq_printf(seq, ",grpjquota=%s", sbi->s_qf_names[GRPQUOTA]);
791 
792         if (sbi->s_mount_opt & EXT4_MOUNT_USRQUOTA)
793                 seq_puts(seq, ",usrquota");
794 
795         if (sbi->s_mount_opt & EXT4_MOUNT_GRPQUOTA)
796                 seq_puts(seq, ",grpquota");
797 #endif
798 }
799 
800 /*
801  * Show an option if
802  *  - it's set to a non-default value OR
803  *  - if the per-sb default is different from the global default
804  */
805 static int ext4_show_options(struct seq_file *seq, struct vfsmount *vfs)
806 {
807         int def_errors;
808         unsigned long def_mount_opts;
809         struct super_block *sb = vfs->mnt_sb;
810         struct ext4_sb_info *sbi = EXT4_SB(sb);
811         struct ext4_super_block *es = sbi->s_es;
812 
813         def_mount_opts = le32_to_cpu(es->s_default_mount_opts);
814         def_errors     = le16_to_cpu(es->s_errors);
815 
816         if (sbi->s_sb_block != 1)
817                 seq_printf(seq, ",sb=%llu", sbi->s_sb_block);
818         if (test_opt(sb, MINIX_DF))
819                 seq_puts(seq, ",minixdf");
820         if (test_opt(sb, GRPID) && !(def_mount_opts & EXT4_DEFM_BSDGROUPS))
821                 seq_puts(seq, ",grpid");
822         if (!test_opt(sb, GRPID) && (def_mount_opts & EXT4_DEFM_BSDGROUPS))
823                 seq_puts(seq, ",nogrpid");
824         if (sbi->s_resuid != EXT4_DEF_RESUID ||
825             le16_to_cpu(es->s_def_resuid) != EXT4_DEF_RESUID) {
826                 seq_printf(seq, ",resuid=%u", sbi->s_resuid);
827         }
828         if (sbi->s_resgid != EXT4_DEF_RESGID ||
829             le16_to_cpu(es->s_def_resgid) != EXT4_DEF_RESGID) {
830                 seq_printf(seq, ",resgid=%u", sbi->s_resgid);
831         }
832         if (test_opt(sb, ERRORS_RO)) {
833                 if (def_errors == EXT4_ERRORS_PANIC ||
834                     def_errors == EXT4_ERRORS_CONTINUE) {
835                         seq_puts(seq, ",errors=remount-ro");
836                 }
837         }
838         if (test_opt(sb, ERRORS_CONT) && def_errors != EXT4_ERRORS_CONTINUE)
839                 seq_puts(seq, ",errors=continue");
840         if (test_opt(sb, ERRORS_PANIC) && def_errors != EXT4_ERRORS_PANIC)
841                 seq_puts(seq, ",errors=panic");
842         if (test_opt(sb, NO_UID32) && !(def_mount_opts & EXT4_DEFM_UID16))
843                 seq_puts(seq, ",nouid32");
844         if (test_opt(sb, DEBUG) && !(def_mount_opts & EXT4_DEFM_DEBUG))
845                 seq_puts(seq, ",debug");
846         if (test_opt(sb, OLDALLOC))
847                 seq_puts(seq, ",oldalloc");
848 #ifdef CONFIG_EXT4_FS_XATTR
849         if (test_opt(sb, XATTR_USER) &&
850                 !(def_mount_opts & EXT4_DEFM_XATTR_USER))
851                 seq_puts(seq, ",user_xattr");
852         if (!test_opt(sb, XATTR_USER) &&
853             (def_mount_opts & EXT4_DEFM_XATTR_USER)) {
854                 seq_puts(seq, ",nouser_xattr");
855         }
856 #endif
857 #ifdef CONFIG_EXT4_FS_POSIX_ACL
858         if (test_opt(sb, POSIX_ACL) && !(def_mount_opts & EXT4_DEFM_ACL))
859                 seq_puts(seq, ",acl");
860         if (!test_opt(sb, POSIX_ACL) && (def_mount_opts & EXT4_DEFM_ACL))
861                 seq_puts(seq, ",noacl");
862 #endif
863         if (sbi->s_commit_interval != JBD2_DEFAULT_MAX_COMMIT_AGE*HZ) {
864                 seq_printf(seq, ",commit=%u",
865                            (unsigned) (sbi->s_commit_interval / HZ));
866         }
867         if (sbi->s_min_batch_time != EXT4_DEF_MIN_BATCH_TIME) {
868                 seq_printf(seq, ",min_batch_time=%u",
869                            (unsigned) sbi->s_min_batch_time);
870         }
871         if (sbi->s_max_batch_time != EXT4_DEF_MAX_BATCH_TIME) {
872                 seq_printf(seq, ",max_batch_time=%u",
873                            (unsigned) sbi->s_min_batch_time);
874         }
875 
876         /*
877          * We're changing the default of barrier mount option, so
878          * let's always display its mount state so it's clear what its
879          * status is.
880          */
881         seq_puts(seq, ",barrier=");
882         seq_puts(seq, test_opt(sb, BARRIER) ? "1" : "");
883         if (test_opt(sb, JOURNAL_ASYNC_COMMIT))
884                 seq_puts(seq, ",journal_async_commit");
885         if (test_opt(sb, NOBH))
886                 seq_puts(seq, ",nobh");
887         if (test_opt(sb, I_VERSION))
888                 seq_puts(seq, ",i_version");
889         if (!test_opt(sb, DELALLOC))
890                 seq_puts(seq, ",nodelalloc");
891 
892 
893         if (sbi->s_stripe)
894                 seq_printf(seq, ",stripe=%lu", sbi->s_stripe);
895         /*
896          * journal mode get enabled in different ways
897          * So just print the value even if we didn't specify it
898          */
899         if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA)
900                 seq_puts(seq, ",data=journal");
901         else if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_ORDERED_DATA)
902                 seq_puts(seq, ",data=ordered");
903         else if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_WRITEBACK_DATA)
904                 seq_puts(seq, ",data=writeback");
905 
906         if (sbi->s_inode_readahead_blks != EXT4_DEF_INODE_READAHEAD_BLKS)
907                 seq_printf(seq, ",inode_readahead_blks=%u",
908                            sbi->s_inode_readahead_blks);
909 
910         if (test_opt(sb, DATA_ERR_ABORT))
911                 seq_puts(seq, ",data_err=abort");
912 
913         if (test_opt(sb, NO_AUTO_DA_ALLOC))
914                 seq_puts(seq, ",noauto_da_alloc");
915 
916         if (test_opt(sb, DISCARD))
917                 seq_puts(seq, ",discard");
918 
919         if (test_opt(sb, NOLOAD))
920                 seq_puts(seq, ",norecovery");
921 
922         ext4_show_quota_options(seq, sb);
923 
924         return 0;
925 }
926 
927 static struct inode *ext4_nfs_get_inode(struct super_block *sb,
928                                         u64 ino, u32 generation)
929 {
930         struct inode *inode;
931 
932         if (ino < EXT4_FIRST_INO(sb) && ino != EXT4_ROOT_INO)
933                 return ERR_PTR(-ESTALE);
934         if (ino > le32_to_cpu(EXT4_SB(sb)->s_es->s_inodes_count))
935                 return ERR_PTR(-ESTALE);
936 
937         /* iget isn't really right if the inode is currently unallocated!!
938          *
939          * ext4_read_inode will return a bad_inode if the inode had been
940          * deleted, so we should be safe.
941          *
942          * Currently we don't know the generation for parent directory, so
943          * a generation of 0 means "accept any"
944          */
945         inode = ext4_iget(sb, ino);
946         if (IS_ERR(inode))
947                 return ERR_CAST(inode);
948         if (generation && inode->i_generation != generation) {
949                 iput(inode);
950                 return ERR_PTR(-ESTALE);
951         }
952 
953         return inode;
954 }
955 
956 static struct dentry *ext4_fh_to_dentry(struct super_block *sb, struct fid *fid,
957                                         int fh_len, int fh_type)
958 {
959         return generic_fh_to_dentry(sb, fid, fh_len, fh_type,
960                                     ext4_nfs_get_inode);
961 }
962 
963 static struct dentry *ext4_fh_to_parent(struct super_block *sb, struct fid *fid,
964                                         int fh_len, int fh_type)
965 {
966         return generic_fh_to_parent(sb, fid, fh_len, fh_type,
967                                     ext4_nfs_get_inode);
968 }
969 
970 /*
971  * Try to release metadata pages (indirect blocks, directories) which are
972  * mapped via the block device.  Since these pages could have journal heads
973  * which would prevent try_to_free_buffers() from freeing them, we must use
974  * jbd2 layer's try_to_free_buffers() function to release them.
975  */
976 static int bdev_try_to_free_page(struct super_block *sb, struct page *page,
977                                  gfp_t wait)
978 {
979         journal_t *journal = EXT4_SB(sb)->s_journal;
980 
981         WARN_ON(PageChecked(page));
982         if (!page_has_buffers(page))
983                 return 0;
984         if (journal)
985                 return jbd2_journal_try_to_free_buffers(journal, page,
986                                                         wait & ~__GFP_WAIT);
987         return try_to_free_buffers(page);
988 }
989 
990 #ifdef CONFIG_QUOTA
991 #define QTYPE2NAME(t) ((t) == USRQUOTA ? "user" : "group")
992 #define QTYPE2MOPT(on, t) ((t) == USRQUOTA?((on)##USRJQUOTA):((on)##GRPJQUOTA))
993 
994 static int ext4_write_dquot(struct dquot *dquot);
995 static int ext4_acquire_dquot(struct dquot *dquot);
996 static int ext4_release_dquot(struct dquot *dquot);
997 static int ext4_mark_dquot_dirty(struct dquot *dquot);
998 static int ext4_write_info(struct super_block *sb, int type);
999 static int ext4_quota_on(struct super_block *sb, int type, int format_id,
1000                                 char *path, int remount);
1001 static int ext4_quota_on_mount(struct super_block *sb, int type);
1002 static ssize_t ext4_quota_read(struct super_block *sb, int type, char *data,
1003                                size_t len, loff_t off);
1004 static ssize_t ext4_quota_write(struct super_block *sb, int type,
1005                                 const char *data, size_t len, loff_t off);
1006 
1007 static struct dquot_operations ext4_quota_operations = {
1008         .initialize     = dquot_initialize,
1009         .drop           = dquot_drop,
1010         .alloc_space    = dquot_alloc_space,
1011         .reserve_space  = dquot_reserve_space,
1012         .claim_space    = dquot_claim_space,
1013         .release_rsv    = dquot_release_reserved_space,
1014 #ifdef CONFIG_QUOTA
1015         .get_reserved_space = ext4_get_reserved_space,
1016 #endif
1017         .alloc_inode    = dquot_alloc_inode,
1018         .free_space     = dquot_free_space,
1019         .free_inode     = dquot_free_inode,
1020         .transfer       = dquot_transfer,
1021         .write_dquot    = ext4_write_dquot,
1022         .acquire_dquot  = ext4_acquire_dquot,
1023         .release_dquot  = ext4_release_dquot,
1024         .mark_dirty     = ext4_mark_dquot_dirty,
1025         .write_info     = ext4_write_info,
1026         .alloc_dquot    = dquot_alloc,
1027         .destroy_dquot  = dquot_destroy,
1028 };
1029 
1030 static struct quotactl_ops ext4_qctl_operations = {
1031         .quota_on       = ext4_quota_on,
1032         .quota_off      = vfs_quota_off,
1033         .quota_sync     = vfs_quota_sync,
1034         .get_info       = vfs_get_dqinfo,
1035         .set_info       = vfs_set_dqinfo,
1036         .get_dqblk      = vfs_get_dqblk,
1037         .set_dqblk      = vfs_set_dqblk
1038 };
1039 #endif
1040 
1041 static const struct super_operations ext4_sops = {
1042         .alloc_inode    = ext4_alloc_inode,
1043         .destroy_inode  = ext4_destroy_inode,
1044         .write_inode    = ext4_write_inode,
1045         .dirty_inode    = ext4_dirty_inode,
1046         .delete_inode   = ext4_delete_inode,
1047         .put_super      = ext4_put_super,
1048         .sync_fs        = ext4_sync_fs,
1049         .freeze_fs      = ext4_freeze,
1050         .unfreeze_fs    = ext4_unfreeze,
1051         .statfs         = ext4_statfs,
1052         .remount_fs     = ext4_remount,
1053         .clear_inode    = ext4_clear_inode,
1054         .show_options   = ext4_show_options,
1055 #ifdef CONFIG_QUOTA
1056         .quota_read     = ext4_quota_read,
1057         .quota_write    = ext4_quota_write,
1058 #endif
1059         .bdev_try_to_free_page = bdev_try_to_free_page,
1060 };
1061 
1062 static const struct super_operations ext4_nojournal_sops = {
1063         .alloc_inode    = ext4_alloc_inode,
1064         .destroy_inode  = ext4_destroy_inode,
1065         .write_inode    = ext4_write_inode,
1066         .dirty_inode    = ext4_dirty_inode,
1067         .delete_inode   = ext4_delete_inode,
1068         .write_super    = ext4_write_super,
1069         .put_super      = ext4_put_super,
1070         .statfs         = ext4_statfs,
1071         .remount_fs     = ext4_remount,
1072         .clear_inode    = ext4_clear_inode,
1073         .show_options   = ext4_show_options,
1074 #ifdef CONFIG_QUOTA
1075         .quota_read     = ext4_quota_read,
1076         .quota_write    = ext4_quota_write,
1077 #endif
1078         .bdev_try_to_free_page = bdev_try_to_free_page,
1079 };
1080 
1081 static const struct export_operations ext4_export_ops = {
1082         .fh_to_dentry = ext4_fh_to_dentry,
1083         .fh_to_parent = ext4_fh_to_parent,
1084         .get_parent = ext4_get_parent,
1085 };
1086 
1087 enum {
1088         Opt_bsd_df, Opt_minix_df, Opt_grpid, Opt_nogrpid,
1089         Opt_resgid, Opt_resuid, Opt_sb, Opt_err_cont, Opt_err_panic, Opt_err_ro,
1090         Opt_nouid32, Opt_debug, Opt_oldalloc, Opt_orlov,
1091         Opt_user_xattr, Opt_nouser_xattr, Opt_acl, Opt_noacl,
1092         Opt_auto_da_alloc, Opt_noauto_da_alloc, Opt_noload, Opt_nobh, Opt_bh,
1093         Opt_commit, Opt_min_batch_time, Opt_max_batch_time,
1094         Opt_journal_update, Opt_journal_dev,
1095         Opt_journal_checksum, Opt_journal_async_commit,
1096         Opt_abort, Opt_data_journal, Opt_data_ordered, Opt_data_writeback,
1097         Opt_data_err_abort, Opt_data_err_ignore, Opt_mb_history_length,
1098         Opt_usrjquota, Opt_grpjquota, Opt_offusrjquota, Opt_offgrpjquota,
1099         Opt_jqfmt_vfsold, Opt_jqfmt_vfsv0, Opt_quota, Opt_noquota,
1100         Opt_ignore, Opt_barrier, Opt_nobarrier, Opt_err, Opt_resize,
1101         Opt_usrquota, Opt_grpquota, Opt_i_version,
1102         Opt_stripe, Opt_delalloc, Opt_nodelalloc,
1103         Opt_block_validity, Opt_noblock_validity,
1104         Opt_inode_readahead_blks, Opt_journal_ioprio,
1105         Opt_discard, Opt_nodiscard,
1106 };
1107 
1108 static const match_table_t tokens = {
1109         {Opt_bsd_df, "bsddf"},
1110         {Opt_minix_df, "minixdf"},
1111         {Opt_grpid, "grpid"},
1112         {Opt_grpid, "bsdgroups"},
1113         {Opt_nogrpid, "nogrpid"},
1114         {Opt_nogrpid, "sysvgroups"},
1115         {Opt_resgid, "resgid=%u"},
1116         {Opt_resuid, "resuid=%u"},
1117         {Opt_sb, "sb=%u"},
1118         {Opt_err_cont, "errors=continue"},
1119         {Opt_err_panic, "errors=panic"},
1120         {Opt_err_ro, "errors=remount-ro"},
1121         {Opt_nouid32, "nouid32"},
1122         {Opt_debug, "debug"},
1123         {Opt_oldalloc, "oldalloc"},
1124         {Opt_orlov, "orlov"},
1125         {Opt_user_xattr, "user_xattr"},
1126         {Opt_nouser_xattr, "nouser_xattr"},
1127         {Opt_acl, "acl"},
1128         {Opt_noacl, "noacl"},
1129         {Opt_noload, "noload"},
1130         {Opt_noload, "norecovery"},
1131         {Opt_nobh, "nobh"},
1132         {Opt_bh, "bh"},
1133         {Opt_commit, "commit=%u"},
1134         {Opt_min_batch_time, "min_batch_time=%u"},
1135         {Opt_max_batch_time, "max_batch_time=%u"},
1136         {Opt_journal_update, "journal=update"},
1137         {Opt_journal_dev, "journal_dev=%u"},
1138         {Opt_journal_checksum, "journal_checksum"},
1139         {Opt_journal_async_commit, "journal_async_commit"},
1140         {Opt_abort, "abort"},
1141         {Opt_data_journal, "data=journal"},
1142         {Opt_data_ordered, "data=ordered"},
1143         {Opt_data_writeback, "data=writeback"},
1144         {Opt_data_err_abort, "data_err=abort"},
1145         {Opt_data_err_ignore, "data_err=ignore"},
1146         {Opt_mb_history_length, "mb_history_length=%u"},
1147         {Opt_offusrjquota, "usrjquota="},
1148         {Opt_usrjquota, "usrjquota=%s"},
1149         {Opt_offgrpjquota, "grpjquota="},
1150         {Opt_grpjquota, "grpjquota=%s"},
1151         {Opt_jqfmt_vfsold, "jqfmt=vfsold"},
1152         {Opt_jqfmt_vfsv0, "jqfmt=vfsv0"},
1153         {Opt_grpquota, "grpquota"},
1154         {Opt_noquota, "noquota"},
1155         {Opt_quota, "quota"},
1156         {Opt_usrquota, "usrquota"},
1157         {Opt_barrier, "barrier=%u"},
1158         {Opt_barrier, "barrier"},
1159         {Opt_nobarrier, "nobarrier"},
1160         {Opt_i_version, "i_version"},
1161         {Opt_stripe, "stripe=%u"},
1162         {Opt_resize, "resize"},
1163         {Opt_delalloc, "delalloc"},
1164         {Opt_nodelalloc, "nodelalloc"},
1165         {Opt_block_validity, "block_validity"},
1166         {Opt_noblock_validity, "noblock_validity"},
1167         {Opt_inode_readahead_blks, "inode_readahead_blks=%u"},
1168         {Opt_journal_ioprio, "journal_ioprio=%u"},
1169         {Opt_auto_da_alloc, "auto_da_alloc=%u"},
1170         {Opt_auto_da_alloc, "auto_da_alloc"},
1171         {Opt_noauto_da_alloc, "noauto_da_alloc"},
1172         {Opt_discard, "discard"},
1173         {Opt_nodiscard, "nodiscard"},
1174         {Opt_err, NULL},
1175 };
1176 
1177 static ext4_fsblk_t get_sb_block(void **data)
1178 {
1179         ext4_fsblk_t    sb_block;
1180         char            *options = (char *) *data;
1181 
1182         if (!options || strncmp(options, "sb=", 3) != 0)
1183                 return 1;       /* Default location */
1184 
1185         options += 3;
1186         /* TODO: use simple_strtoll with >32bit ext4 */
1187         sb_block = simple_strtoul(options, &options, 0);
1188         if (*options && *options != ',') {
1189                 printk(KERN_ERR "EXT4-fs: Invalid sb specification: %s\n",
1190                        (char *) *data);
1191                 return 1;
1192         }
1193         if (*options == ',')
1194                 options++;
1195         *data = (void *) options;
1196 
1197         return sb_block;
1198 }
1199 
1200 #define DEFAULT_JOURNAL_IOPRIO (IOPRIO_PRIO_VALUE(IOPRIO_CLASS_BE, 3))
1201 
1202 static int parse_options(char *options, struct super_block *sb,
1203                          unsigned long *journal_devnum,
1204                          unsigned int *journal_ioprio,
1205                          ext4_fsblk_t *n_blocks_count, int is_remount)
1206 {
1207         struct ext4_sb_info *sbi = EXT4_SB(sb);
1208         char *p;
1209         substring_t args[MAX_OPT_ARGS];
1210         int data_opt = 0;
1211         int option;
1212 #ifdef CONFIG_QUOTA
1213         int qtype, qfmt;
1214         char *qname;
1215 #endif
1216 
1217         if (!options)
1218                 return 1;
1219 
1220         while ((p = strsep(&options, ",")) != NULL) {
1221                 int token;
1222                 if (!*p)
1223                         continue;
1224 
1225                 token = match_token(p, tokens, args);
1226                 switch (token) {
1227                 case Opt_bsd_df:
1228                         clear_opt(sbi->s_mount_opt, MINIX_DF);
1229                         break;
1230                 case Opt_minix_df:
1231                         set_opt(sbi->s_mount_opt, MINIX_DF);
1232                         break;
1233                 case Opt_grpid:
1234                         set_opt(sbi->s_mount_opt, GRPID);
1235                         break;
1236                 case Opt_nogrpid:
1237                         clear_opt(sbi->s_mount_opt, GRPID);
1238                         break;
1239                 case Opt_resuid:
1240                         if (match_int(&args[0], &option))
1241                                 return 0;
1242                         sbi->s_resuid = option;
1243                         break;
1244                 case Opt_resgid:
1245                         if (match_int(&args[0], &option))
1246                                 return 0;
1247                         sbi->s_resgid = option;
1248                         break;
1249                 case Opt_sb:
1250                         /* handled by get_sb_block() instead of here */
1251                         /* *sb_block = match_int(&args[0]); */
1252                         break;
1253                 case Opt_err_panic:
1254                         clear_opt(sbi->s_mount_opt, ERRORS_CONT);
1255                         clear_opt(sbi->s_mount_opt, ERRORS_RO);
1256                         set_opt(sbi->s_mount_opt, ERRORS_PANIC);
1257                         break;
1258                 case Opt_err_ro:
1259                         clear_opt(sbi->s_mount_opt, ERRORS_CONT);
1260                         clear_opt(sbi->s_mount_opt, ERRORS_PANIC);
1261                         set_opt(sbi->s_mount_opt, ERRORS_RO);
1262                         break;
1263                 case Opt_err_cont:
1264                         clear_opt(sbi->s_mount_opt, ERRORS_RO);
1265                         clear_opt(sbi->s_mount_opt, ERRORS_PANIC);
1266                         set_opt(sbi->s_mount_opt, ERRORS_CONT);
1267                         break;
1268                 case Opt_nouid32:
1269                         set_opt(sbi->s_mount_opt, NO_UID32);
1270                         break;
1271                 case Opt_debug:
1272                         set_opt(sbi->s_mount_opt, DEBUG);
1273                         break;
1274                 case Opt_oldalloc:
1275                         set_opt(sbi->s_mount_opt, OLDALLOC);
1276                         break;
1277                 case Opt_orlov:
1278                         clear_opt(sbi->s_mount_opt, OLDALLOC);
1279                         break;
1280 #ifdef CONFIG_EXT4_FS_XATTR
1281                 case Opt_user_xattr:
1282                         set_opt(sbi->s_mount_opt, XATTR_USER);
1283                         break;
1284                 case Opt_nouser_xattr:
1285                         clear_opt(sbi->s_mount_opt, XATTR_USER);
1286                         break;
1287 #else
1288                 case Opt_user_xattr:
1289                 case Opt_nouser_xattr:
1290                         ext4_msg(sb, KERN_ERR, "(no)user_xattr options not supported");
1291                         break;
1292 #endif
1293 #ifdef CONFIG_EXT4_FS_POSIX_ACL
1294                 case Opt_acl:
1295                         set_opt(sbi->s_mount_opt, POSIX_ACL);
1296                         break;
1297                 case Opt_noacl:
1298                         clear_opt(sbi->s_mount_opt, POSIX_ACL);
1299                         break;
1300 #else
1301                 case Opt_acl:
1302                 case Opt_noacl:
1303                         ext4_msg(sb, KERN_ERR, "(no)acl options not supported");
1304                         break;
1305 #endif
1306                 case Opt_journal_update:
1307                         /* @@@ FIXME */
1308                         /* Eventually we will want to be able to create
1309                            a journal file here.  For now, only allow the
1310                            user to specify an existing inode to be the
1311                            journal file. */
1312                         if (is_remount) {
1313                                 ext4_msg(sb, KERN_ERR,
1314                                          "Cannot specify journal on remount");
1315                                 return 0;
1316                         }
1317                         set_opt(sbi->s_mount_opt, UPDATE_JOURNAL);
1318                         break;
1319                 case Opt_journal_dev:
1320                         if (is_remount) {
1321                                 ext4_msg(sb, KERN_ERR,
1322                                         "Cannot specify journal on remount");
1323                                 return 0;
1324                         }
1325                         if (match_int(&args[0], &option))
1326                                 return 0;
1327                         *journal_devnum = option;
1328                         break;
1329                 case Opt_journal_checksum:
1330                         set_opt(sbi->s_mount_opt, JOURNAL_CHECKSUM);
1331                         break;
1332                 case Opt_journal_async_commit:
1333                         set_opt(sbi->s_mount_opt, JOURNAL_ASYNC_COMMIT);
1334                         set_opt(sbi->s_mount_opt, JOURNAL_CHECKSUM);
1335                         break;
1336                 case Opt_noload:
1337                         set_opt(sbi->s_mount_opt, NOLOAD);
1338                         break;
1339                 case Opt_commit:
1340                         if (match_int(&args[0], &option))
1341                                 return 0;
1342                         if (option < 0)
1343                                 return 0;
1344                         if (option == 0)
1345                                 option = JBD2_DEFAULT_MAX_COMMIT_AGE;
1346                         sbi->s_commit_interval = HZ * option;
1347                         break;
1348                 case Opt_max_batch_time:
1349                         if (match_int(&args[0], &option))
1350                                 return 0;
1351                         if (option < 0)
1352                                 return 0;
1353                         if (option == 0)
1354                                 option = EXT4_DEF_MAX_BATCH_TIME;
1355                         sbi->s_max_batch_time = option;
1356                         break;
1357                 case Opt_min_batch_time:
1358                         if (match_int(&args[0], &option))
1359                                 return 0;
1360                         if (option < 0)
1361                                 return 0;
1362                         sbi->s_min_batch_time = option;
1363                         break;
1364                 case Opt_data_journal:
1365                         data_opt = EXT4_MOUNT_JOURNAL_DATA;
1366                         goto datacheck;
1367                 case Opt_data_ordered:
1368                         data_opt = EXT4_MOUNT_ORDERED_DATA;
1369                         goto datacheck;
1370                 case Opt_data_writeback:
1371                         data_opt = EXT4_MOUNT_WRITEBACK_DATA;
1372                 datacheck:
1373                         if (is_remount) {
1374                                 if ((sbi->s_mount_opt & EXT4_MOUNT_DATA_FLAGS)
1375                                                 != data_opt) {
1376                                         ext4_msg(sb, KERN_ERR,
1377                                                 "Cannot change data mode on remount");
1378                                         return 0;
1379                                 }
1380                         } else {
1381                                 sbi->s_mount_opt &= ~EXT4_MOUNT_DATA_FLAGS;
1382                                 sbi->s_mount_opt |= data_opt;
1383                         }
1384                         break;
1385                 case Opt_data_err_abort:
1386                         set_opt(sbi->s_mount_opt, DATA_ERR_ABORT);
1387                         break;
1388                 case Opt_data_err_ignore:
1389                         clear_opt(sbi->s_mount_opt, DATA_ERR_ABORT);
1390                         break;
1391                 case Opt_mb_history_length:
1392                         if (match_int(&args[0], &option))
1393                                 return 0;
1394                         if (option < 0)
1395                                 return 0;
1396                         sbi->s_mb_history_max = option;
1397                         break;
1398 #ifdef CONFIG_QUOTA
1399                 case Opt_usrjquota:
1400                         qtype = USRQUOTA;
1401                         goto set_qf_name;
1402                 case Opt_grpjquota:
1403                         qtype = GRPQUOTA;
1404 set_qf_name:
1405                         if (sb_any_quota_loaded(sb) &&
1406                             !sbi->s_qf_names[qtype]) {
1407                                 ext4_msg(sb, KERN_ERR,
1408                                        "Cannot change journaled "
1409                                        "quota options when quota turned on");
1410                                 return 0;
1411                         }
1412                         qname = match_strdup(&args[0]);
1413                         if (!qname) {
1414                                 ext4_msg(sb, KERN_ERR,
1415                                         "Not enough memory for "
1416                                         "storing quotafile name");
1417                                 return 0;
1418                         }
1419                         if (sbi->s_qf_names[qtype] &&
1420                             strcmp(sbi->s_qf_names[qtype], qname)) {
1421                                 ext4_msg(sb, KERN_ERR,
1422                                         "%s quota file already "
1423                                         "specified", QTYPE2NAME(qtype));
1424                                 kfree(qname);
1425                                 return 0;
1426                         }
1427                         sbi->s_qf_names[qtype] = qname;
1428                         if (strchr(sbi->s_qf_names[qtype], '/')) {
1429                                 ext4_msg(sb, KERN_ERR,
1430                                         "quotafile must be on "
1431                                         "filesystem root");
1432                                 kfree(sbi->s_qf_names[qtype]);
1433                                 sbi->s_qf_names[qtype] = NULL;
1434                                 return 0;
1435                         }
1436                         set_opt(sbi->s_mount_opt, QUOTA);
1437                         break;
1438                 case Opt_offusrjquota:
1439                         qtype = USRQUOTA;
1440                         goto clear_qf_name;
1441                 case Opt_offgrpjquota:
1442                         qtype = GRPQUOTA;
1443 clear_qf_name:
1444                         if (sb_any_quota_loaded(sb) &&
1445                             sbi->s_qf_names[qtype]) {
1446                                 ext4_msg(sb, KERN_ERR, "Cannot change "
1447                                         "journaled quota options when "
1448                                         "quota turned on");
1449                                 return 0;
1450                         }
1451                         /*
1452                          * The space will be released later when all options
1453                          * are confirmed to be correct
1454                          */
1455                         sbi->s_qf_names[qtype] = NULL;
1456                         break;
1457                 case Opt_jqfmt_vfsold:
1458                         qfmt = QFMT_VFS_OLD;
1459                         goto set_qf_format;
1460                 case Opt_jqfmt_vfsv0:
1461                         qfmt = QFMT_VFS_V0;
1462 set_qf_format:
1463                         if (sb_any_quota_loaded(sb) &&
1464                             sbi->s_jquota_fmt != qfmt) {
1465                                 ext4_msg(sb, KERN_ERR, "Cannot change "
1466                                         "journaled quota options when "
1467                                         "quota turned on");
1468                                 return 0;
1469                         }
1470                         sbi->s_jquota_fmt = qfmt;
1471                         break;
1472                 case Opt_quota:
1473                 case Opt_usrquota:
1474                         set_opt(sbi->s_mount_opt, QUOTA);
1475                         set_opt(sbi->s_mount_opt, USRQUOTA);
1476                         break;
1477                 case Opt_grpquota:
1478                         set_opt(sbi->s_mount_opt, QUOTA);
1479                         set_opt(sbi->s_mount_opt, GRPQUOTA);
1480                         break;
1481                 case Opt_noquota:
1482                         if (sb_any_quota_loaded(sb)) {
1483                                 ext4_msg(sb, KERN_ERR, "Cannot change quota "
1484                                         "options when quota turned on");
1485                                 return 0;
1486                         }
1487                         clear_opt(sbi->s_mount_opt, QUOTA);
1488                         clear_opt(sbi->s_mount_opt, USRQUOTA);
1489                         clear_opt(sbi->s_mount_opt, GRPQUOTA);
1490                         break;
1491 #else
1492                 case Opt_quota:
1493                 case Opt_usrquota:
1494                 case Opt_grpquota:
1495                         ext4_msg(sb, KERN_ERR,
1496                                 "quota options not supported");
1497                         break;
1498                 case Opt_usrjquota:
1499                 case Opt_grpjquota:
1500                 case Opt_offusrjquota:
1501                 case Opt_offgrpjquota:
1502                 case Opt_jqfmt_vfsold:
1503                 case Opt_jqfmt_vfsv0:
1504                         ext4_msg(sb, KERN_ERR,
1505                                 "journaled quota options not supported");
1506                         break;
1507                 case Opt_noquota:
1508                         break;
1509 #endif
1510                 case Opt_abort:
1511                         sbi->s_mount_flags |= EXT4_MF_FS_ABORTED;
1512                         break;
1513                 case Opt_nobarrier:
1514                         clear_opt(sbi->s_mount_opt, BARRIER);
1515                         break;
1516                 case Opt_barrier:
1517                         if (match_int(&args[0], &option)) {
1518                                 set_opt(sbi->s_mount_opt, BARRIER);
1519                                 break;
1520                         }
1521                         if (option)
1522                                 set_opt(sbi->s_mount_opt, BARRIER);
1523                         else
1524                                 clear_opt(sbi->s_mount_opt, BARRIER);
1525                         break;
1526                 case Opt_ignore:
1527                         break;
1528                 case Opt_resize:
1529                         if (!is_remount) {
1530                                 ext4_msg(sb, KERN_ERR,
1531                                         "resize option only available "
1532                                         "for remount");
1533                                 return 0;
1534                         }
1535                         if (match_int(&args[0], &option) != 0)
1536                                 return 0;
1537                         *n_blocks_count = option;
1538                         break;
1539                 case Opt_nobh:
1540                         set_opt(sbi->s_mount_opt, NOBH);
1541                         break;
1542                 case Opt_bh:
1543                         clear_opt(sbi->s_mount_opt, NOBH);
1544                         break;
1545                 case Opt_i_version:
1546                         set_opt(sbi->s_mount_opt, I_VERSION);
1547                         sb->s_flags |= MS_I_VERSION;
1548                         break;
1549                 case Opt_nodelalloc:
1550                         clear_opt(sbi->s_mount_opt, DELALLOC);
1551                         break;
1552                 case Opt_stripe:
1553                         if (match_int(&args[0], &option))
1554                                 return 0;
1555                         if (option < 0)
1556                                 return 0;
1557                         sbi->s_stripe = option;
1558                         break;
1559                 case Opt_delalloc:
1560                         set_opt(sbi->s_mount_opt, DELALLOC);
1561                         break;
1562                 case Opt_block_validity:
1563                         set_opt(sbi->s_mount_opt, BLOCK_VALIDITY);
1564                         break;
1565                 case Opt_noblock_validity:
1566                         clear_opt(sbi->s_mount_opt, BLOCK_VALIDITY);
1567                         break;
1568                 case Opt_inode_readahead_blks:
1569                         if (match_int(&args[0], &option))
1570                                 return 0;
1571                         if (option < 0 || option > (1 << 30))
1572                                 return 0;
1573                         if (!is_power_of_2(option)) {
1574                                 ext4_msg(sb, KERN_ERR,
1575                                          "EXT4-fs: inode_readahead_blks"
1576                                          " must be a power of 2");
1577                                 return 0;
1578                         }
1579                         sbi->s_inode_readahead_blks = option;
1580                         break;
1581                 case Opt_journal_ioprio:
1582                         if (match_int(&args[0], &option))
1583                                 return 0;
1584                         if (option < 0 || option > 7)
1585                                 break;
1586                         *journal_ioprio = IOPRIO_PRIO_VALUE(IOPRIO_CLASS_BE,
1587                                                             option);
1588                         break;
1589                 case Opt_noauto_da_alloc:
1590                         set_opt(sbi->s_mount_opt,NO_AUTO_DA_ALLOC);
1591                         break;
1592                 case Opt_auto_da_alloc:
1593                         if (match_int(&args[0], &option)) {
1594                                 clear_opt(sbi->s_mount_opt, NO_AUTO_DA_ALLOC);
1595                                 break;
1596                         }
1597                         if (option)
1598                                 clear_opt(sbi->s_mount_opt, NO_AUTO_DA_ALLOC);
1599                         else
1600                                 set_opt(sbi->s_mount_opt,NO_AUTO_DA_ALLOC);
1601                         break;
1602                 case Opt_discard:
1603                         set_opt(sbi->s_mount_opt, DISCARD);
1604                         break;
1605                 case Opt_nodiscard:
1606                         clear_opt(sbi->s_mount_opt, DISCARD);
1607                         break;
1608                 default:
1609                         ext4_msg(sb, KERN_ERR,
1610                                "Unrecognized mount option \"%s\" "
1611                                "or missing value", p);
1612                         return 0;
1613                 }
1614         }
1615 #ifdef CONFIG_QUOTA
1616         if (sbi->s_qf_names[USRQUOTA] || sbi->s_qf_names[GRPQUOTA]) {
1617                 if ((sbi->s_mount_opt & EXT4_MOUNT_USRQUOTA) &&
1618                      sbi->s_qf_names[USRQUOTA])
1619                         clear_opt(sbi->s_mount_opt, USRQUOTA);
1620 
1621                 if ((sbi->s_mount_opt & EXT4_MOUNT_GRPQUOTA) &&
1622                      sbi->s_qf_names[GRPQUOTA])
1623                         clear_opt(sbi->s_mount_opt, GRPQUOTA);
1624 
1625                 if ((sbi->s_qf_names[USRQUOTA] &&
1626                                 (sbi->s_mount_opt & EXT4_MOUNT_GRPQUOTA)) ||
1627                     (sbi->s_qf_names[GRPQUOTA] &&
1628                                 (sbi->s_mount_opt & EXT4_MOUNT_USRQUOTA))) {
1629                         ext4_msg(sb, KERN_ERR, "old and new quota "
1630                                         "format mixing");
1631                         return 0;
1632                 }
1633 
1634                 if (!sbi->s_jquota_fmt) {
1635                         ext4_msg(sb, KERN_ERR, "journaled quota format "
1636                                         "not specified");
1637                         return 0;
1638                 }
1639         } else {
1640                 if (sbi->s_jquota_fmt) {
1641                         ext4_msg(sb, KERN_ERR, "journaled quota format "
1642                                         "specified with no journaling "
1643                                         "enabled");
1644                         return 0;
1645                 }
1646         }
1647 #endif
1648         return 1;
1649 }
1650 
1651 static int ext4_setup_super(struct super_block *sb, struct ext4_super_block *es,
1652                             int read_only)
1653 {
1654         struct ext4_sb_info *sbi = EXT4_SB(sb);
1655         int res = 0;
1656 
1657         if (le32_to_cpu(es->s_rev_level) > EXT4_MAX_SUPP_REV) {
1658                 ext4_msg(sb, KERN_ERR, "revision level too high, "
1659                          "forcing read-only mode");
1660                 res = MS_RDONLY;
1661         }
1662         if (read_only)
1663                 return res;
1664         if (!(sbi->s_mount_state & EXT4_VALID_FS))
1665                 ext4_msg(sb, KERN_WARNING, "warning: mounting unchecked fs, "
1666                          "running e2fsck is recommended");
1667         else if ((sbi->s_mount_state & EXT4_ERROR_FS))
1668                 ext4_msg(sb, KERN_WARNING,
1669                          "warning: mounting fs with errors, "
1670                          "running e2fsck is recommended");
1671         else if ((__s16) le16_to_cpu(es->s_max_mnt_count) >= 0 &&
1672                  le16_to_cpu(es->s_mnt_count) >=
1673                  (unsigned short) (__s16) le16_to_cpu(es->s_max_mnt_count))
1674                 ext4_msg(sb, KERN_WARNING,
1675                          "warning: maximal mount count reached, "
1676                          "running e2fsck is recommended");
1677         else if (le32_to_cpu(es->s_checkinterval) &&
1678                 (le32_to_cpu(es->s_lastcheck) +
1679                         le32_to_cpu(es->s_checkinterval) <= get_seconds()))
1680                 ext4_msg(sb, KERN_WARNING,
1681                          "warning: checktime reached, "
1682                          "running e2fsck is recommended");
1683         if (!sbi->s_journal)
1684                 es->s_state &= cpu_to_le16(~EXT4_VALID_FS);
1685         if (!(__s16) le16_to_cpu(es->s_max_mnt_count))
1686                 es->s_max_mnt_count = cpu_to_le16(EXT4_DFL_MAX_MNT_COUNT);
1687         le16_add_cpu(&es->s_mnt_count, 1);
1688         es->s_mtime = cpu_to_le32(get_seconds());
1689         ext4_update_dynamic_rev(sb);
1690         if (sbi->s_journal)
1691                 EXT4_SET_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_RECOVER);
1692 
1693         ext4_commit_super(sb, 1);
1694         if (test_opt(sb, DEBUG))
1695                 printk(KERN_INFO "[EXT4 FS bs=%lu, gc=%u, "
1696                                 "bpg=%lu, ipg=%lu, mo=%04x]\n",
1697                         sb->s_blocksize,
1698                         sbi->s_groups_count,
1699                         EXT4_BLOCKS_PER_GROUP(sb),
1700                         EXT4_INODES_PER_GROUP(sb),
1701                         sbi->s_mount_opt);
1702 
1703         if (EXT4_SB(sb)->s_journal) {
1704                 ext4_msg(sb, KERN_INFO, "%s journal on %s",
1705                        EXT4_SB(sb)->s_journal->j_inode ? "internal" :
1706                        "external", EXT4_SB(sb)->s_journal->j_devname);
1707         } else {
1708                 ext4_msg(sb, KERN_INFO, "no journal");
1709         }
1710         return res;
1711 }
1712 
1713 static int ext4_fill_flex_info(struct super_block *sb)
1714 {
1715         struct ext4_sb_info *sbi = EXT4_SB(sb);
1716         struct ext4_group_desc *gdp = NULL;
1717         ext4_group_t flex_group_count;
1718         ext4_group_t flex_group;
1719         int groups_per_flex = 0;
1720         size_t size;
1721         int i;
1722 
1723         sbi->s_log_groups_per_flex = sbi->s_es->s_log_groups_per_flex;
1724         groups_per_flex = 1 << sbi->s_log_groups_per_flex;
1725 
1726         if (groups_per_flex < 2) {
1727                 sbi->s_log_groups_per_flex = 0;
1728                 return 1;
1729         }
1730 
1731         /* We allocate both existing and potentially added groups */
1732         flex_group_count = ((sbi->s_groups_count + groups_per_flex - 1) +
1733                         ((le16_to_cpu(sbi->s_es->s_reserved_gdt_blocks) + 1) <<
1734                               EXT4_DESC_PER_BLOCK_BITS(sb))) / groups_per_flex;
1735         size = flex_group_count * sizeof(struct flex_groups);
1736         sbi->s_flex_groups = kzalloc(size, GFP_KERNEL);
1737         if (sbi->s_flex_groups == NULL) {
1738                 sbi->s_flex_groups = vmalloc(size);
1739                 if (sbi->s_flex_groups)
1740                         memset(sbi->s_flex_groups, 0, size);
1741         }
1742         if (sbi->s_flex_groups == NULL) {
1743                 ext4_msg(sb, KERN_ERR, "not enough memory for "
1744                                 "%u flex groups", flex_group_count);
1745                 goto failed;
1746         }
1747 
1748         for (i = 0; i < sbi->s_groups_count; i++) {
1749                 gdp = ext4_get_group_desc(sb, i, NULL);
1750 
1751                 flex_group = ext4_flex_group(sbi, i);
1752                 atomic_add(ext4_free_inodes_count(sb, gdp),
1753                            &sbi->s_flex_groups[flex_group].free_inodes);
1754                 atomic_add(ext4_free_blks_count(sb, gdp),
1755                            &sbi->s_flex_groups[flex_group].free_blocks);
1756                 atomic_add(ext4_used_dirs_count(sb, gdp),
1757                            &sbi->s_flex_groups[flex_group].used_dirs);
1758         }
1759 
1760         return 1;
1761 failed:
1762         return 0;
1763 }
1764 
1765 __le16 ext4_group_desc_csum(struct ext4_sb_info *sbi, __u32 block_group,
1766                             struct ext4_group_desc *gdp)
1767 {
1768         __u16 crc = 0;
1769 
1770         if (sbi->s_es->s_feature_ro_compat &
1771             cpu_to_le32(EXT4_FEATURE_RO_COMPAT_GDT_CSUM)) {
1772                 int offset = offsetof(struct ext4_group_desc, bg_checksum);
1773                 __le32 le_group = cpu_to_le32(block_group);
1774 
1775                 crc = crc16(~0, sbi->s_es->s_uuid, sizeof(sbi->s_es->s_uuid));
1776                 crc = crc16(crc, (__u8 *)&le_group, sizeof(le_group));
1777                 crc = crc16(crc, (__u8 *)gdp, offset);
1778                 offset += sizeof(gdp->bg_checksum); /* skip checksum */
1779                 /* for checksum of struct ext4_group_desc do the rest...*/
1780                 if ((sbi->s_es->s_feature_incompat &
1781                      cpu_to_le32(EXT4_FEATURE_INCOMPAT_64BIT)) &&
1782                     offset < le16_to_cpu(sbi->s_es->s_desc_size))
1783                         crc = crc16(crc, (__u8 *)gdp + offset,
1784                                     le16_to_cpu(sbi->s_es->s_desc_size) -
1785                                         offset);
1786         }
1787 
1788         return cpu_to_le16(crc);
1789 }
1790 
1791 int ext4_group_desc_csum_verify(struct ext4_sb_info *sbi, __u32 block_group,
1792                                 struct ext4_group_desc *gdp)
1793 {
1794         if ((sbi->s_es->s_feature_ro_compat &
1795              cpu_to_le32(EXT4_FEATURE_RO_COMPAT_GDT_CSUM)) &&
1796             (gdp->bg_checksum != ext4_group_desc_csum(sbi, block_group, gdp)))
1797                 return 0;
1798 
1799         return 1;
1800 }
1801 
1802 /* Called at mount-time, super-block is locked */
1803 static int ext4_check_descriptors(struct super_block *sb)
1804 {
1805         struct ext4_sb_info *sbi = EXT4_SB(sb);
1806         ext4_fsblk_t first_block = le32_to_cpu(sbi->s_es->s_first_data_block);
1807         ext4_fsblk_t last_block;
1808         ext4_fsblk_t block_bitmap;
1809         ext4_fsblk_t inode_bitmap;
1810         ext4_fsblk_t inode_table;
1811         int flexbg_flag = 0;
1812         ext4_group_t i;
1813 
1814         if (EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_FLEX_BG))
1815                 flexbg_flag = 1;
1816 
1817         ext4_debug("Checking group descriptors");
1818 
1819         for (i = 0; i < sbi->s_groups_count; i++) {
1820                 struct ext4_group_desc *gdp = ext4_get_group_desc(sb, i, NULL);
1821 
1822                 if (i == sbi->s_groups_count - 1 || flexbg_flag)
1823                         last_block = ext4_blocks_count(sbi->s_es) - 1;
1824                 else
1825                         last_block = first_block +
1826                                 (EXT4_BLOCKS_PER_GROUP(sb) - 1);
1827 
1828                 block_bitmap = ext4_block_bitmap(sb, gdp);
1829                 if (block_bitmap < first_block || block_bitmap > last_block) {
1830                         ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: "
1831                                "Block bitmap for group %u not in group "
1832                                "(block %llu)!", i, block_bitmap);
1833                         return 0;
1834                 }
1835                 inode_bitmap = ext4_inode_bitmap(sb, gdp);
1836                 if (inode_bitmap < first_block || inode_bitmap > last_block) {
1837                         ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: "
1838                                "Inode bitmap for group %u not in group "
1839                                "(block %llu)!", i, inode_bitmap);
1840                         return 0;
1841                 }
1842                 inode_table = ext4_inode_table(sb, gdp);
1843                 if (inode_table < first_block ||
1844                     inode_table + sbi->s_itb_per_group - 1 > last_block) {
1845                         ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: "
1846                                "Inode table for group %u not in group "
1847                                "(block %llu)!", i, inode_table);
1848                         return 0;
1849                 }
1850                 ext4_lock_group(sb, i);
1851                 if (!ext4_group_desc_csum_verify(sbi, i, gdp)) {
1852                         ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: "
1853                                  "Checksum for group %u failed (%u!=%u)",
1854                                  i, le16_to_cpu(ext4_group_desc_csum(sbi, i,
1855                                      gdp)), le16_to_cpu(gdp->bg_checksum));
1856                         if (!(sb->s_flags & MS_RDONLY)) {
1857                                 ext4_unlock_group(sb, i);
1858                                 return 0;
1859                         }
1860                 }
1861                 ext4_unlock_group(sb, i);
1862                 if (!flexbg_flag)
1863                         first_block += EXT4_BLOCKS_PER_GROUP(sb);
1864         }
1865 
1866         ext4_free_blocks_count_set(sbi->s_es, ext4_count_free_blocks(sb));
1867         sbi->s_es->s_free_inodes_count =cpu_to_le32(ext4_count_free_inodes(sb));
1868         return 1;
1869 }
1870 
1871 /* ext4_orphan_cleanup() walks a singly-linked list of inodes (starting at
1872  * the superblock) which were deleted from all directories, but held open by
1873  * a process at the time of a crash.  We walk the list and try to delete these
1874  * inodes at recovery time (only with a read-write filesystem).
1875  *
1876  * In order to keep the orphan inode chain consistent during traversal (in
1877  * case of crash during recovery), we link each inode into the superblock
1878  * orphan list_head and handle it the same way as an inode deletion during
1879  * normal operation (which journals the operations for us).
1880  *
1881  * We only do an iget() and an iput() on each inode, which is very safe if we
1882  * accidentally point at an in-use or already deleted inode.  The worst that
1883  * can happen in this case is that we get a "bit already cleared" message from
1884  * ext4_free_inode().  The only reason we would point at a wrong inode is if
1885  * e2fsck was run on this filesystem, and it must have already done the orphan
1886  * inode cleanup for us, so we can safely abort without any further action.
1887  */
1888 static void ext4_orphan_cleanup(struct super_block *sb,
1889                                 struct ext4_super_block *es)
1890 {
1891         unsigned int s_flags = sb->s_flags;
1892         int nr_orphans = 0, nr_truncates = 0;
1893 #ifdef CONFIG_QUOTA
1894         int i;
1895 #endif
1896         if (!es->s_last_orphan) {
1897                 jbd_debug(4, "no orphan inodes to clean up\n");
1898                 return;
1899         }
1900 
1901         if (bdev_read_only(sb->s_bdev)) {
1902                 ext4_msg(sb, KERN_ERR, "write access "
1903                         "unavailable, skipping orphan cleanup");
1904                 return;
1905         }
1906 
1907         if (EXT4_SB(sb)->s_mount_state & EXT4_ERROR_FS) {
1908                 if (es->s_last_orphan)
1909                         jbd_debug(1, "Errors on filesystem, "
1910                                   "clearing orphan list.\n");
1911                 es->s_last_orphan = 0;
1912                 jbd_debug(1, "Skipping orphan recovery on fs with errors.\n");
1913                 return;
1914         }
1915 
1916         if (s_flags & MS_RDONLY) {
1917                 ext4_msg(sb, KERN_INFO, "orphan cleanup on readonly fs");
1918                 sb->s_flags &= ~MS_RDONLY;
1919         }
1920 #ifdef CONFIG_QUOTA
1921         /* Needed for iput() to work correctly and not trash data */
1922         sb->s_flags |= MS_ACTIVE;
1923         /* Turn on quotas so that they are updated correctly */
1924         for (i = 0; i < MAXQUOTAS; i++) {
1925                 if (EXT4_SB(sb)->s_qf_names[i]) {
1926                         int ret = ext4_quota_on_mount(sb, i);
1927                         if (ret < 0)
1928                                 ext4_msg(sb, KERN_ERR,
1929                                         "Cannot turn on journaled "
1930                                         "quota: error %d", ret);
1931                 }
1932         }
1933 #endif
1934 
1935         while (es->s_last_orphan) {
1936                 struct inode *inode;
1937 
1938                 inode = ext4_orphan_get(sb, le32_to_cpu(es->s_last_orphan));
1939                 if (IS_ERR(inode)) {
1940                         es->s_last_orphan = 0;
1941                         break;
1942                 }
1943 
1944                 list_add(&EXT4_I(inode)->i_orphan, &EXT4_SB(sb)->s_orphan);
1945                 vfs_dq_init(inode);
1946                 if (inode->i_nlink) {
1947                         ext4_msg(sb, KERN_DEBUG,
1948                                 "%s: truncating inode %lu to %lld bytes",
1949                                 __func__, inode->i_ino, inode->i_size);
1950                         jbd_debug(2, "truncating inode %lu to %lld bytes\n",
1951                                   inode->i_ino, inode->i_size);
1952                         ext4_truncate(inode);
1953                         nr_truncates++;
1954                 } else {
1955                         ext4_msg(sb, KERN_DEBUG,
1956                                 "%s: deleting unreferenced inode %lu",
1957                                 __func__, inode->i_ino);
1958                         jbd_debug(2, "deleting unreferenced inode %lu\n",
1959                                   inode->i_ino);
1960                         nr_orphans++;
1961                 }
1962                 iput(inode);  /* The delete magic happens here! */
1963         }
1964 
1965 #define PLURAL(x) (x), ((x) == 1) ? "" : "s"
1966 
1967         if (nr_orphans)
1968                 ext4_msg(sb, KERN_INFO, "%d orphan inode%s deleted",
1969                        PLURAL(nr_orphans));
1970         if (nr_truncates)
1971                 ext4_msg(sb, KERN_INFO, "%d truncate%s cleaned up",
1972                        PLURAL(nr_truncates));
1973 #ifdef CONFIG_QUOTA
1974         /* Turn quotas off */
1975         for (i = 0; i < MAXQUOTAS; i++) {
1976                 if (sb_dqopt(sb)->files[i])
1977                         vfs_quota_off(sb, i, 0);
1978         }
1979 #endif
1980         sb->s_flags = s_flags; /* Restore MS_RDONLY status */
1981 }
1982 
1983 /*
1984  * Maximal extent format file size.
1985  * Resulting logical blkno at s_maxbytes must fit in our on-disk
1986  * extent format containers, within a sector_t, and within i_blocks
1987  * in the vfs.  ext4 inode has 48 bits of i_block in fsblock units,
1988  * so that won't be a limiting factor.
1989  *
1990  * Note, this does *not* consider any metadata overhead for vfs i_blocks.
1991  */
1992 static loff_t ext4_max_size(int blkbits, int has_huge_files)
1993 {
1994         loff_t res;
1995         loff_t upper_limit = MAX_LFS_FILESIZE;
1996 
1997         /* small i_blocks in vfs inode? */
1998         if (!has_huge_files || sizeof(blkcnt_t) < sizeof(u64)) {
1999                 /*
2000                  * CONFIG_LBDAF is not enabled implies the inode
2001                  * i_block represent total blocks in 512 bytes
2002                  * 32 == size of vfs inode i_blocks * 8
2003                  */
2004                 upper_limit = (1LL << 32) - 1;
2005 
2006                 /* total blocks in file system block size */
2007                 upper_limit >>= (blkbits - 9);
2008                 upper_limit <<= blkbits;
2009         }
2010 
2011         /* 32-bit extent-start container, ee_block */
2012         res = 1LL << 32;
2013         res <<= blkbits;
2014         res -= 1;
2015 
2016         /* Sanity check against vm- & vfs- imposed limits */
2017         if (res > upper_limit)
2018                 res = upper_limit;
2019 
2020         return res;
2021 }
2022 
2023 /*
2024  * Maximal bitmap file size.  There is a direct, and {,double-,triple-}indirect
2025  * block limit, and also a limit of (2^48 - 1) 512-byte sectors in i_blocks.
2026  * We need to be 1 filesystem block less than the 2^48 sector limit.
2027  */
2028 static loff_t ext4_max_bitmap_size(int bits, int has_huge_files)
2029 {
2030         loff_t res = EXT4_NDIR_BLOCKS;
2031         int meta_blocks;
2032         loff_t upper_limit;
2033         /* This is calculated to be the largest file size for a dense, block
2034          * mapped file such that the file's total number of 512-byte sectors,
2035          * including data and all indirect blocks, does not exceed (2^48 - 1).
2036          *
2037          * __u32 i_blocks_lo and _u16 i_blocks_high represent the total
2038          * number of 512-byte sectors of the file.
2039          */
2040 
2041         if (!has_huge_files || sizeof(blkcnt_t) < sizeof(u64)) {
2042                 /*
2043                  * !has_huge_files or CONFIG_LBDAF not enabled implies that
2044                  * the inode i_block field represents total file blocks in
2045                  * 2^32 512-byte sectors == size of vfs inode i_blocks * 8
2046                  */
2047                 upper_limit = (1LL << 32) - 1;
2048 
2049                 /* total blocks in file system block size */
2050                 upper_limit >>= (bits - 9);
2051 
2052         } else {
2053                 /*
2054                  * We use 48 bit ext4_inode i_blocks
2055                  * With EXT4_HUGE_FILE_FL set the i_blocks
2056                  * represent total number of blocks in
2057                  * file system block size
2058                  */
2059                 upper_limit = (1LL << 48) - 1;
2060 
2061         }
2062 
2063         /* indirect blocks */
2064         meta_blocks = 1;
2065         /* double indirect blocks */
2066         meta_blocks += 1 + (1LL << (bits-2));
2067         /* tripple indirect blocks */
2068         meta_blocks += 1 + (1LL << (bits-2)) + (1LL << (2*(bits-2)));
2069 
2070         upper_limit -= meta_blocks;
2071         upper_limit <<= bits;
2072 
2073         res += 1LL << (bits-2);
2074         res += 1LL << (2*(bits-2));
2075         res += 1LL << (3*(bits-2));
2076         res <<= bits;
2077         if (res > upper_limit)
2078                 res = upper_limit;
2079 
2080         if (res > MAX_LFS_FILESIZE)
2081                 res = MAX_LFS_FILESIZE;
2082 
2083         return res;
2084 }
2085 
2086 static ext4_fsblk_t descriptor_loc(struct super_block *sb,
2087                                    ext4_fsblk_t logical_sb_block, int nr)
2088 {
2089         struct ext4_sb_info *sbi = EXT4_SB(sb);
2090         ext4_group_t bg, first_meta_bg;
2091         int has_super = 0;
2092 
2093         first_meta_bg = le32_to_cpu(sbi->s_es->s_first_meta_bg);
2094 
2095         if (!EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_META_BG) ||
2096             nr < first_meta_bg)
2097                 return logical_sb_block + nr + 1;
2098         bg = sbi->s_desc_per_block * nr;
2099         if (ext4_bg_has_super(sb, bg))
2100                 has_super = 1;
2101 
2102         return (has_super + ext4_group_first_block_no(sb, bg));
2103 }
2104 
2105 /**
2106  * ext4_get_stripe_size: Get the stripe size.
2107  * @sbi: In memory super block info
2108  *
2109  * If we have specified it via mount option, then
2110  * use the mount option value. If the value specified at mount time is
2111  * greater than the blocks per group use the super block value.
2112  * If the super block value is greater than blocks per group return 0.
2113  * Allocator needs it be less than blocks per group.
2114  *
2115  */
2116 static unsigned long ext4_get_stripe_size(struct ext4_sb_info *sbi)
2117 {
2118         unsigned long stride = le16_to_cpu(sbi->s_es->s_raid_stride);
2119         unsigned long stripe_width =
2120                         le32_to_cpu(sbi->s_es->s_raid_stripe_width);
2121 
2122         if (sbi->s_stripe && sbi->s_stripe <= sbi->s_blocks_per_group)
2123                 return sbi->s_stripe;
2124 
2125         if (stripe_width <= sbi->s_blocks_per_group)
2126                 return stripe_width;
2127 
2128         if (stride <= sbi->s_blocks_per_group)
2129                 return stride;
2130 
2131         return 0;
2132 }
2133 
2134 /* sysfs supprt */
2135 
2136 struct ext4_attr {
2137         struct attribute attr;
2138         ssize_t (*show)(struct ext4_attr *, struct ext4_sb_info *, char *);
2139         ssize_t (*store)(struct ext4_attr *, struct ext4_sb_info *, 
2140                          const char *, size_t);
2141         int offset;
2142 };
2143 
2144 static int parse_strtoul(const char *buf,
2145                 unsigned long max, unsigned long *value)
2146 {
2147         char *endp;
2148 
2149         while (*buf && isspace(*buf))
2150                 buf++;
2151         *value = simple_strtoul(buf, &endp, 0);
2152         while (*endp && isspace(*endp))
2153                 endp++;
2154         if (*endp || *value > max)
2155                 return -EINVAL;
2156 
2157         return 0;
2158 }
2159 
2160 static ssize_t delayed_allocation_blocks_show(struct ext4_attr *a,
2161                                               struct ext4_sb_info *sbi,
2162                                               char *buf)
2163 {
2164         return snprintf(buf, PAGE_SIZE, "%llu\n",
2165                         (s64) percpu_counter_sum(&sbi->s_dirtyblocks_counter));
2166 }
2167 
2168 static ssize_t session_write_kbytes_show(struct ext4_attr *a,
2169                                          struct ext4_sb_info *sbi, char *buf)
2170 {
2171         struct super_block *sb = sbi->s_buddy_cache->i_sb;
2172 
2173         return snprintf(buf, PAGE_SIZE, "%lu\n",
2174                         (part_stat_read(sb->s_bdev->bd_part, sectors[1]) -
2175                          sbi->s_sectors_written_start) >> 1);
2176 }
2177 
2178 static ssize_t lifetime_write_kbytes_show(struct ext4_attr *a,
2179                                           struct ext4_sb_info *sbi, char *buf)
2180 {
2181         struct super_block *sb = sbi->s_buddy_cache->i_sb;
2182 
2183         return snprintf(buf, PAGE_SIZE, "%llu\n",
2184                         sbi->s_kbytes_written + 
2185                         ((part_stat_read(sb->s_bdev->bd_part, sectors[1]) -
2186                           EXT4_SB(sb)->s_sectors_written_start) >> 1));
2187 }
2188 
2189 static ssize_t inode_readahead_blks_store(struct ext4_attr *a,
2190                                           struct ext4_sb_info *sbi,
2191                                           const char *buf, size_t count)
2192 {
2193         unsigned long t;
2194 
2195         if (parse_strtoul(buf, 0x40000000, &t))
2196                 return -EINVAL;
2197 
2198         if (!is_power_of_2(t))
2199                 return -EINVAL;
2200 
2201         sbi->s_inode_readahead_blks = t;
2202         return count;
2203 }
2204 
2205 static ssize_t sbi_ui_show(struct ext4_attr *a,
2206                            struct ext4_sb_info *sbi, char *buf)
2207 {
2208         unsigned int *ui = (unsigned int *) (((char *) sbi) + a->offset);
2209 
2210         return snprintf(buf, PAGE_SIZE, "%u\n", *ui);
2211 }
2212 
2213 static ssize_t sbi_ui_store(struct ext4_attr *a,
2214                             struct ext4_sb_info *sbi,
2215                             const char *buf, size_t count)
2216 {
2217         unsigned int *ui = (unsigned int *) (((char *) sbi) + a->offset);
2218         unsigned long t;
2219 
2220         if (parse_strtoul(buf, 0xffffffff, &t))
2221                 return -EINVAL;
2222         *ui = t;
2223         return count;
2224 }
2225 
2226 #define EXT4_ATTR_OFFSET(_name,_mode,_show,_store,_elname) \
2227 static struct ext4_attr ext4_attr_##_name = {                   \
2228         .attr = {.name = __stringify(_name), .mode = _mode },   \
2229         .show   = _show,                                        \
2230         .store  = _store,                                       \
2231         .offset = offsetof(struct ext4_sb_info, _elname),       \
2232 }
2233 #define EXT4_ATTR(name, mode, show, store) \
2234 static struct ext4_attr ext4_attr_##name = __ATTR(name, mode, show, store)
2235 
2236 #define EXT4_RO_ATTR(name) EXT4_ATTR(name, 0444, name##_show, NULL)
2237 #define EXT4_RW_ATTR(name) EXT4_ATTR(name, 0644, name##_show, name##_store)
2238 #define EXT4_RW_ATTR_SBI_UI(name, elname)       \
2239         EXT4_ATTR_OFFSET(name, 0644, sbi_ui_show, sbi_ui_store, elname)
2240 #define ATTR_LIST(name) &ext4_attr_##name.attr
2241 
2242 EXT4_RO_ATTR(delayed_allocation_blocks);
2243 EXT4_RO_ATTR(session_write_kbytes);
2244 EXT4_RO_ATTR(lifetime_write_kbytes);
2245 EXT4_ATTR_OFFSET(inode_readahead_blks, 0644, sbi_ui_show,
2246                  inode_readahead_blks_store, s_inode_readahead_blks);
2247 EXT4_RW_ATTR_SBI_UI(inode_goal, s_inode_goal);
2248 EXT4_RW_ATTR_SBI_UI(mb_stats, s_mb_stats);
2249 EXT4_RW_ATTR_SBI_UI(mb_max_to_scan, s_mb_max_to_scan);
2250 EXT4_RW_ATTR_SBI_UI(mb_min_to_scan, s_mb_min_to_scan);
2251 EXT4_RW_ATTR_SBI_UI(mb_order2_req, s_mb_order2_reqs);
2252 EXT4_RW_ATTR_SBI_UI(mb_stream_req, s_mb_stream_request);
2253 EXT4_RW_ATTR_SBI_UI(mb_group_prealloc, s_mb_group_prealloc);
2254 EXT4_RW_ATTR_SBI_UI(max_writeback_mb_bump, s_max_writeback_mb_bump);
2255 
2256 static struct attribute *ext4_attrs[] = {
2257         ATTR_LIST(delayed_allocation_blocks),
2258         ATTR_LIST(session_write_kbytes),
2259         ATTR_LIST(lifetime_write_kbytes),
2260         ATTR_LIST(inode_readahead_blks),
2261         ATTR_LIST(inode_goal),
2262         ATTR_LIST(mb_stats),
2263         ATTR_LIST(mb_max_to_scan),
2264         ATTR_LIST(mb_min_to_scan),
2265         ATTR_LIST(mb_order2_req),
2266         ATTR_LIST(mb_stream_req),
2267         ATTR_LIST(mb_group_prealloc),
2268         ATTR_LIST(max_writeback_mb_bump),
2269         NULL,
2270 };
2271 
2272 static ssize_t ext4_attr_show(struct kobject *kobj,
2273                               struct attribute *attr, char *buf)
2274 {
2275         struct ext4_sb_info *sbi = container_of(kobj, struct ext4_sb_info,
2276                                                 s_kobj);
2277         struct ext4_attr *a = container_of(attr, struct ext4_attr, attr);
2278 
2279         return a->show ? a->show(a, sbi, buf) : 0;
2280 }
2281 
2282 static ssize_t ext4_attr_store(struct kobject *kobj,
2283                                struct attribute *attr,
2284                                const char *buf, size_t len)
2285 {
2286         struct ext4_sb_info *sbi = container_of(kobj, struct ext4_sb_info,
2287                                                 s_kobj);
2288         struct ext4_attr *a = container_of(attr, struct ext4_attr, attr);
2289 
2290         return a->store ? a->store(a, sbi, buf, len) : 0;
2291 }
2292 
2293 static void ext4_sb_release(struct kobject *kobj)
2294 {
2295         struct ext4_sb_info *sbi = container_of(kobj, struct ext4_sb_info,
2296                                                 s_kobj);
2297         complete(&sbi->s_kobj_unregister);
2298 }
2299 
2300 
2301 static struct sysfs_ops ext4_attr_ops = {
2302         .show   = ext4_attr_show,
2303         .store  = ext4_attr_store,
2304 };
2305 
2306 static struct kobj_type ext4_ktype = {
2307         .default_attrs  = ext4_attrs,
2308         .sysfs_ops      = &ext4_attr_ops,
2309         .release        = ext4_sb_release,
2310 };
2311 
2312 /*
2313  * Check whether this filesystem can be mounted based on
2314  * the features present and the RDONLY/RDWR mount requested.
2315  * Returns 1 if this filesystem can be mounted as requested,
2316  * 0 if it cannot be.
2317  */
2318 static int ext4_feature_set_ok(struct super_block *sb, int readonly)
2319 {
2320         if (EXT4_HAS_INCOMPAT_FEATURE(sb, ~EXT4_FEATURE_INCOMPAT_SUPP)) {
2321                 ext4_msg(sb, KERN_ERR,
2322                         "Couldn't mount because of "
2323                         "unsupported optional features (%x)",
2324                         (le32_to_cpu(EXT4_SB(sb)->s_es->s_feature_incompat) &
2325                         ~EXT4_FEATURE_INCOMPAT_SUPP));
2326                 return 0;
2327         }
2328 
2329         if (readonly)
2330                 return 1;
2331 
2332         /* Check that feature set is OK for a read-write mount */
2333         if (EXT4_HAS_RO_COMPAT_FEATURE(sb, ~EXT4_FEATURE_RO_COMPAT_SUPP)) {
2334                 ext4_msg(sb, KERN_ERR, "couldn't mount RDWR because of "
2335                          "unsupported optional features (%x)",
2336                          (le32_to_cpu(EXT4_SB(sb)->s_es->s_feature_ro_compat) &
2337                                 ~EXT4_FEATURE_RO_COMPAT_SUPP));
2338                 return 0;
2339         }
2340         /*
2341          * Large file size enabled file system can only be mounted
2342          * read-write on 32-bit systems if kernel is built with CONFIG_LBDAF
2343          */
2344         if (EXT4_HAS_RO_COMPAT_FEATURE(sb, EXT4_FEATURE_RO_COMPAT_HUGE_FILE)) {
2345                 if (sizeof(blkcnt_t) < sizeof(u64)) {
2346                         ext4_msg(sb, KERN_ERR, "Filesystem with huge files "
2347                                  "cannot be mounted RDWR without "
2348                                  "CONFIG_LBDAF");
2349                         return 0;
2350                 }
2351         }
2352         return 1;
2353 }
2354 
2355 static int ext4_fill_super(struct super_block *sb, void *data, int silent)
2356                                 __releases(kernel_lock)
2357                                 __acquires(kernel_lock)
2358 {
2359         struct buffer_head *bh;
2360         struct ext4_super_block *es = NULL;
2361         struct ext4_sb_info *sbi;
2362         ext4_fsblk_t block;
2363         ext4_fsblk_t sb_block = get_sb_block(&data);
2364         ext4_fsblk_t logical_sb_block;
2365         unsigned long offset = 0;
2366         unsigned long journal_devnum = 0;
2367         unsigned long def_mount_opts;
2368         struct inode *root;
2369         char *cp;
2370         const char *descr;
2371         int ret = -EINVAL;
2372         int blocksize;
2373         unsigned int db_count;
2374         unsigned int i;
2375         int needs_recovery, has_huge_files;
2376         __u64 blocks_count;
2377         int err;
2378         unsigned int journal_ioprio = DEFAULT_JOURNAL_IOPRIO;
2379 
2380         sbi = kzalloc(sizeof(*sbi), GFP_KERNEL);
2381         if (!sbi)
2382                 return -ENOMEM;
2383 
2384         sbi->s_blockgroup_lock =
2385                 kzalloc(sizeof(struct blockgroup_lock), GFP_KERNEL);
2386         if (!sbi->s_blockgroup_lock) {
2387                 kfree(sbi);
2388                 return -ENOMEM;
2389         }
2390         sb->s_fs_info = sbi;
2391         sbi->s_mount_opt = 0;
2392         sbi->s_resuid = EXT4_DEF_RESUID;
2393         sbi->s_resgid = EXT4_DEF_RESGID;
2394         sbi->s_inode_readahead_blks = EXT4_DEF_INODE_READAHEAD_BLKS;
2395         sbi->s_sb_block = sb_block;
2396         sbi->s_sectors_written_start = part_stat_read(sb->s_bdev->bd_part,
2397                                                       sectors[1]);
2398 
2399         unlock_kernel();
2400 
2401         /* Cleanup superblock name */
2402         for (cp = sb->s_id; (cp = strchr(cp, '/'));)
2403                 *cp = '!';
2404 
2405         blocksize = sb_min_blocksize(sb, EXT4_MIN_BLOCK_SIZE);
2406         if (!blocksize) {
2407                 ext4_msg(sb, KERN_ERR, "unable to set blocksize");
2408                 goto out_fail;
2409         }
2410 
2411         /*
2412          * The ext4 superblock will not be buffer aligned for other than 1kB
2413          * block sizes.  We need to calculate the offset from buffer start.
2414          */
2415         if (blocksize != EXT4_MIN_BLOCK_SIZE) {
2416                 logical_sb_block = sb_block * EXT4_MIN_BLOCK_SIZE;
2417                 offset = do_div(logical_sb_block, blocksize);
2418         } else {
2419                 logical_sb_block = sb_block;
2420         }
2421 
2422         if (!(bh = sb_bread(sb, logical_sb_block))) {
2423                 ext4_msg(sb, KERN_ERR, "unable to read superblock");
2424                 goto out_fail;
2425         }
2426         /*
2427          * Note: s_es must be initialized as soon as possible because
2428          *       some ext4 macro-instructions depend on its value
2429          */
2430         es = (struct ext4_super_block *) (((char *)bh->b_data) + offset);
2431         sbi->s_es = es;
2432         sb->s_magic = le16_to_cpu(es->s_magic);
2433         if (sb->s_magic != EXT4_SUPER_MAGIC)
2434                 goto cantfind_ext4;
2435         sbi->s_kbytes_written = le64_to_cpu(es->s_kbytes_written);
2436 
2437         /* Set defaults before we parse the mount options */
2438         def_mount_opts = le32_to_cpu(es->s_default_mount_opts);
2439         if (def_mount_opts & EXT4_DEFM_DEBUG)
2440                 set_opt(sbi->s_mount_opt, DEBUG);
2441         if (def_mount_opts & EXT4_DEFM_BSDGROUPS)
2442                 set_opt(sbi->s_mount_opt, GRPID);
2443         if (def_mount_opts & EXT4_DEFM_UID16)
2444                 set_opt(sbi->s_mount_opt, NO_UID32);
2445 #ifdef CONFIG_EXT4_FS_XATTR
2446         if (def_mount_opts & EXT4_DEFM_XATTR_USER)
2447                 set_opt(sbi->s_mount_opt, XATTR_USER);
2448 #endif
2449 #ifdef CONFIG_EXT4_FS_POSIX_ACL
2450         if (def_mount_opts & EXT4_DEFM_ACL)
2451                 set_opt(sbi->s_mount_opt, POSIX_ACL);
2452 #endif
2453         if ((def_mount_opts & EXT4_DEFM_JMODE) == EXT4_DEFM_JMODE_DATA)
2454                 sbi->s_mount_opt |= EXT4_MOUNT_JOURNAL_DATA;
2455         else if ((def_mount_opts & EXT4_DEFM_JMODE) == EXT4_DEFM_JMODE_ORDERED)
2456                 sbi->s_mount_opt |= EXT4_MOUNT_ORDERED_DATA;
2457         else if ((def_mount_opts & EXT4_DEFM_JMODE) == EXT4_DEFM_JMODE_WBACK)
2458                 sbi->s_mount_opt |= EXT4_MOUNT_WRITEBACK_DATA;
2459 
2460         if (le16_to_cpu(sbi->s_es->s_errors) == EXT4_ERRORS_PANIC)
2461                 set_opt(sbi->s_mount_opt, ERRORS_PANIC);
2462         else if (le16_to_cpu(sbi->s_es->s_errors) == EXT4_ERRORS_CONTINUE)
2463                 set_opt(sbi->s_mount_opt, ERRORS_CONT);
2464         else
2465                 set_opt(sbi->s_mount_opt, ERRORS_RO);
2466 
2467         sbi->s_resuid = le16_to_cpu(es->s_def_resuid);
2468         sbi->s_resgid = le16_to_cpu(es->s_def_resgid);
2469         sbi->s_commit_interval = JBD2_DEFAULT_MAX_COMMIT_AGE * HZ;
2470         sbi->s_min_batch_time = EXT4_DEF_MIN_BATCH_TIME;
2471         sbi->s_max_batch_time = EXT4_DEF_MAX_BATCH_TIME;
2472         sbi->s_mb_history_max = default_mb_history_length;
2473 
2474         set_opt(sbi->s_mount_opt, BARRIER);
2475 
2476         /*
2477          * enable delayed allocation by default
2478          * Use -o nodelalloc to turn it off
2479          */
2480         set_opt(sbi->s_mount_opt, DELALLOC);
2481 
2482         if (!parse_options((char *) data, sb, &journal_devnum,
2483                            &journal_ioprio, NULL, 0))
2484                 goto failed_mount;
2485 
2486         sb->s_flags = (sb->s_flags & ~MS_POSIXACL) |
2487                 ((sbi->s_mount_opt & EXT4_MOUNT_POSIX_ACL) ? MS_POSIXACL : 0);
2488 
2489         if (le32_to_cpu(es->s_rev_level) == EXT4_GOOD_OLD_REV &&
2490             (EXT4_HAS_COMPAT_FEATURE(sb, ~0U) ||
2491              EXT4_HAS_RO_COMPAT_FEATURE(sb, ~0U) ||
2492              EXT4_HAS_INCOMPAT_FEATURE(sb, ~0U)))
2493                 ext4_msg(sb, KERN_WARNING,
2494                        "feature flags set on rev 0 fs, "
2495                        "running e2fsck is recommended");
2496 
2497         /*
2498          * Check feature flags regardless of the revision level, since we
2499          * previously didn't change the revision level when setting the flags,
2500          * so there is a chance incompat flags are set on a rev 0 filesystem.
2501          */
2502         if (!ext4_feature_set_ok(sb, (sb->s_flags & MS_RDONLY)))
2503                 goto failed_mount;
2504 
2505         blocksize = BLOCK_SIZE << le32_to_cpu(es->s_log_block_size);
2506 
2507         if (blocksize < EXT4_MIN_BLOCK_SIZE ||
2508             blocksize > EXT4_MAX_BLOCK_SIZE) {
2509                 ext4_msg(sb, KERN_ERR,
2510                        "Unsupported filesystem blocksize %d", blocksize);
2511                 goto failed_mount;
2512         }
2513 
2514         if (sb->s_blocksize != blocksize) {
2515                 /* Validate the filesystem blocksize */
2516                 if (!sb_set_blocksize(sb, blocksize)) {
2517                         ext4_msg(sb, KERN_ERR, "bad block size %d",
2518                                         blocksize);
2519                         goto failed_mount;
2520                 }
2521 
2522                 brelse(bh);
2523                 logical_sb_block = sb_block * EXT4_MIN_BLOCK_SIZE;
2524                 offset = do_div(logical_sb_block, blocksize);
2525                 bh = sb_bread(sb, logical_sb_block);
2526                 if (!bh) {
2527                         ext4_msg(sb, KERN_ERR,
2528                                "Can't read superblock on 2nd try");
2529                         goto failed_mount;
2530                 }
2531                 es = (struct ext4_super_block *)(((char *)bh->b_data) + offset);
2532                 sbi->s_es = es;
2533                 if (es->s_magic != cpu_to_le16(EXT4_SUPER_MAGIC)) {
2534                         ext4_msg(sb, KERN_ERR,
2535                                "Magic mismatch, very weird!");
2536                         goto failed_mount;
2537                 }
2538         }
2539 
2540         has_huge_files = EXT4_HAS_RO_COMPAT_FEATURE(sb,
2541                                 EXT4_FEATURE_RO_COMPAT_HUGE_FILE);
2542         sbi->s_bitmap_maxbytes = ext4_max_bitmap_size(sb->s_blocksize_bits,
2543                                                       has_huge_files);
2544         sb->s_maxbytes = ext4_max_size(sb->s_blocksize_bits, has_huge_files);
2545 
2546         if (le32_to_cpu(es->s_rev_level) == EXT4_GOOD_OLD_REV) {
2547                 sbi->s_inode_size = EXT4_GOOD_OLD_INODE_SIZE;
2548                 sbi->s_first_ino = EXT4_GOOD_OLD_FIRST_INO;
2549         } else {
2550                 sbi->s_inode_size = le16_to_cpu(es->s_inode_size);
2551                 sbi->s_first_ino = le32_to_cpu(es->s_first_ino);
2552                 if ((sbi->s_inode_size < EXT4_GOOD_OLD_INODE_SIZE) ||
2553                     (!is_power_of_2(sbi->s_inode_size)) ||
2554                     (sbi->s_inode_size > blocksize)) {
2555                         ext4_msg(sb, KERN_ERR,
2556                                "unsupported inode size: %d",
2557                                sbi->s_inode_size);
2558                         goto failed_mount;
2559                 }
2560                 if (sbi->s_inode_size > EXT4_GOOD_OLD_INODE_SIZE)
2561                         sb->s_time_gran = 1 << (EXT4_EPOCH_BITS - 2);
2562         }
2563 
2564         sbi->s_desc_size = le16_to_cpu(es->s_desc_size);
2565         if (EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_64BIT)) {
2566                 if (sbi->s_desc_size < EXT4_MIN_DESC_SIZE_64BIT ||
2567                     sbi->s_desc_size > EXT4_MAX_DESC_SIZE ||
2568                     !is_power_of_2(sbi->s_desc_size)) {
2569                         ext4_msg(sb, KERN_ERR,
2570                                "unsupported descriptor size %lu",
2571                                sbi->s_desc_size);
2572                         goto failed_mount;
2573                 }
2574         } else
2575                 sbi->s_desc_size = EXT4_MIN_DESC_SIZE;
2576 
2577         sbi->s_blocks_per_group = le32_to_cpu(es->s_blocks_per_group);
2578         sbi->s_inodes_per_group = le32_to_cpu(es->s_inodes_per_group);
2579         if (EXT4_INODE_SIZE(sb) == 0 || EXT4_INODES_PER_GROUP(sb) == 0)
2580                 goto cantfind_ext4;
2581 
2582         sbi->s_inodes_per_block = blocksize / EXT4_INODE_SIZE(sb);
2583         if (sbi->s_inodes_per_block == 0)
2584                 goto cantfind_ext4;
2585         sbi->s_itb_per_group = sbi->s_inodes_per_group /
2586                                         sbi->s_inodes_per_block;
2587         sbi->s_desc_per_block = blocksize / EXT4_DESC_SIZE(sb);
2588         sbi->s_sbh = bh;
2589         sbi->s_mount_state = le16_to_cpu(es->s_state);
2590         sbi->s_addr_per_block_bits = ilog2(EXT4_ADDR_PER_BLOCK(sb));
2591         sbi->s_desc_per_block_bits = ilog2(EXT4_DESC_PER_BLOCK(sb));
2592 
2593         for (i = 0; i < 4; i++)
2594                 sbi->s_hash_seed[i] = le32_to_cpu(es->s_hash_seed[i]);
2595         sbi->s_def_hash_version = es->s_def_hash_version;
2596         i = le32_to_cpu(es->s_flags);
2597         if (i & EXT2_FLAGS_UNSIGNED_HASH)
2598                 sbi->s_hash_unsigned = 3;
2599         else if ((i & EXT2_FLAGS_SIGNED_HASH) == 0) {
2600 #ifdef __CHAR_UNSIGNED__
2601                 es->s_flags |= cpu_to_le32(EXT2_FLAGS_UNSIGNED_HASH);
2602                 sbi->s_hash_unsigned = 3;
2603 #else
2604                 es->s_flags |= cpu_to_le32(EXT2_FLAGS_SIGNED_HASH);
2605 #endif
2606                 sb->s_dirt = 1;
2607         }
2608 
2609         if (sbi->s_blocks_per_group > blocksize * 8) {
2610                 ext4_msg(sb, KERN_ERR,
2611                        "#blocks per group too big: %lu",
2612                        sbi->s_blocks_per_group);
2613                 goto failed_mount;
2614         }
2615         if (sbi->s_inodes_per_group > blocksize * 8) {
2616                 ext4_msg(sb, KERN_ERR,
2617                        "#inodes per group too big: %lu",
2618                        sbi->s_inodes_per_group);
2619                 goto failed_mount;
2620         }
2621 
2622         /*
2623          * Test whether we have more sectors than will fit in sector_t,
2624          * and whether the max offset is addressable by the page cache.
2625          */
2626         if ((ext4_blocks_count(es) >
2627              (sector_t)(~0ULL) >> (sb->s_blocksize_bits - 9)) ||
2628             (ext4_blocks_count(es) >
2629              (pgoff_t)(~0ULL) >> (PAGE_CACHE_SHIFT - sb->s_blocksize_bits))) {
2630                 ext4_msg(sb, KERN_ERR, "filesystem"
2631                          " too large to mount safely on this system");
2632                 if (sizeof(sector_t) < 8)
2633                         ext4_msg(sb, KERN_WARNING, "CONFIG_LBDAF not enabled");
2634                 ret = -EFBIG;
2635                 goto failed_mount;
2636         }
2637 
2638         if (EXT4_BLOCKS_PER_GROUP(sb) == 0)
2639                 goto cantfind_ext4;
2640 
2641         /* check blocks count against device size */
2642         blocks_count = sb->s_bdev->bd_inode->i_size >> sb->s_blocksize_bits;
2643         if (blocks_count && ext4_blocks_count(es) > blocks_count) {
2644                 ext4_msg(sb, KERN_WARNING, "bad geometry: block count %llu "
2645                        "exceeds size of device (%llu blocks)",
2646                        ext4_blocks_count(es), blocks_count);
2647                 goto failed_mount;
2648         }
2649 
2650         /*
2651          * It makes no sense for the first data block to be beyond the end
2652          * of the filesystem.
2653          */
2654         if (le32_to_cpu(es->s_first_data_block) >= ext4_blocks_count(es)) {
2655                 ext4_msg(sb, KERN_WARNING, "bad geometry: first data"
2656                          "block %u is beyond end of filesystem (%llu)",
2657                          le32_to_cpu(es->s_first_data_block),
2658                          ext4_blocks_count(es));
2659                 goto failed_mount;
2660         }
2661         blocks_count = (ext4_blocks_count(es) -
2662                         le32_to_cpu(es->s_first_data_block) +
2663                         EXT4_BLOCKS_PER_GROUP(sb) - 1);
2664         do_div(blocks_count, EXT4_BLOCKS_PER_GROUP(sb));
2665         if (blocks_count > ((uint64_t)1<<32) - EXT4_DESC_PER_BLOCK(sb)) {
2666                 ext4_msg(sb, KERN_WARNING, "groups count too large: %u "
2667                        "(block count %llu, first data block %u, "
2668                        "blocks per group %lu)", sbi->s_groups_count,
2669                        ext4_blocks_count(es),
2670                        le32_to_cpu(es->s_first_data_block),
2671                        EXT4_BLOCKS_PER_GROUP(sb));
2672                 goto failed_mount;
2673         }
2674         sbi->s_groups_count = blocks_count;
2675         sbi->s_blockfile_groups = min_t(ext4_group_t, sbi->s_groups_count,
2676                         (EXT4_MAX_BLOCK_FILE_PHYS / EXT4_BLOCKS_PER_GROUP(sb)));
2677         db_count = (sbi->s_groups_count + EXT4_DESC_PER_BLOCK(sb) - 1) /
2678                    EXT4_DESC_PER_BLOCK(sb);
2679         sbi->s_group_desc = kmalloc(db_count * sizeof(struct buffer_head *),
2680                                     GFP_KERNEL);
2681         if (sbi->s_group_desc == NULL) {
2682                 ext4_msg(sb, KERN_ERR, "not enough memory");
2683                 goto failed_mount;
2684         }
2685 
2686 #ifdef CONFIG_PROC_FS
2687         if (ext4_proc_root)
2688                 sbi->s_proc = proc_mkdir(sb->s_id, ext4_proc_root);
2689 #endif
2690 
2691         bgl_lock_init(sbi->s_blockgroup_lock);
2692 
2693         for (i = 0; i < db_count; i++) {
2694                 block = descriptor_loc(sb, logical_sb_block, i);
2695                 sbi->s_group_desc[i] = sb_bread(sb, block);
2696                 if (!sbi->s_group_desc[i]) {
2697                         ext4_msg(sb, KERN_ERR,
2698                                "can't read group descriptor %d", i);
2699                         db_count = i;
2700                         goto failed_mount2;
2701                 }
2702         }
2703         if (!ext4_check_descriptors(sb)) {
2704                 ext4_msg(sb, KERN_ERR, "group descriptors corrupted!");
2705                 goto failed_mount2;
2706         }
2707         if (EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_FLEX_BG))
2708                 if (!ext4_fill_flex_info(sb)) {
2709                         ext4_msg(sb, KERN_ERR,
2710                                "unable to initialize "
2711                                "flex_bg meta info!");
2712                         goto failed_mount2;
2713                 }
2714 
2715         sbi->s_gdb_count = db_count;
2716         get_random_bytes(&sbi->s_next_generation, sizeof(u32));
2717         spin_lock_init(&sbi->s_next_gen_lock);
2718 
2719         err = percpu_counter_init(&sbi->s_freeblocks_counter,
2720                         ext4_count_free_blocks(sb));
2721         if (!err) {
2722                 err = percpu_counter_init(&sbi->s_freeinodes_counter,
2723                                 ext4_count_free_inodes(sb));
2724         }
2725         if (!err) {
2726                 err = percpu_counter_init(&sbi->s_dirs_counter,
2727                                 ext4_count_dirs(sb));
2728         }
2729         if (!err) {
2730                 err = percpu_counter_init(&sbi->s_dirtyblocks_counter, 0);
2731         }
2732         if (err) {
2733                 ext4_msg(sb, KERN_ERR, "insufficient memory");
2734                 goto failed_mount3;
2735         }
2736 
2737         sbi->s_stripe = ext4_get_stripe_size(sbi);
2738         sbi->s_max_writeback_mb_bump = 128;
2739 
2740         /*
2741          * set up enough so that it can read an inode
2742          */
2743         if (!test_opt(sb, NOLOAD) &&
2744             EXT4_HAS_COMPAT_FEATURE(sb, EXT4_FEATURE_COMPAT_HAS_JOURNAL))
2745                 sb->s_op = &ext4_sops;
2746         else
2747                 sb->s_op = &ext4_nojournal_sops;
2748         sb->s_export_op = &ext4_export_ops;
2749         sb->s_xattr = ext4_xattr_handlers;
2750 #ifdef CONFIG_QUOTA
2751         sb->s_qcop = &ext4_qctl_operations;
2752         sb->dq_op = &ext4_quota_operations;
2753 #endif
2754         INIT_LIST_HEAD(&sbi->s_orphan); /* unlinked but open files */
2755         mutex_init(&sbi->s_orphan_lock);
2756         mutex_init(&sbi->s_resize_lock);
2757 
2758         sb->s_root = NULL;
2759 
2760         needs_recovery = (es->s_last_orphan != 0 ||
2761                           EXT4_HAS_INCOMPAT_FEATURE(sb,
2762                                     EXT4_FEATURE_INCOMPAT_RECOVER));
2763 
2764         /*
2765          * The first inode we look at is the journal inode.  Don't try
2766          * root first: it may be modified in the journal!
2767          */
2768         if (!test_opt(sb, NOLOAD) &&
2769             EXT4_HAS_COMPAT_FEATURE(sb, EXT4_FEATURE_COMPAT_HAS_JOURNAL)) {
2770                 if (ext4_load_journal(sb, es, journal_devnum))
2771                         goto failed_mount3;
2772                 if (!(sb->s_flags & MS_RDONLY) &&
2773                     EXT4_SB(sb)->s_journal->j_failed_commit) {
2774                         ext4_msg(sb, KERN_CRIT, "error: "
2775                                "ext4_fill_super: Journal transaction "
2776                                "%u is corrupt",
2777                                EXT4_SB(sb)->s_journal->j_failed_commit);
2778                         if (test_opt(sb, ERRORS_RO)) {
2779                                 ext4_msg(sb, KERN_CRIT,
2780                                        "Mounting filesystem read-only");
2781                                 sb->s_flags |= MS_RDONLY;
2782                                 EXT4_SB(sb)->s_mount_state |= EXT4_ERROR_FS;
2783                                 es->s_state |= cpu_to_le16(EXT4_ERROR_FS);
2784                         }
2785                         if (test_opt(sb, ERRORS_PANIC)) {
2786                                 EXT4_SB(sb)->s_mount_state |= EXT4_ERROR_FS;
2787                                 es->s_state |= cpu_to_le16(EXT4_ERROR_FS);
2788                                 ext4_commit_super(sb, 1);
2789                                 goto failed_mount4;
2790                         }
2791                 }
2792         } else if (test_opt(sb, NOLOAD) && !(sb->s_flags & MS_RDONLY) &&
2793               EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_RECOVER)) {
2794                 ext4_msg(sb, KERN_ERR, "required journal recovery "
2795                        "suppressed and not mounted read-only");
2796                 goto failed_mount4;
2797         } else {
2798                 clear_opt(sbi->s_mount_opt, DATA_FLAGS);
2799                 set_opt(sbi->s_mount_opt, WRITEBACK_DATA);
2800                 sbi->s_journal = NULL;
2801                 needs_recovery = 0;
2802                 goto no_journal;
2803         }
2804 
2805         if (ext4_blocks_count(es) > 0xffffffffULL &&
2806             !jbd2_journal_set_features(EXT4_SB(sb)->s_journal, 0, 0,
2807                                        JBD2_FEATURE_INCOMPAT_64BIT)) {
2808                 ext4_msg(sb, KERN_ERR, "Failed to set 64-bit journal feature");
2809                 goto failed_mount4;
2810         }
2811 
2812         if (test_opt(sb, JOURNAL_ASYNC_COMMIT)) {
2813                 jbd2_journal_set_features(sbi->s_journal,
2814                                 JBD2_FEATURE_COMPAT_CHECKSUM, 0,
2815                                 JBD2_FEATURE_INCOMPAT_ASYNC_COMMIT);
2816         } else if (test_opt(sb, JOURNAL_CHECKSUM)) {
2817                 jbd2_journal_set_features(sbi->s_journal,
2818                                 JBD2_FEATURE_COMPAT_CHECKSUM, 0, 0);
2819                 jbd2_journal_clear_features(sbi->s_journal, 0, 0,
2820                                 JBD2_FEATURE_INCOMPAT_ASYNC_COMMIT);
2821         } else {
2822                 jbd2_journal_clear_features(sbi->s_journal,
2823                                 JBD2_FEATURE_COMPAT_CHECKSUM, 0,
2824                                 JBD2_FEATURE_INCOMPAT_ASYNC_COMMIT);
2825         }
2826 
2827         /* We have now updated the journal if required, so we can
2828          * validate the data journaling mode. */
2829         switch (test_opt(sb, DATA_FLAGS)) {
2830         case 0:
2831                 /* No mode set, assume a default based on the journal
2832                  * capabilities: ORDERED_DATA if the journal can
2833                  * cope, else JOURNAL_DATA
2834                  */
2835                 if (jbd2_journal_check_available_features
2836                     (sbi->s_journal, 0, 0, JBD2_FEATURE_INCOMPAT_REVOKE))
2837                         set_opt(sbi->s_mount_opt, ORDERED_DATA);
2838                 else
2839                         set_opt(sbi->s_mount_opt, JOURNAL_DATA);
2840                 break;
2841 
2842         case EXT4_MOUNT_ORDERED_DATA:
2843         case EXT4_MOUNT_WRITEBACK_DATA:
2844                 if (!jbd2_journal_check_available_features
2845                     (sbi->s_journal, 0, 0, JBD2_FEATURE_INCOMPAT_REVOKE)) {
2846                         ext4_msg(sb, KERN_ERR, "Journal does not support "
2847                                "requested data journaling mode");
2848                         goto failed_mount4;
2849                 }
2850         default:
2851                 break;
2852         }
2853         set_task_ioprio(sbi->s_journal->j_task, journal_ioprio);
2854 
2855 no_journal:
2856 
2857         if (test_opt(sb, NOBH)) {
2858                 if (!(test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_WRITEBACK_DATA)) {
2859                         ext4_msg(sb, KERN_WARNING, "Ignoring nobh option - "
2860                                 "its supported only with writeback mode");
2861                         clear_opt(sbi->s_mount_opt, NOBH);
2862                 }
2863         }
2864         EXT4_SB(sb)->dio_unwritten_wq = create_workqueue("ext4-dio-unwritten");
2865         if (!EXT4_SB(sb)->dio_unwritten_wq) {
2866                 printk(KERN_ERR "EXT4-fs: failed to create DIO workqueue\n");
2867                 goto failed_mount_wq;
2868         }
2869 
2870         /*
2871          * The jbd2_journal_load will have done any necessary log recovery,
2872          * so we can safely mount the rest of the filesystem now.
2873          */
2874 
2875         root = ext4_iget(sb, EXT4_ROOT_INO);
2876         if (IS_ERR(root)) {
2877                 ext4_msg(sb, KERN_ERR, "get root inode failed");
2878                 ret = PTR_ERR(root);
2879                 goto failed_mount4;
2880         }
2881         if (!S_ISDIR(root->i_mode) || !root->i_blocks || !root->i_size) {
2882                 iput(root);
2883                 ext4_msg(sb, KERN_ERR, "corrupt root inode, run e2fsck");
2884                 goto failed_mount4;
2885         }
2886         sb->s_root = d_alloc_root(root);
2887         if (!sb->s_root) {
2888                 ext4_msg(sb, KERN_ERR, "get root dentry failed");
2889                 iput(root);
2890                 ret = -ENOMEM;
2891                 goto failed_mount4;
2892         }
2893 
2894         ext4_setup_super(sb, es, sb->s_flags & MS_RDONLY);
2895 
2896         /* determine the minimum size of new large inodes, if present */
2897         if (sbi->s_inode_size > EXT4_GOOD_OLD_INODE_SIZE) {
2898                 sbi->s_want_extra_isize = sizeof(struct ext4_inode) -
2899                                                      EXT4_GOOD_OLD_INODE_SIZE;
2900                 if (EXT4_HAS_RO_COMPAT_FEATURE(sb,
2901                                        EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE)) {
2902                         if (sbi->s_want_extra_isize <
2903                             le16_to_cpu(es->s_want_extra_isize))
2904                                 sbi->s_want_extra_isize =
2905                                         le16_to_cpu(es->s_want_extra_isize);
2906                         if (sbi->s_want_extra_isize <
2907                             le16_to_cpu(es->s_min_extra_isize))
2908                                 sbi->s_want_extra_isize =
2909                                         le16_to_cpu(es->s_min_extra_isize);
2910                 }
2911         }
2912         /* Check if enough inode space is available */
2913         if (EXT4_GOOD_OLD_INODE_SIZE + sbi->s_want_extra_isize >
2914                                                         sbi->s_inode_size) {
2915                 sbi->s_want_extra_isize = sizeof(struct ext4_inode) -
2916                                                        EXT4_GOOD_OLD_INODE_SIZE;
2917                 ext4_msg(sb, KERN_INFO, "required extra inode space not"
2918                          "available");
2919         }
2920 
2921         if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA) {
2922                 ext4_msg(sb, KERN_WARNING, "Ignoring delalloc option - "
2923                          "requested data journaling mode");
2924                 clear_opt(sbi->s_mount_opt, DELALLOC);
2925         } else if (test_opt(sb, DELALLOC))
2926                 ext4_msg(sb, KERN_INFO, "delayed allocation enabled");
2927 
2928         err = ext4_setup_system_zone(sb);
2929         if (err) {
2930                 ext4_msg(sb, KERN_ERR, "failed to initialize system "
2931                          "zone (%d)\n", err);
2932                 goto failed_mount4;
2933         }
2934 
2935         ext4_ext_init(sb);
2936         err = ext4_mb_init(sb, needs_recovery);
2937         if (err) {
2938                 ext4_msg(sb, KERN_ERR, "failed to initalize mballoc (%d)",
2939                          err);
2940                 goto failed_mount4;
2941         }
2942 
2943         sbi->s_kobj.kset = ext4_kset;
2944         init_completion(&sbi->s_kobj_unregister);
2945         err = kobject_init_and_add(&sbi->s_kobj, &ext4_ktype, NULL,
2946                                    "%s", sb->s_id);
2947         if (err) {
2948                 ext4_mb_release(sb);
2949                 ext4_ext_release(sb);
2950                 goto failed_mount4;
2951         };
2952 
2953         EXT4_SB(sb)->s_mount_state |= EXT4_ORPHAN_FS;
2954         ext4_orphan_cleanup(sb, es);
2955         EXT4_SB(sb)->s_mount_state &= ~EXT4_ORPHAN_FS;
2956         if (needs_recovery) {
2957                 ext4_msg(sb, KERN_INFO, "recovery complete");
2958                 ext4_mark_recovery_complete(sb, es);
2959         }
2960         if (EXT4_SB(sb)->s_journal) {
2961                 if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA)
2962                         descr = " journalled data mode";
2963                 else if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_ORDERED_DATA)
2964                         descr = " ordered data mode";
2965                 else
2966                         descr = " writeback data mode";
2967         } else
2968                 descr = "out journal";
2969 
2970         ext4_msg(sb, KERN_INFO, "mounted filesystem with%s", descr);
2971 
2972         lock_kernel();
2973         return 0;
2974 
2975 cantfind_ext4:
2976         if (!silent)
2977                 ext4_msg(sb, KERN_ERR, "VFS: Can't find ext4 filesystem");
2978         goto failed_mount;
2979 
2980 failed_mount4:
2981         ext4_msg(sb, KERN_ERR, "mount failed");
2982         destroy_workqueue(EXT4_SB(sb)->dio_unwritten_wq);
2983 failed_mount_wq:
2984         ext4_release_system_zone(sb);
2985         if (sbi->s_journal) {
2986                 jbd2_journal_destroy(sbi->s_journal);
2987                 sbi->s_journal = NULL;
2988         }
2989 failed_mount3:
2990         if (sbi->s_flex_groups) {
2991                 if (is_vmalloc_addr(sbi->s_flex_groups))
2992                         vfree(sbi->s_flex_groups);
2993                 else
2994                         kfree(sbi->s_flex_groups);
2995         }
2996         percpu_counter_destroy(&sbi->s_freeblocks_counter);
2997         percpu_counter_destroy(&sbi->s_freeinodes_counter);
2998         percpu_counter_destroy(&sbi->s_dirs_counter);
2999         percpu_counter_destroy(&sbi->s_dirtyblocks_counter);
3000 failed_mount2:
3001         for (i = 0; i < db_count; i++)
3002                 brelse(sbi->s_group_desc[i]);
3003         kfree(sbi->s_group_desc);
3004 failed_mount:
3005         if (sbi->s_proc) {
3006                 remove_proc_entry(sb->s_id, ext4_proc_root);
3007         }
3008 #ifdef CONFIG_QUOTA
3009         for (i = 0; i < MAXQUOTAS; i++)
3010                 kfree(sbi->s_qf_names[i]);
3011 #endif
3012         ext4_blkdev_remove(sbi);
3013         brelse(bh);
3014 out_fail:
3015         sb->s_fs_info = NULL;
3016         kfree(sbi->s_blockgroup_lock);
3017         kfree(sbi);
3018         lock_kernel();
3019         return ret;
3020 }
3021 
3022 /*
3023  * Setup any per-fs journal parameters now.  We'll do this both on
3024  * initial mount, once the journal has been initialised but before we've
3025  * done any recovery; and again on any subsequent remount.
3026  */
3027 static void ext4_init_journal_params(struct super_block *sb, journal_t *journal)
3028 {
3029         struct ext4_sb_info *sbi = EXT4_SB(sb);
3030 
3031         journal->j_commit_interval = sbi->s_commit_interval;
3032         journal->j_min_batch_time = sbi->s_min_batch_time;
3033         journal->j_max_batch_time = sbi->s_max_batch_time;
3034 
3035         spin_lock(&journal->j_state_lock);
3036         if (test_opt(sb, BARRIER))
3037                 journal->j_flags |= JBD2_BARRIER;
3038         else
3039                 journal->j_flags &= ~JBD2_BARRIER;
3040         if (test_opt(sb, DATA_ERR_ABORT))
3041                 journal->j_flags |= JBD2_ABORT_ON_SYNCDATA_ERR;
3042         else
3043                 journal->j_flags &= ~JBD2_ABORT_ON_SYNCDATA_ERR;
3044         spin_unlock(&journal->j_state_lock);
3045 }
3046 
3047 static journal_t *ext4_get_journal(struct super_block *sb,
3048                                    unsigned int journal_inum)
3049 {
3050         struct inode *journal_inode;
3051         journal_t *journal;
3052 
3053         BUG_ON(!EXT4_HAS_COMPAT_FEATURE(sb, EXT4_FEATURE_COMPAT_HAS_JOURNAL));
3054 
3055         /* First, test for the existence of a valid inode on disk.  Bad
3056          * things happen if we iget() an unused inode, as the subsequent
3057          * iput() will try to delete it. */
3058 
3059         journal_inode = ext4_iget(sb, journal_inum);
3060         if (IS_ERR(journal_inode)) {
3061                 ext4_msg(sb, KERN_ERR, "no journal found");
3062                 return NULL;
3063         }
3064         if (!journal_inode->i_nlink) {
3065                 make_bad_inode(journal_inode);
3066                 iput(journal_inode);
3067                 ext4_msg(sb, KERN_ERR, "journal inode is deleted");
3068                 return NULL;
3069         }
3070 
3071         jbd_debug(2, "Journal inode found at %p: %lld bytes\n",
3072                   journal_inode, journal_inode->i_size);
3073         if (!S_ISREG(journal_inode->i_mode)) {
3074                 ext4_msg(sb, KERN_ERR, "invalid journal inode");
3075                 iput(journal_inode);
3076                 return NULL;
3077         }
3078 
3079         journal = jbd2_journal_init_inode(journal_inode);
3080         if (!journal) {
3081                 ext4_msg(sb, KERN_ERR, "Could not load journal inode");
3082                 iput(journal_inode);
3083                 return NULL;
3084         }
3085         journal->j_private = sb;
3086         ext4_init_journal_params(sb, journal);
3087         return journal;
3088 }
3089 
3090 static journal_t *ext4_get_dev_journal(struct super_block *sb,
3091                                        dev_t j_dev)
3092 {
3093         struct buffer_head *bh;
3094         journal_t *journal;
3095         ext4_fsblk_t start;
3096         ext4_fsblk_t len;
3097         int hblock, blocksize;
3098         ext4_fsblk_t sb_block;
3099         unsigned long offset;
3100         struct ext4_super_block *es;
3101         struct block_device *bdev;
3102 
3103         BUG_ON(!EXT4_HAS_COMPAT_FEATURE(sb, EXT4_FEATURE_COMPAT_HAS_JOURNAL));
3104 
3105         bdev = ext4_blkdev_get(j_dev, sb);
3106         if (bdev == NULL)
3107                 return NULL;
3108 
3109         if (bd_claim(bdev, sb)) {
3110                 ext4_msg(sb, KERN_ERR,
3111                         "failed to claim external journal device");
3112                 blkdev_put(bdev, FMODE_READ|FMODE_WRITE);
3113                 return NULL;
3114         }
3115 
3116         blocksize = sb->s_blocksize;
3117         hblock = bdev_logical_block_size(bdev);
3118         if (blocksize < hblock) {
3119                 ext4_msg(sb, KERN_ERR,
3120                         "blocksize too small for journal device");
3121                 goto out_bdev;
3122         }
3123 
3124         sb_block = EXT4_MIN_BLOCK_SIZE / blocksize;
3125         offset = EXT4_MIN_BLOCK_SIZE % blocksize;
3126         set_blocksize(bdev, blocksize);
3127         if (!(bh = __bread(bdev, sb_block, blocksize))) {
3128                 ext4_msg(sb, KERN_ERR, "couldn't read superblock of "
3129                        "external journal");
3130                 goto out_bdev;
3131         }
3132 
3133         es = (struct ext4_super_block *) (((char *)bh->b_data) + offset);
3134         if ((le16_to_cpu(es->s_magic) != EXT4_SUPER_MAGIC) ||
3135             !(le32_to_cpu(es->s_feature_incompat) &
3136               EXT4_FEATURE_INCOMPAT_JOURNAL_DEV)) {
3137                 ext4_msg(sb, KERN_ERR, "external journal has "
3138                                         "bad superblock");
3139                 brelse(bh);
3140                 goto out_bdev;
3141         }
3142 
3143         if (memcmp(EXT4_SB(sb)->s_es->s_journal_uuid, es->s_uuid, 16)) {
3144                 ext4_msg(sb, KERN_ERR, "journal UUID does not match");
3145                 brelse(bh);
3146                 goto out_bdev;
3147         }
3148 
3149         len = ext4_blocks_count(es);
3150         start = sb_block + 1;
3151         brelse(bh);     /* we're done with the superblock */
3152 
3153         journal = jbd2_journal_init_dev(bdev, sb->s_bdev,
3154                                         start, len, blocksize);
3155         if (!journal) {
3156                 ext4_msg(sb, KERN_ERR, "failed to create device journal");
3157                 goto out_bdev;
3158         }
3159         journal->j_private = sb;
3160         ll_rw_block(READ, 1, &journal->j_sb_buffer);
3161         wait_on_buffer(journal->j_sb_buffer);
3162         if (!buffer_uptodate(journal->j_sb_buffer)) {
3163                 ext4_msg(sb, KERN_ERR, "I/O error on journal device");
3164                 goto out_journal;
3165         }
3166         if (be32_to_cpu(journal->j_superblock->s_nr_users) != 1) {
3167                 ext4_msg(sb, KERN_ERR, "External journal has more than one "
3168                                         "user (unsupported) - %d",
3169                         be32_to_cpu(journal->j_superblock->s_nr_users));
3170                 goto out_journal;
3171         }
3172         EXT4_SB(sb)->journal_bdev = bdev;
3173         ext4_init_journal_params(sb, journal);
3174         return journal;
3175 
3176 out_journal:
3177         jbd2_journal_destroy(journal);
3178 out_bdev:
3179         ext4_blkdev_put(bdev);
3180         return NULL;
3181 }
3182 
3183 static int ext4_load_journal(struct super_block *sb,
3184                              struct ext4_super_block *es,
3185                              unsigned long journal_devnum)
3186 {
3187         journal_t *journal;
3188         unsigned int journal_inum = le32_to_cpu(es->s_journal_inum);
3189         dev_t journal_dev;
3190         int err = 0;
3191         int really_read_only;
3192 
3193         BUG_ON(!EXT4_HAS_COMPAT_FEATURE(sb, EXT4_FEATURE_COMPAT_HAS_JOURNAL));
3194 
3195         if (journal_devnum &&
3196             journal_devnum != le32_to_cpu(es->s_journal_dev)) {
3197                 ext4_msg(sb, KERN_INFO, "external journal device major/minor "
3198                         "numbers have changed");
3199                 journal_dev = new_decode_dev(journal_devnum);
3200         } else
3201                 journal_dev = new_decode_dev(le32_to_cpu(es->s_journal_dev));
3202 
3203         really_read_only = bdev_read_only(sb->s_bdev);
3204 
3205         /*
3206          * Are we loading a blank journal or performing recovery after a
3207          * crash?  For recovery, we need to check in advance whether we
3208          * can get read-write access to the device.
3209          */
3210         if (EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_RECOVER)) {
3211                 if (sb->s_flags & MS_RDONLY) {
3212                         ext4_msg(sb, KERN_INFO, "INFO: recovery "
3213                                         "required on readonly filesystem");
3214                         if (really_read_only) {
3215                                 ext4_msg(sb, KERN_ERR, "write access "
3216                                         "unavailable, cannot proceed");
3217                                 return -EROFS;
3218                         }
3219                         ext4_msg(sb, KERN_INFO, "write access will "
3220                                "be enabled during recovery");
3221                 }
3222         }
3223 
3224         if (journal_inum && journal_dev) {
3225                 ext4_msg(sb, KERN_ERR, "filesystem has both journal "
3226                        "and inode journals!");
3227                 return -EINVAL;
3228         }
3229 
3230         if (journal_inum) {
3231                 if (!(journal = ext4_get_journal(sb, journal_inum)))
3232                         return -EINVAL;
3233         } else {
3234                 if (!(journal = ext4_get_dev_journal(sb, journal_dev)))
3235                         return -EINVAL;
3236         }
3237 
3238         if (journal->j_flags & JBD2_BARRIER)
3239                 ext4_msg(sb, KERN_INFO, "barriers enabled");
3240         else
3241                 ext4_msg(sb, KERN_INFO, "barriers disabled");
3242 
3243         if (!really_read_only && test_opt(sb, UPDATE_JOURNAL)) {
3244                 err = jbd2_journal_update_format(journal);
3245                 if (err)  {
3246                         ext4_msg(sb, KERN_ERR, "error updating journal");
3247                         jbd2_journal_destroy(journal);
3248                         return err;
3249                 }
3250         }
3251 
3252         if (!EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_RECOVER))
3253                 err = jbd2_journal_wipe(journal, !really_read_only);
3254         if (!err)
3255                 err = jbd2_journal_load(journal);
3256 
3257         if (err) {
3258                 ext4_msg(sb, KERN_ERR, "error loading journal");
3259                 jbd2_journal_destroy(journal);
3260                 return err;
3261         }
3262 
3263         EXT4_SB(sb)->s_journal = journal;
3264         ext4_clear_journal_err(sb, es);
3265 
3266         if (journal_devnum &&
3267             journal_devnum != le32_to_cpu(es->s_journal_dev)) {
3268                 es->s_journal_dev = cpu_to_le32(journal_devnum);
3269 
3270                 /* Make sure we flush the recovery flag to disk. */
3271                 ext4_commit_super(sb, 1);
3272         }
3273 
3274         return 0;
3275 }
3276 
3277 static int ext4_commit_super(struct super_block *sb, int sync)
3278 {
3279         struct ext4_super_block *es = EXT4_SB(sb)->s_es;
3280         struct buffer_head *sbh = EXT4_SB(sb)->s_sbh;
3281         int error = 0;
3282 
3283         if (!sbh)
3284                 return error;
3285         if (buffer_write_io_error(sbh)) {
3286                 /*
3287                  * Oh, dear.  A previous attempt to write the
3288                  * superblock failed.  This could happen because the
3289                  * USB device was yanked out.  Or it could happen to
3290                  * be a transient write error and maybe the block will
3291                  * be remapped.  Nothing we can do but to retry the
3292                  * write and hope for the best.
3293                  */
3294                 ext4_msg(sb, KERN_ERR, "previous I/O error to "
3295                        "superblock detected");
3296                 clear_buffer_write_io_error(sbh);
3297                 set_buffer_uptodate(sbh);
3298         }
3299         /*
3300          * If the file system is mounted read-only, don't update the
3301          * superblock write time.  This avoids updating the superblock
3302          * write time when we are mounting the root file system
3303          * read/only but we need to replay the journal; at that point,
3304          * for people who are east of GMT and who make their clock
3305          * tick in localtime for Windows bug-for-bug compatibility,
3306          * the clock is set in the future, and this will cause e2fsck
3307          * to complain and force a full file system check.
3308          */
3309         if (!(sb->s_flags & MS_RDONLY))
3310                 es->s_wtime = cpu_to_le32(get_seconds());
3311         es->s_kbytes_written =
3312                 cpu_to_le64(EXT4_SB(sb)->s_kbytes_written + 
3313                             ((part_stat_read(sb->s_bdev->bd_part, sectors[1]) -
3314                               EXT4_SB(sb)->s_sectors_written_start) >> 1));
3315         ext4_free_blocks_count_set(es, percpu_counter_sum_positive(
3316                                         &EXT4_SB(sb)->s_freeblocks_counter));
3317         es->s_free_inodes_count = cpu_to_le32(percpu_counter_sum_positive(
3318                                         &EXT4_SB(sb)->s_freeinodes_counter));
3319         sb->s_dirt = 0;
3320         BUFFER_TRACE(sbh, "marking dirty");
3321         mark_buffer_dirty(sbh);
3322         if (sync) {
3323                 error = sync_dirty_buffer(sbh);
3324                 if (error)
3325                         return error;
3326 
3327                 error = buffer_write_io_error(sbh);
3328                 if (error) {
3329                         ext4_msg(sb, KERN_ERR, "I/O error while writing "
3330                                "superblock");
3331                         clear_buffer_write_io_error(sbh);
3332                         set_buffer_uptodate(sbh);
3333                 }
3334         }
3335         return error;
3336 }
3337 
3338 /*
3339  * Have we just finished recovery?  If so, and if we are mounting (or
3340  * remounting) the filesystem readonly, then we will end up with a
3341  * consistent fs on disk.  Record that fact.
3342  */
3343 static void ext4_mark_recovery_complete(struct super_block *sb,
3344                                         struct ext4_super_block *es)
3345 {
3346         journal_t *journal = EXT4_SB(sb)->s_journal;
3347 
3348         if (!EXT4_HAS_COMPAT_FEATURE(sb, EXT4_FEATURE_COMPAT_HAS_JOURNAL)) {
3349                 BUG_ON(journal != NULL);
3350                 return;
3351         }
3352         jbd2_journal_lock_updates(journal);
3353         if (jbd2_journal_flush(journal) < 0)
3354                 goto out;
3355 
3356         if (EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_RECOVER) &&
3357             sb->s_flags & MS_RDONLY) {
3358                 EXT4_CLEAR_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_RECOVER);
3359                 ext4_commit_super(sb, 1);
3360         }
3361 
3362 out:
3363         jbd2_journal_unlock_updates(journal);
3364 }
3365 
3366 /*
3367  * If we are mounting (or read-write remounting) a filesystem whose journal
3368  * has recorded an error from a previous lifetime, move that error to the
3369  * main filesystem now.
3370  */
3371 static void ext4_clear_journal_err(struct super_block *sb,
3372                                    struct ext4_super_block *es)
3373 {
3374         journal_t *journal;
3375         int j_errno;
3376         const char *errstr;
3377 
3378         BUG_ON(!EXT4_HAS_COMPAT_FEATURE(sb, EXT4_FEATURE_COMPAT_HAS_JOURNAL));
3379 
3380         journal = EXT4_SB(sb)->s_journal;
3381 
3382         /*
3383          * Now check for any error status which may have been recorded in the
3384          * journal by a prior ext4_error() or ext4_abort()
3385          */
3386 
3387         j_errno = jbd2_journal_errno(journal);
3388         if (j_errno) {
3389                 char nbuf[16];
3390 
3391                 errstr = ext4_decode_error(sb, j_errno, nbuf);
3392                 ext4_warning(sb, __func__, "Filesystem error recorded "
3393                              "from previous mount: %s", errstr);
3394                 ext4_warning(sb, __func__, "Marking fs in need of "
3395                              "filesystem check.");
3396 
3397                 EXT4_SB(sb)->s_mount_state |= EXT4_ERROR_FS;
3398                 es->s_state |= cpu_to_le16(EXT4_ERROR_FS);
3399                 ext4_commit_super(sb, 1);
3400 
3401                 jbd2_journal_clear_err(journal);
3402         }
3403 }
3404 
3405 /*
3406  * Force the running and committing transactions to commit,
3407  * and wait on the commit.
3408  */
3409 int ext4_force_commit(struct super_block *sb)
3410 {
3411         journal_t *journal;
3412         int ret = 0;
3413 
3414         if (sb->s_flags & MS_RDONLY)
3415                 return 0;
3416 
3417         journal = EXT4_SB(sb)->s_journal;
3418         if (journal)
3419                 ret = ext4_journal_force_commit(journal);
3420 
3421         return ret;
3422 }
3423 
3424 static void ext4_write_super(struct super_block *sb)
3425 {
3426         lock_super(sb);
3427         ext4_commit_super(sb, 1);
3428         unlock_super(sb);
3429 }
3430 
3431 static int ext4_sync_fs(struct super_block *sb, int wait)
3432 {
3433         int ret = 0;
3434         tid_t target;
3435         struct ext4_sb_info *sbi = EXT4_SB(sb);
3436 
3437         trace_ext4_sync_fs(sb, wait);
3438         flush_workqueue(sbi->dio_unwritten_wq);
3439         if (jbd2_journal_start_commit(sbi->s_journal, &target)) {
3440                 if (wait)
3441                         jbd2_log_wait_commit(sbi->s_journal, target);
3442         }
3443         return ret;
3444 }
3445 
3446 /*
3447  * LVM calls this function before a (read-only) snapshot is created.  This
3448  * gives us a chance to flush the journal completely and mark the fs clean.
3449  */
3450 static int ext4_freeze(struct super_block *sb)
3451 {
3452         int error = 0;
3453         journal_t *journal;
3454 
3455         if (sb->s_flags & MS_RDONLY)
3456                 return 0;
3457 
3458         journal = EXT4_SB(sb)->s_journal;
3459 
3460         /* Now we set up the journal barrier. */
3461         jbd2_journal_lock_updates(journal);
3462 
3463         /*
3464          * Don't clear the needs_recovery flag if we failed to flush
3465          * the journal.
3466          */
3467         error = jbd2_journal_flush(journal);
3468         if (error < 0) {
3469         out:
3470                 jbd2_journal_unlock_updates(journal);
3471                 return error;
3472         }
3473 
3474         /* Journal blocked and flushed, clear needs_recovery flag. */
3475         EXT4_CLEAR_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_RECOVER);
3476         error = ext4_commit_super(sb, 1);
3477         if (error)
3478                 goto out;
3479         return 0;
3480 }
3481 
3482 /*
3483  * Called by LVM after the snapshot is done.  We need to reset the RECOVER
3484  * flag here, even though the filesystem is not technically dirty yet.
3485  */
3486 static int ext4_unfreeze(struct super_block *sb)
3487 {
3488         if (sb->s_flags & MS_RDONLY)
3489                 return 0;
3490 
3491         lock_super(sb);
3492         /* Reset the needs_recovery flag before the fs is unlocked. */
3493         EXT4_SET_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_RECOVER);
3494         ext4_commit_super(sb, 1);
3495         unlock_super(sb);
3496         jbd2_journal_unlock_updates(EXT4_SB(sb)->s_journal);
3497         return 0;
3498 }
3499 
3500 static int ext4_remount(struct super_block *sb, int *flags, char *data)
3501 {
3502         struct ext4_super_block *es;
3503         struct ext4_sb_info *sbi = EXT4_SB(sb);
3504         ext4_fsblk_t n_blocks_count = 0;
3505         unsigned long old_sb_flags;
3506         struct ext4_mount_options old_opts;
3507         ext4_group_t g;
3508         unsigned int journal_ioprio = DEFAULT_JOURNAL_IOPRIO;
3509         int err;
3510 #ifdef CONFIG_QUOTA
3511         int i;
3512 #endif
3513 
3514         lock_kernel();
3515 
3516         /* Store the original options */
3517         lock_super(sb);
3518         old_sb_flags = sb->s_flags;
3519         old_opts.s_mount_opt = sbi->s_mount_opt;
3520         old_opts.s_resuid = sbi->s_resuid;
3521         old_opts.s_resgid = sbi->s_resgid;
3522         old_opts.s_commit_interval = sbi->s_commit_interval;
3523         old_opts.s_min_batch_time = sbi->s_min_batch_time;
3524         old_opts.s_max_batch_time = sbi->s_max_batch_time;
3525 #ifdef CONFIG_QUOTA
3526         old_opts.s_jquota_fmt = sbi->s_jquota_fmt;
3527         for (i = 0; i < MAXQUOTAS; i++)
3528                 old_opts.s_qf_names[i] = sbi->s_qf_names[i];
3529 #endif
3530         if (sbi->s_journal && sbi->s_journal->j_task->io_context)
3531                 journal_ioprio = sbi->s_journal->j_task->io_context->ioprio;
3532 
3533         /*
3534          * Allow the "check" option to be passed as a remount option.
3535          */
3536         if (!parse_options(data, sb, NULL, &journal_ioprio,
3537                            &n_blocks_count, 1)) {
3538                 err = -EINVAL;
3539                 goto restore_opts;
3540         }
3541 
3542         if (sbi->s_mount_flags & EXT4_MF_FS_ABORTED)
3543                 ext4_abort(sb, __func__, "Abort forced by user");
3544 
3545         sb->s_flags = (sb->s_flags & ~MS_POSIXACL) |
3546                 ((sbi->s_mount_opt & EXT4_MOUNT_POSIX_ACL) ? MS_POSIXACL : 0);
3547 
3548         es = sbi->s_es;
3549 
3550         if (sbi->s_journal) {
3551                 ext4_init_journal_params(sb, sbi->s_journal);
3552                 set_task_ioprio(sbi->s_journal->j_task, journal_ioprio);
3553         }
3554 
3555         if ((*flags & MS_RDONLY) != (sb->s_flags & MS_RDONLY) ||
3556                 n_blocks_count > ext4_blocks_count(es)) {
3557                 if (sbi->s_mount_flags & EXT4_MF_FS_ABORTED) {
3558                         err = -EROFS;
3559                         goto restore_opts;
3560                 }
3561 
3562                 if (*flags & MS_RDONLY) {
3563                         /*
3564                          * First of all, the unconditional stuff we have to do
3565                          * to disable replay of the journal when we next remount
3566                          */
3567                         sb->s_flags |= MS_RDONLY;
3568 
3569                         /*
3570                          * OK, test if we are remounting a valid rw partition
3571                          * readonly, and if so set the rdonly flag and then
3572                          * mark the partition as valid again.
3573                          */
3574                         if (!(es->s_state & cpu_to_le16(EXT4_VALID_FS)) &&
3575                             (sbi->s_mount_state & EXT4_VALID_FS))
3576                                 es->s_state = cpu_to_le16(sbi->s_mount_state);
3577 
3578                         if (sbi->s_journal)
3579                                 ext4_mark_recovery_complete(sb, es);
3580                 } else {
3581                         /* Make sure we can mount this feature set readwrite */
3582                         if (!ext4_feature_set_ok(sb, 0)) {
3583                                 err = -EROFS;
3584                                 goto restore_opts;
3585                         }
3586                         /*
3587                          * Make sure the group descriptor checksums
3588                          * are sane.  If they aren't, refuse to remount r/w.
3589                          */
3590                         for (g = 0; g < sbi->s_groups_count; g++) {
3591                                 struct ext4_group_desc *gdp =
3592                                         ext4_get_group_desc(sb, g, NULL);
3593 
3594                                 if (!ext4_group_desc_csum_verify(sbi, g, gdp)) {
3595                                         ext4_msg(sb, KERN_ERR,
3596                "ext4_remount: Checksum for group %u failed (%u!=%u)",
3597                 g, le16_to_cpu(ext4_group_desc_csum(sbi, g, gdp)),
3598                                                le16_to_cpu(gdp->bg_checksum));
3599                                         err = -EINVAL;
3600                                         goto restore_opts;
3601                                 }
3602                         }
3603 
3604                         /*
3605                          * If we have an unprocessed orphan list hanging
3606                          * around from a previously readonly bdev mount,
3607                          * require a full umount/remount for now.
3608                          */
3609                         if (es->s_last_orphan) {
3610                                 ext4_msg(sb, KERN_WARNING, "Couldn't "
3611                                        "remount RDWR because of unprocessed "
3612                                        "orphan inode list.  Please "
3613                                        "umount/remount instead");
3614                                 err = -EINVAL;
3615                                 goto restore_opts;
3616                         }
3617 
3618                         /*
3619                          * Mounting a RDONLY partition read-write, so reread
3620                          * and store the current valid flag.  (It may have
3621                          * been changed by e2fsck since we originally mounted
3622                          * the partition.)
3623                          */
3624                         if (sbi->s_journal)
3625                                 ext4_clear_journal_err(sb, es);
3626                         sbi->s_mount_state = le16_to_cpu(es->s_state);
3627                         if ((err = ext4_group_extend(sb, es, n_blocks_count)))
3628                                 goto restore_opts;
3629                         if (!ext4_setup_super(sb, es, 0))
3630                                 sb->s_flags &= ~MS_RDONLY;
3631                 }
3632         }
3633         ext4_setup_system_zone(sb);
3634         if (sbi->s_journal == NULL)
3635                 ext4_commit_super(sb, 1);
3636 
3637 #ifdef CONFIG_QUOTA
3638         /* Release old quota file names */
3639         for (i = 0; i < MAXQUOTAS; i++)
3640                 if (old_opts.s_qf_names[i] &&
3641                     old_opts.s_qf_names[i] != sbi->s_qf_names[i])
3642                         kfree(old_opts.s_qf_names[i]);
3643 #endif
3644         unlock_super(sb);
3645         unlock_kernel();
3646         return 0;
3647 
3648 restore_opts:
3649         sb->s_flags = old_sb_flags;
3650         sbi->s_mount_opt = old_opts.s_mount_opt;
3651         sbi->s_resuid = old_opts.s_resuid;
3652         sbi->s_resgid = old_opts.s_resgid;
3653         sbi->s_commit_interval = old_opts.s_commit_interval;
3654         sbi->s_min_batch_time = old_opts.s_min_batch_time;
3655         sbi->s_max_batch_time = old_opts.s_max_batch_time;
3656 #ifdef CONFIG_QUOTA
3657         sbi->s_jquota_fmt = old_opts.s_jquota_fmt;
3658         for (i = 0; i < MAXQUOTAS; i++) {
3659                 if (sbi->s_qf_names[i] &&
3660                     old_opts.s_qf_names[i] != sbi->s_qf_names[i])
3661                         kfree(sbi->s_qf_names[i]);
3662                 sbi->s_qf_names[i] = old_opts.s_qf_names[i];
3663         }
3664 #endif
3665         unlock_super(sb);
3666         unlock_kernel();
3667         return err;
3668 }
3669 
3670 static int ext4_statfs(struct dentry *dentry, struct kstatfs *buf)
3671 {
3672         struct super_block *sb = dentry->d_sb;
3673         struct ext4_sb_info *sbi = EXT4_SB(sb);
3674         struct ext4_super_block *es = sbi->s_es;
3675         u64 fsid;
3676 
3677         if (test_opt(sb, MINIX_DF)) {
3678                 sbi->s_overhead_last = 0;
3679         } else if (sbi->s_blocks_last != ext4_blocks_count(es)) {
3680                 ext4_group_t i, ngroups = ext4_get_groups_count(sb);
3681                 ext4_fsblk_t overhead = 0;
3682 
3683                 /*
3684                  * Compute the overhead (FS structures).  This is constant
3685                  * for a given filesystem unless the number of block groups
3686                  * changes so we cache the previous value until it does.
3687                  */
3688 
3689                 /*
3690                  * All of the blocks before first_data_block are
3691                  * overhead
3692                  */
3693                 overhead = le32_to_cpu(es->s_first_data_block);
3694 
3695                 /*
3696                  * Add the overhead attributed to the superblock and
3697                  * block group descriptors.  If the sparse superblocks
3698                  * feature is turned on, then not all groups have this.
3699                  */
3700                 for (i = 0; i < ngroups; i++) {
3701                         overhead += ext4_bg_has_super(sb, i) +
3702                                 ext4_bg_num_gdb(sb, i);
3703                         cond_resched();
3704                 }
3705 
3706                 /*
3707                  * Every block group has an inode bitmap, a block
3708                  * bitmap, and an inode table.
3709                  */
3710                 overhead += ngroups * (2 + sbi->s_itb_per_group);
3711                 sbi->s_overhead_last = overhead;
3712                 smp_wmb();
3713                 sbi->s_blocks_last = ext4_blocks_count(es);
3714         }
3715 
3716         buf->f_type = EXT4_SUPER_MAGIC;
3717         buf->f_bsize = sb->s_blocksize;
3718         buf->f_blocks = ext4_blocks_count(es) - sbi->s_overhead_last;
3719         buf->f_bfree = percpu_counter_sum_positive(&sbi->s_freeblocks_counter) -
3720                        percpu_counter_sum_positive(&sbi->s_dirtyblocks_counter);
3721         buf->f_bavail = buf->f_bfree - ext4_r_blocks_count(es);
3722         if (buf->f_bfree < ext4_r_blocks_count(es))
3723                 buf->f_bavail = 0;
3724         buf->f_files = le32_to_cpu(es->s_inodes_count);
3725         buf->f_ffree = percpu_counter_sum_positive(&sbi->s_freeinodes_counter);
3726         buf->f_namelen = EXT4_NAME_LEN;
3727         fsid = le64_to_cpup((void *)es->s_uuid) ^
3728                le64_to_cpup((void *)es->s_uuid + sizeof(u64));
3729         buf->f_fsid.val[0] = fsid & 0xFFFFFFFFUL;
3730         buf->f_fsid.val[1] = (fsid >> 32) & 0xFFFFFFFFUL;
3731 
3732         return 0;
3733 }
3734 
3735 /* Helper function for writing quotas on sync - we need to start transaction
3736  * before quota file is locked for write. Otherwise the are possible deadlocks:
3737  * Process 1                         Process 2
3738  * ext4_create()                     quota_sync()
3739  *   jbd2_journal_start()                  write_dquot()
3740  *   vfs_dq_init()                         down(dqio_mutex)
3741  *     down(dqio_mutex)                    jbd2_journal_start()
3742  *
3743  */
3744 
3745 #ifdef CONFIG_QUOTA
3746 
3747 static inline struct inode *dquot_to_inode(struct dquot *dquot)
3748 {
3749         return sb_dqopt(dquot->dq_sb)->files[dquot->dq_type];
3750 }
3751 
3752 static int ext4_write_dquot(struct dquot *dquot)
3753 {
3754         int ret, err;
3755         handle_t *handle;
3756         struct inode *inode;
3757 
3758         inode = dquot_to_inode(dquot);
3759         handle = ext4_journal_start(inode,
3760                                     EXT4_QUOTA_TRANS_BLOCKS(dquot->dq_sb));
3761         if (IS_ERR(handle))
3762                 return PTR_ERR(handle);
3763         ret = dquot_commit(dquot);
3764         err = ext4_journal_stop(handle);
3765         if (!ret)
3766                 ret = err;
3767         return ret;
3768 }
3769 
3770 static int ext4_acquire_dquot(struct dquot *dquot)
3771 {
3772         int ret, err;
3773         handle_t *handle;
3774 
3775         handle = ext4_journal_start(dquot_to_inode(dquot),
3776                                     EXT4_QUOTA_INIT_BLOCKS(dquot->dq_sb));
3777         if (IS_ERR(handle))
3778                 return PTR_ERR(handle);
3779         ret = dquot_acquire(dquot);
3780         err = ext4_journal_stop(handle);
3781         if (!ret)
3782                 ret = err;
3783         return ret;
3784 }
3785 
3786 static int ext4_release_dquot(struct dquot *dquot)
3787 {
3788         int ret, err;
3789         handle_t *handle;
3790 
3791         handle = ext4_journal_start(dquot_to_inode(dquot),
3792                                     EXT4_QUOTA_DEL_BLOCKS(dquot->dq_sb));
3793         if (IS_ERR(handle)) {
3794                 /* Release dquot anyway to avoid endless cycle in dqput() */
3795                 dquot_release(dquot);
3796                 return PTR_ERR(handle);
3797         }
3798         ret = dquot_release(dquot);
3799         err = ext4_journal_stop(handle);
3800         if (!ret)
3801                 ret = err;
3802         return ret;
3803 }
3804 
3805 static int ext4_mark_dquot_dirty(struct dquot *dquot)
3806 {
3807         /* Are we journaling quotas? */
3808         if (EXT4_SB(dquot->dq_sb)->s_qf_names[USRQUOTA] ||
3809             EXT4_SB(dquot->dq_sb)->s_qf_names[GRPQUOTA]) {
3810                 dquot_mark_dquot_dirty(dquot);
3811                 return ext4_write_dquot(dquot);
3812         } else {
3813                 return dquot_mark_dquot_dirty(dquot);
3814         }
3815 }
3816 
3817 static int ext4_write_info(struct super_block *sb, int type)
3818 {
3819         int ret, err;
3820         handle_t *handle;
3821 
3822         /* Data block + inode block */
3823         handle = ext4_journal_start(sb->s_root->d_inode, 2);
3824         if (IS_ERR(handle))
3825                 return PTR_ERR(handle);
3826         ret = dquot_commit_info(sb, type);
3827         err = ext4_journal_stop(handle);
3828         if (!ret)
3829                 ret = err;
3830         return ret;
3831 }
3832 
3833 /*
3834  * Turn on quotas during mount time - we need to find
3835  * the quota file and such...
3836  */
3837 static int ext4_quota_on_mount(struct super_block *sb, int type)
3838 {
3839         return vfs_quota_on_mount(sb, EXT4_SB(sb)->s_qf_names[type],
3840                                   EXT4_SB(sb)->s_jquota_fmt, type);
3841 }
3842 
3843 /*
3844  * Standard function to be called on quota_on
3845  */
3846 static int ext4_quota_on(struct super_block *sb, int type, int format_id,
3847                          char *name, int remount)
3848 {
3849         int err;
3850         struct path path;
3851 
3852         if (!test_opt(sb, QUOTA))
3853                 return -EINVAL;
3854         /* When remounting, no checks are needed and in fact, name is NULL */
3855         if (remount)
3856                 return vfs_quota_on(sb, type, format_id, name, remount);
3857 
3858         err = kern_path(name, LOOKUP_FOLLOW, &path);
3859         if (err)
3860                 return err;
3861 
3862         /* Quotafile not on the same filesystem? */
3863         if (path.mnt->mnt_sb != sb) {
3864                 path_put(&path);
3865                 return -EXDEV;
3866         }
3867         /* Journaling quota? */
3868         if (EXT4_SB(sb)->s_qf_names[type]) {
3869                 /* Quotafile not in fs root? */
3870                 if (path.dentry->d_parent != sb->s_root)
3871                         ext4_msg(sb, KERN_WARNING,
3872                                 "Quota file not on filesystem root. "
3873                                 "Journaled quota will not work");
3874         }
3875 
3876         /*
3877          * When we journal data on quota file, we have to flush journal to see
3878          * all updates to the file when we bypass pagecache...
3879          */
3880         if (EXT4_SB(sb)->s_journal &&
3881             ext4_should_journal_data(path.dentry->d_inode)) {
3882                 /*
3883                  * We don't need to lock updates but journal_flush() could
3884                  * otherwise be livelocked...
3885                  */
3886                 jbd2_journal_lock_updates(EXT4_SB(sb)->s_journal);
3887                 err = jbd2_journal_flush(EXT4_SB(sb)->s_journal);
3888                 jbd2_journal_unlock_updates(EXT4_SB(sb)->s_journal);
3889                 if (err) {
3890                         path_put(&path);
3891                         return err;
3892                 }
3893         }
3894 
3895         err = vfs_quota_on_path(sb, type, format_id, &path);
3896         path_put(&path);
3897         return err;
3898 }
3899 
3900 /* Read data from quotafile - avoid pagecache and such because we cannot afford
3901  * acquiring the locks... As quota files are never truncated and quota code
3902  * itself serializes the operations (and noone else should touch the files)
3903  * we don't have to be afraid of races */
3904 static ssize_t ext4_quota_read(struct super_block *sb, int type, char *data,
3905                                size_t len, loff_t off)
3906 {
3907         struct inode *inode = sb_dqopt(sb)->files[type];
3908         ext4_lblk_t blk = off >> EXT4_BLOCK_SIZE_BITS(sb);
3909         int err = 0;
3910         int offset = off & (sb->s_blocksize - 1);
3911         int tocopy;
3912         size_t toread;
3913         struct buffer_head *bh;
3914         loff_t i_size = i_size_read(inode);
3915 
3916         if (off > i_size)
3917                 return 0;
3918         if (off+len > i_size)
3919                 len = i_size-off;
3920         toread = len;
3921         while (toread > 0) {
3922                 tocopy = sb->s_blocksize - offset < toread ?
3923                                 sb->s_blocksize - offset : toread;
3924                 bh = ext4_bread(NULL, inode, blk, 0, &err);
3925                 if (err)
3926                         return err;
3927                 if (!bh)        /* A hole? */
3928                         memset(data, 0, tocopy);
3929                 else
3930                         memcpy(data, bh->b_data+offset, tocopy);
3931                 brelse(bh);
3932                 offset = 0;
3933                 toread -= tocopy;
3934                 data += tocopy;
3935                 blk++;
3936         }
3937         return len;
3938 }
3939 
3940 /* Write to quotafile (we know the transaction is already started and has
3941  * enough credits) */
3942 static ssize_t ext4_quota_write(struct super_block *sb, int type,
3943                                 const char *data, size_t len, loff_t off)
3944 {
3945         struct inode *inode = sb_dqopt(sb)->files[type];
3946         ext4_lblk_t blk = off >> EXT4_BLOCK_SIZE_BITS(sb);
3947         int err = 0;
3948         int offset = off & (sb->s_blocksize - 1);
3949         int tocopy;
3950         int journal_quota = EXT4_SB(sb)->s_qf_names[type] != NULL;
3951         size_t towrite = len;
3952         struct buffer_head *bh;
3953         handle_t *handle = journal_current_handle();
3954 
3955         if (EXT4_SB(sb)->s_journal && !handle) {
3956                 ext4_msg(sb, KERN_WARNING, "Quota write (off=%llu, len=%llu)"
3957                         " cancelled because transaction is not started",
3958                         (unsigned long long)off, (unsigned long long)len);
3959                 return -EIO;
3960         }
3961         mutex_lock_nested(&inode->i_mutex, I_MUTEX_QUOTA);
3962         while (towrite > 0) {
3963                 tocopy = sb->s_blocksize - offset < towrite ?
3964                                 sb->s_blocksize - offset : towrite;
3965                 bh = ext4_bread(handle, inode, blk, 1, &err);
3966                 if (!bh)
3967                         goto out;
3968                 if (journal_quota) {
3969                         err = ext4_journal_get_write_access(handle, bh);
3970                         if (err) {
3971                                 brelse(bh);
3972                                 goto out;
3973                         }
3974                 }
3975                 lock_buffer(bh);
3976                 memcpy(bh->b_data+offset, data, tocopy);
3977                 flush_dcache_page(bh->b_page);
3978                 unlock_buffer(bh);
3979                 if (journal_quota)
3980                         err = ext4_handle_dirty_metadata(handle, NULL, bh);
3981                 else {
3982                         /* Always do at least ordered writes for quotas */
3983                         err = ext4_jbd2_file_inode(handle, inode);
3984                         mark_buffer_dirty(bh);
3985                 }
3986                 brelse(bh);
3987                 if (err)
3988                         goto out;
3989                 offset = 0;
3990                 towrite -= tocopy;
3991                 data += tocopy;
3992                 blk++;
3993         }
3994 out:
3995         if (len == towrite) {
3996                 mutex_unlock(&inode->i_mutex);
3997                 return err;
3998         }
3999         if (inode->i_size < off+len-towrite) {
4000                 i_size_write(inode, off+len-towrite);
4001                 EXT4_I(inode)->i_disksize = inode->i_size;
4002         }
4003         inode->i_mtime = inode->i_ctime = CURRENT_TIME;
4004         ext4_mark_inode_dirty(handle, inode);
4005         mutex_unlock(&inode->i_mutex);
4006         return len - towrite;
4007 }
4008 
4009 #endif
4010 
4011 static int ext4_get_sb(struct file_system_type *fs_type, int flags,
4012                        const char *dev_name, void *data, struct vfsmount *mnt)
4013 {
4014         return get_sb_bdev(fs_type, flags, dev_name, data, ext4_fill_super,mnt);
4015 }
4016 
4017 static struct file_system_type ext4_fs_type = {
4018         .owner          = THIS_MODULE,
4019         .name           = "ext4",
4020         .get_sb         = ext4_get_sb,
4021         .kill_sb        = kill_block_super,
4022         .fs_flags       = FS_REQUIRES_DEV,
4023 };
4024 
4025 #ifdef CONFIG_EXT4DEV_COMPAT
4026 static int ext4dev_get_sb(struct file_system_type *fs_type, int flags,
4027                           const char *dev_name, void *data,struct vfsmount *mnt)
4028 {
4029         printk(KERN_WARNING "EXT4-fs (%s): Update your userspace programs "
4030                "to mount using ext4\n", dev_name);
4031         printk(KERN_WARNING "EXT4-fs (%s): ext4dev backwards compatibility "
4032                "will go away by 2.6.31\n", dev_name);
4033         return get_sb_bdev(fs_type, flags, dev_name, data, ext4_fill_super,mnt);
4034 }
4035 
4036 static struct file_system_type ext4dev_fs_type = {
4037         .owner          = THIS_MODULE,
4038         .name           = "ext4dev",
4039         .get_sb         = ext4dev_get_sb,
4040         .kill_sb        = kill_block_super,
4041         .fs_flags       = FS_REQUIRES_DEV,
4042 };
4043 MODULE_ALIAS("ext4dev");
4044 #endif
4045 
4046 static int __init init_ext4_fs(void)
4047 {
4048         int err;
4049 
4050         err = init_ext4_system_zone();
4051         if (err)
4052                 return err;
4053         ext4_kset = kset_create_and_add("ext4", NULL, fs_kobj);
4054         if (!ext4_kset)
4055                 goto out4;
4056         ext4_proc_root = proc_mkdir("fs/ext4", NULL);
4057         err = init_ext4_mballoc();
4058         if (err)
4059                 goto out3;
4060 
4061         err = init_ext4_xattr();
4062         if (err)
4063                 goto out2;
4064         err = init_inodecache();
4065         if (err)
4066                 goto out1;
4067         err = register_filesystem(&ext4_fs_type);
4068         if (err)
4069                 goto out;
4070 #ifdef CONFIG_EXT4DEV_COMPAT
4071         err = register_filesystem(&ext4dev_fs_type);
4072         if (err) {
4073                 unregister_filesystem(&ext4_fs_type);
4074                 goto out;
4075         }
4076 #endif
4077         return 0;
4078 out:
4079         destroy_inodecache();
4080 out1:
4081         exit_ext4_xattr();
4082 out2:
4083         exit_ext4_mballoc();
4084 out3:
4085         remove_proc_entry("fs/ext4", NULL);
4086         kset_unregister(ext4_kset);
4087 out4:
4088         exit_ext4_system_zone();
4089         return err;
4090 }
4091 
4092 static void __exit exit_ext4_fs(void)
4093 {
4094         unregister_filesystem(&ext4_fs_type);
4095 #ifdef CONFIG_EXT4DEV_COMPAT
4096         unregister_filesystem(&ext4dev_fs_type);
4097 #endif
4098         destroy_inodecache();
4099         exit_ext4_xattr();
4100         exit_ext4_mballoc();
4101         remove_proc_entry("fs/ext4", NULL);
4102         kset_unregister(ext4_kset);
4103         exit_ext4_system_zone();
4104 }
4105 
4106 MODULE_AUTHOR("Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore Ts'o and others");
4107 MODULE_DESCRIPTION("Fourth Extended Filesystem");
4108 MODULE_LICENSE("GPL");
4109 module_init(init_ext4_fs)
4110 module_exit(exit_ext4_fs)
4111 
  This page was automatically generated by the LXR engine.