d6df62fc810c886de1dcfbe375d6b57a4a576ae2
[linux-2.6-microblaze.git] / fs / ext4 / super.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  *  linux/fs/ext4/super.c
4  *
5  * Copyright (C) 1992, 1993, 1994, 1995
6  * Remy Card (card@masi.ibp.fr)
7  * Laboratoire MASI - Institut Blaise Pascal
8  * Universite Pierre et Marie Curie (Paris VI)
9  *
10  *  from
11  *
12  *  linux/fs/minix/inode.c
13  *
14  *  Copyright (C) 1991, 1992  Linus Torvalds
15  *
16  *  Big-endian to little-endian byte-swapping/bitmaps by
17  *        David S. Miller (davem@caip.rutgers.edu), 1995
18  */
19
20 #include <linux/module.h>
21 #include <linux/string.h>
22 #include <linux/fs.h>
23 #include <linux/time.h>
24 #include <linux/vmalloc.h>
25 #include <linux/slab.h>
26 #include <linux/init.h>
27 #include <linux/blkdev.h>
28 #include <linux/backing-dev.h>
29 #include <linux/parser.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/ctype.h>
39 #include <linux/log2.h>
40 #include <linux/crc16.h>
41 #include <linux/dax.h>
42 #include <linux/cleancache.h>
43 #include <linux/uaccess.h>
44 #include <linux/iversion.h>
45 #include <linux/unicode.h>
46 #include <linux/part_stat.h>
47 #include <linux/kthread.h>
48 #include <linux/freezer.h>
49
50 #include "ext4.h"
51 #include "ext4_extents.h"       /* Needed for trace points definition */
52 #include "ext4_jbd2.h"
53 #include "xattr.h"
54 #include "acl.h"
55 #include "mballoc.h"
56 #include "fsmap.h"
57
58 #define CREATE_TRACE_POINTS
59 #include <trace/events/ext4.h>
60
61 static struct ext4_lazy_init *ext4_li_info;
62 static DEFINE_MUTEX(ext4_li_mtx);
63 static struct ratelimit_state ext4_mount_msg_ratelimit;
64
65 static int ext4_load_journal(struct super_block *, struct ext4_super_block *,
66                              unsigned long journal_devnum);
67 static int ext4_show_options(struct seq_file *seq, struct dentry *root);
68 static void ext4_update_super(struct super_block *sb);
69 static int ext4_commit_super(struct super_block *sb);
70 static int ext4_mark_recovery_complete(struct super_block *sb,
71                                         struct ext4_super_block *es);
72 static int ext4_clear_journal_err(struct super_block *sb,
73                                   struct ext4_super_block *es);
74 static int ext4_sync_fs(struct super_block *sb, int wait);
75 static int ext4_remount(struct super_block *sb, int *flags, char *data);
76 static int ext4_statfs(struct dentry *dentry, struct kstatfs *buf);
77 static int ext4_unfreeze(struct super_block *sb);
78 static int ext4_freeze(struct super_block *sb);
79 static struct dentry *ext4_mount(struct file_system_type *fs_type, int flags,
80                        const char *dev_name, void *data);
81 static inline int ext2_feature_set_ok(struct super_block *sb);
82 static inline int ext3_feature_set_ok(struct super_block *sb);
83 static int ext4_feature_set_ok(struct super_block *sb, int readonly);
84 static void ext4_destroy_lazyinit_thread(void);
85 static void ext4_unregister_li_request(struct super_block *sb);
86 static void ext4_clear_request_list(void);
87 static struct inode *ext4_get_journal_inode(struct super_block *sb,
88                                             unsigned int journal_inum);
89
90 /*
91  * Lock ordering
92  *
93  * page fault path:
94  * mmap_lock -> sb_start_pagefault -> invalidate_lock (r) -> transaction start
95  *   -> page lock -> i_data_sem (rw)
96  *
97  * buffered write path:
98  * sb_start_write -> i_mutex -> mmap_lock
99  * sb_start_write -> i_mutex -> transaction start -> page lock ->
100  *   i_data_sem (rw)
101  *
102  * truncate:
103  * sb_start_write -> i_mutex -> invalidate_lock (w) -> i_mmap_rwsem (w) ->
104  *   page lock
105  * sb_start_write -> i_mutex -> invalidate_lock (w) -> transaction start ->
106  *   i_data_sem (rw)
107  *
108  * direct IO:
109  * sb_start_write -> i_mutex -> mmap_lock
110  * sb_start_write -> i_mutex -> transaction start -> i_data_sem (rw)
111  *
112  * writepages:
113  * transaction start -> page lock(s) -> i_data_sem (rw)
114  */
115
116 #if !defined(CONFIG_EXT2_FS) && !defined(CONFIG_EXT2_FS_MODULE) && defined(CONFIG_EXT4_USE_FOR_EXT2)
117 static struct file_system_type ext2_fs_type = {
118         .owner          = THIS_MODULE,
119         .name           = "ext2",
120         .mount          = ext4_mount,
121         .kill_sb        = kill_block_super,
122         .fs_flags       = FS_REQUIRES_DEV,
123 };
124 MODULE_ALIAS_FS("ext2");
125 MODULE_ALIAS("ext2");
126 #define IS_EXT2_SB(sb) ((sb)->s_bdev->bd_holder == &ext2_fs_type)
127 #else
128 #define IS_EXT2_SB(sb) (0)
129 #endif
130
131
132 static struct file_system_type ext3_fs_type = {
133         .owner          = THIS_MODULE,
134         .name           = "ext3",
135         .mount          = ext4_mount,
136         .kill_sb        = kill_block_super,
137         .fs_flags       = FS_REQUIRES_DEV,
138 };
139 MODULE_ALIAS_FS("ext3");
140 MODULE_ALIAS("ext3");
141 #define IS_EXT3_SB(sb) ((sb)->s_bdev->bd_holder == &ext3_fs_type)
142
143
144 static inline void __ext4_read_bh(struct buffer_head *bh, int op_flags,
145                                   bh_end_io_t *end_io)
146 {
147         /*
148          * buffer's verified bit is no longer valid after reading from
149          * disk again due to write out error, clear it to make sure we
150          * recheck the buffer contents.
151          */
152         clear_buffer_verified(bh);
153
154         bh->b_end_io = end_io ? end_io : end_buffer_read_sync;
155         get_bh(bh);
156         submit_bh(REQ_OP_READ, op_flags, bh);
157 }
158
159 void ext4_read_bh_nowait(struct buffer_head *bh, int op_flags,
160                          bh_end_io_t *end_io)
161 {
162         BUG_ON(!buffer_locked(bh));
163
164         if (ext4_buffer_uptodate(bh)) {
165                 unlock_buffer(bh);
166                 return;
167         }
168         __ext4_read_bh(bh, op_flags, end_io);
169 }
170
171 int ext4_read_bh(struct buffer_head *bh, int op_flags, bh_end_io_t *end_io)
172 {
173         BUG_ON(!buffer_locked(bh));
174
175         if (ext4_buffer_uptodate(bh)) {
176                 unlock_buffer(bh);
177                 return 0;
178         }
179
180         __ext4_read_bh(bh, op_flags, end_io);
181
182         wait_on_buffer(bh);
183         if (buffer_uptodate(bh))
184                 return 0;
185         return -EIO;
186 }
187
188 int ext4_read_bh_lock(struct buffer_head *bh, int op_flags, bool wait)
189 {
190         if (trylock_buffer(bh)) {
191                 if (wait)
192                         return ext4_read_bh(bh, op_flags, NULL);
193                 ext4_read_bh_nowait(bh, op_flags, NULL);
194                 return 0;
195         }
196         if (wait) {
197                 wait_on_buffer(bh);
198                 if (buffer_uptodate(bh))
199                         return 0;
200                 return -EIO;
201         }
202         return 0;
203 }
204
205 /*
206  * This works like __bread_gfp() except it uses ERR_PTR for error
207  * returns.  Currently with sb_bread it's impossible to distinguish
208  * between ENOMEM and EIO situations (since both result in a NULL
209  * return.
210  */
211 static struct buffer_head *__ext4_sb_bread_gfp(struct super_block *sb,
212                                                sector_t block, int op_flags,
213                                                gfp_t gfp)
214 {
215         struct buffer_head *bh;
216         int ret;
217
218         bh = sb_getblk_gfp(sb, block, gfp);
219         if (bh == NULL)
220                 return ERR_PTR(-ENOMEM);
221         if (ext4_buffer_uptodate(bh))
222                 return bh;
223
224         ret = ext4_read_bh_lock(bh, REQ_META | op_flags, true);
225         if (ret) {
226                 put_bh(bh);
227                 return ERR_PTR(ret);
228         }
229         return bh;
230 }
231
232 struct buffer_head *ext4_sb_bread(struct super_block *sb, sector_t block,
233                                    int op_flags)
234 {
235         return __ext4_sb_bread_gfp(sb, block, op_flags, __GFP_MOVABLE);
236 }
237
238 struct buffer_head *ext4_sb_bread_unmovable(struct super_block *sb,
239                                             sector_t block)
240 {
241         return __ext4_sb_bread_gfp(sb, block, 0, 0);
242 }
243
244 void ext4_sb_breadahead_unmovable(struct super_block *sb, sector_t block)
245 {
246         struct buffer_head *bh = sb_getblk_gfp(sb, block, 0);
247
248         if (likely(bh)) {
249                 ext4_read_bh_lock(bh, REQ_RAHEAD, false);
250                 brelse(bh);
251         }
252 }
253
254 static int ext4_verify_csum_type(struct super_block *sb,
255                                  struct ext4_super_block *es)
256 {
257         if (!ext4_has_feature_metadata_csum(sb))
258                 return 1;
259
260         return es->s_checksum_type == EXT4_CRC32C_CHKSUM;
261 }
262
263 static __le32 ext4_superblock_csum(struct super_block *sb,
264                                    struct ext4_super_block *es)
265 {
266         struct ext4_sb_info *sbi = EXT4_SB(sb);
267         int offset = offsetof(struct ext4_super_block, s_checksum);
268         __u32 csum;
269
270         csum = ext4_chksum(sbi, ~0, (char *)es, offset);
271
272         return cpu_to_le32(csum);
273 }
274
275 static int ext4_superblock_csum_verify(struct super_block *sb,
276                                        struct ext4_super_block *es)
277 {
278         if (!ext4_has_metadata_csum(sb))
279                 return 1;
280
281         return es->s_checksum == ext4_superblock_csum(sb, es);
282 }
283
284 void ext4_superblock_csum_set(struct super_block *sb)
285 {
286         struct ext4_super_block *es = EXT4_SB(sb)->s_es;
287
288         if (!ext4_has_metadata_csum(sb))
289                 return;
290
291         es->s_checksum = ext4_superblock_csum(sb, es);
292 }
293
294 ext4_fsblk_t ext4_block_bitmap(struct super_block *sb,
295                                struct ext4_group_desc *bg)
296 {
297         return le32_to_cpu(bg->bg_block_bitmap_lo) |
298                 (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ?
299                  (ext4_fsblk_t)le32_to_cpu(bg->bg_block_bitmap_hi) << 32 : 0);
300 }
301
302 ext4_fsblk_t ext4_inode_bitmap(struct super_block *sb,
303                                struct ext4_group_desc *bg)
304 {
305         return le32_to_cpu(bg->bg_inode_bitmap_lo) |
306                 (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ?
307                  (ext4_fsblk_t)le32_to_cpu(bg->bg_inode_bitmap_hi) << 32 : 0);
308 }
309
310 ext4_fsblk_t ext4_inode_table(struct super_block *sb,
311                               struct ext4_group_desc *bg)
312 {
313         return le32_to_cpu(bg->bg_inode_table_lo) |
314                 (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ?
315                  (ext4_fsblk_t)le32_to_cpu(bg->bg_inode_table_hi) << 32 : 0);
316 }
317
318 __u32 ext4_free_group_clusters(struct super_block *sb,
319                                struct ext4_group_desc *bg)
320 {
321         return le16_to_cpu(bg->bg_free_blocks_count_lo) |
322                 (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ?
323                  (__u32)le16_to_cpu(bg->bg_free_blocks_count_hi) << 16 : 0);
324 }
325
326 __u32 ext4_free_inodes_count(struct super_block *sb,
327                               struct ext4_group_desc *bg)
328 {
329         return le16_to_cpu(bg->bg_free_inodes_count_lo) |
330                 (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ?
331                  (__u32)le16_to_cpu(bg->bg_free_inodes_count_hi) << 16 : 0);
332 }
333
334 __u32 ext4_used_dirs_count(struct super_block *sb,
335                               struct ext4_group_desc *bg)
336 {
337         return le16_to_cpu(bg->bg_used_dirs_count_lo) |
338                 (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ?
339                  (__u32)le16_to_cpu(bg->bg_used_dirs_count_hi) << 16 : 0);
340 }
341
342 __u32 ext4_itable_unused_count(struct super_block *sb,
343                               struct ext4_group_desc *bg)
344 {
345         return le16_to_cpu(bg->bg_itable_unused_lo) |
346                 (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT ?
347                  (__u32)le16_to_cpu(bg->bg_itable_unused_hi) << 16 : 0);
348 }
349
350 void ext4_block_bitmap_set(struct super_block *sb,
351                            struct ext4_group_desc *bg, ext4_fsblk_t blk)
352 {
353         bg->bg_block_bitmap_lo = cpu_to_le32((u32)blk);
354         if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT)
355                 bg->bg_block_bitmap_hi = cpu_to_le32(blk >> 32);
356 }
357
358 void ext4_inode_bitmap_set(struct super_block *sb,
359                            struct ext4_group_desc *bg, ext4_fsblk_t blk)
360 {
361         bg->bg_inode_bitmap_lo  = cpu_to_le32((u32)blk);
362         if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT)
363                 bg->bg_inode_bitmap_hi = cpu_to_le32(blk >> 32);
364 }
365
366 void ext4_inode_table_set(struct super_block *sb,
367                           struct ext4_group_desc *bg, ext4_fsblk_t blk)
368 {
369         bg->bg_inode_table_lo = cpu_to_le32((u32)blk);
370         if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT)
371                 bg->bg_inode_table_hi = cpu_to_le32(blk >> 32);
372 }
373
374 void ext4_free_group_clusters_set(struct super_block *sb,
375                                   struct ext4_group_desc *bg, __u32 count)
376 {
377         bg->bg_free_blocks_count_lo = cpu_to_le16((__u16)count);
378         if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT)
379                 bg->bg_free_blocks_count_hi = cpu_to_le16(count >> 16);
380 }
381
382 void ext4_free_inodes_set(struct super_block *sb,
383                           struct ext4_group_desc *bg, __u32 count)
384 {
385         bg->bg_free_inodes_count_lo = cpu_to_le16((__u16)count);
386         if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT)
387                 bg->bg_free_inodes_count_hi = cpu_to_le16(count >> 16);
388 }
389
390 void ext4_used_dirs_set(struct super_block *sb,
391                           struct ext4_group_desc *bg, __u32 count)
392 {
393         bg->bg_used_dirs_count_lo = cpu_to_le16((__u16)count);
394         if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT)
395                 bg->bg_used_dirs_count_hi = cpu_to_le16(count >> 16);
396 }
397
398 void ext4_itable_unused_set(struct super_block *sb,
399                           struct ext4_group_desc *bg, __u32 count)
400 {
401         bg->bg_itable_unused_lo = cpu_to_le16((__u16)count);
402         if (EXT4_DESC_SIZE(sb) >= EXT4_MIN_DESC_SIZE_64BIT)
403                 bg->bg_itable_unused_hi = cpu_to_le16(count >> 16);
404 }
405
406 static void __ext4_update_tstamp(__le32 *lo, __u8 *hi, time64_t now)
407 {
408         now = clamp_val(now, 0, (1ull << 40) - 1);
409
410         *lo = cpu_to_le32(lower_32_bits(now));
411         *hi = upper_32_bits(now);
412 }
413
414 static time64_t __ext4_get_tstamp(__le32 *lo, __u8 *hi)
415 {
416         return ((time64_t)(*hi) << 32) + le32_to_cpu(*lo);
417 }
418 #define ext4_update_tstamp(es, tstamp) \
419         __ext4_update_tstamp(&(es)->tstamp, &(es)->tstamp ## _hi, \
420                              ktime_get_real_seconds())
421 #define ext4_get_tstamp(es, tstamp) \
422         __ext4_get_tstamp(&(es)->tstamp, &(es)->tstamp ## _hi)
423
424 /*
425  * The del_gendisk() function uninitializes the disk-specific data
426  * structures, including the bdi structure, without telling anyone
427  * else.  Once this happens, any attempt to call mark_buffer_dirty()
428  * (for example, by ext4_commit_super), will cause a kernel OOPS.
429  * This is a kludge to prevent these oops until we can put in a proper
430  * hook in del_gendisk() to inform the VFS and file system layers.
431  */
432 static int block_device_ejected(struct super_block *sb)
433 {
434         struct inode *bd_inode = sb->s_bdev->bd_inode;
435         struct backing_dev_info *bdi = inode_to_bdi(bd_inode);
436
437         return bdi->dev == NULL;
438 }
439
440 static void ext4_journal_commit_callback(journal_t *journal, transaction_t *txn)
441 {
442         struct super_block              *sb = journal->j_private;
443         struct ext4_sb_info             *sbi = EXT4_SB(sb);
444         int                             error = is_journal_aborted(journal);
445         struct ext4_journal_cb_entry    *jce;
446
447         BUG_ON(txn->t_state == T_FINISHED);
448
449         ext4_process_freed_data(sb, txn->t_tid);
450
451         spin_lock(&sbi->s_md_lock);
452         while (!list_empty(&txn->t_private_list)) {
453                 jce = list_entry(txn->t_private_list.next,
454                                  struct ext4_journal_cb_entry, jce_list);
455                 list_del_init(&jce->jce_list);
456                 spin_unlock(&sbi->s_md_lock);
457                 jce->jce_func(sb, jce, error);
458                 spin_lock(&sbi->s_md_lock);
459         }
460         spin_unlock(&sbi->s_md_lock);
461 }
462
463 /*
464  * This writepage callback for write_cache_pages()
465  * takes care of a few cases after page cleaning.
466  *
467  * write_cache_pages() already checks for dirty pages
468  * and calls clear_page_dirty_for_io(), which we want,
469  * to write protect the pages.
470  *
471  * However, we may have to redirty a page (see below.)
472  */
473 static int ext4_journalled_writepage_callback(struct page *page,
474                                               struct writeback_control *wbc,
475                                               void *data)
476 {
477         transaction_t *transaction = (transaction_t *) data;
478         struct buffer_head *bh, *head;
479         struct journal_head *jh;
480
481         bh = head = page_buffers(page);
482         do {
483                 /*
484                  * We have to redirty a page in these cases:
485                  * 1) If buffer is dirty, it means the page was dirty because it
486                  * contains a buffer that needs checkpointing. So the dirty bit
487                  * needs to be preserved so that checkpointing writes the buffer
488                  * properly.
489                  * 2) If buffer is not part of the committing transaction
490                  * (we may have just accidentally come across this buffer because
491                  * inode range tracking is not exact) or if the currently running
492                  * transaction already contains this buffer as well, dirty bit
493                  * needs to be preserved so that the buffer gets writeprotected
494                  * properly on running transaction's commit.
495                  */
496                 jh = bh2jh(bh);
497                 if (buffer_dirty(bh) ||
498                     (jh && (jh->b_transaction != transaction ||
499                             jh->b_next_transaction))) {
500                         redirty_page_for_writepage(wbc, page);
501                         goto out;
502                 }
503         } while ((bh = bh->b_this_page) != head);
504
505 out:
506         return AOP_WRITEPAGE_ACTIVATE;
507 }
508
509 static int ext4_journalled_submit_inode_data_buffers(struct jbd2_inode *jinode)
510 {
511         struct address_space *mapping = jinode->i_vfs_inode->i_mapping;
512         struct writeback_control wbc = {
513                 .sync_mode =  WB_SYNC_ALL,
514                 .nr_to_write = LONG_MAX,
515                 .range_start = jinode->i_dirty_start,
516                 .range_end = jinode->i_dirty_end,
517         };
518
519         return write_cache_pages(mapping, &wbc,
520                                  ext4_journalled_writepage_callback,
521                                  jinode->i_transaction);
522 }
523
524 static int ext4_journal_submit_inode_data_buffers(struct jbd2_inode *jinode)
525 {
526         int ret;
527
528         if (ext4_should_journal_data(jinode->i_vfs_inode))
529                 ret = ext4_journalled_submit_inode_data_buffers(jinode);
530         else
531                 ret = jbd2_journal_submit_inode_data_buffers(jinode);
532
533         return ret;
534 }
535
536 static int ext4_journal_finish_inode_data_buffers(struct jbd2_inode *jinode)
537 {
538         int ret = 0;
539
540         if (!ext4_should_journal_data(jinode->i_vfs_inode))
541                 ret = jbd2_journal_finish_inode_data_buffers(jinode);
542
543         return ret;
544 }
545
546 static bool system_going_down(void)
547 {
548         return system_state == SYSTEM_HALT || system_state == SYSTEM_POWER_OFF
549                 || system_state == SYSTEM_RESTART;
550 }
551
552 struct ext4_err_translation {
553         int code;
554         int errno;
555 };
556
557 #define EXT4_ERR_TRANSLATE(err) { .code = EXT4_ERR_##err, .errno = err }
558
559 static struct ext4_err_translation err_translation[] = {
560         EXT4_ERR_TRANSLATE(EIO),
561         EXT4_ERR_TRANSLATE(ENOMEM),
562         EXT4_ERR_TRANSLATE(EFSBADCRC),
563         EXT4_ERR_TRANSLATE(EFSCORRUPTED),
564         EXT4_ERR_TRANSLATE(ENOSPC),
565         EXT4_ERR_TRANSLATE(ENOKEY),
566         EXT4_ERR_TRANSLATE(EROFS),
567         EXT4_ERR_TRANSLATE(EFBIG),
568         EXT4_ERR_TRANSLATE(EEXIST),
569         EXT4_ERR_TRANSLATE(ERANGE),
570         EXT4_ERR_TRANSLATE(EOVERFLOW),
571         EXT4_ERR_TRANSLATE(EBUSY),
572         EXT4_ERR_TRANSLATE(ENOTDIR),
573         EXT4_ERR_TRANSLATE(ENOTEMPTY),
574         EXT4_ERR_TRANSLATE(ESHUTDOWN),
575         EXT4_ERR_TRANSLATE(EFAULT),
576 };
577
578 static int ext4_errno_to_code(int errno)
579 {
580         int i;
581
582         for (i = 0; i < ARRAY_SIZE(err_translation); i++)
583                 if (err_translation[i].errno == errno)
584                         return err_translation[i].code;
585         return EXT4_ERR_UNKNOWN;
586 }
587
588 static void save_error_info(struct super_block *sb, int error,
589                             __u32 ino, __u64 block,
590                             const char *func, unsigned int line)
591 {
592         struct ext4_sb_info *sbi = EXT4_SB(sb);
593
594         /* We default to EFSCORRUPTED error... */
595         if (error == 0)
596                 error = EFSCORRUPTED;
597
598         spin_lock(&sbi->s_error_lock);
599         sbi->s_add_error_count++;
600         sbi->s_last_error_code = error;
601         sbi->s_last_error_line = line;
602         sbi->s_last_error_ino = ino;
603         sbi->s_last_error_block = block;
604         sbi->s_last_error_func = func;
605         sbi->s_last_error_time = ktime_get_real_seconds();
606         if (!sbi->s_first_error_time) {
607                 sbi->s_first_error_code = error;
608                 sbi->s_first_error_line = line;
609                 sbi->s_first_error_ino = ino;
610                 sbi->s_first_error_block = block;
611                 sbi->s_first_error_func = func;
612                 sbi->s_first_error_time = sbi->s_last_error_time;
613         }
614         spin_unlock(&sbi->s_error_lock);
615 }
616
617 /* Deal with the reporting of failure conditions on a filesystem such as
618  * inconsistencies detected or read IO failures.
619  *
620  * On ext2, we can store the error state of the filesystem in the
621  * superblock.  That is not possible on ext4, because we may have other
622  * write ordering constraints on the superblock which prevent us from
623  * writing it out straight away; and given that the journal is about to
624  * be aborted, we can't rely on the current, or future, transactions to
625  * write out the superblock safely.
626  *
627  * We'll just use the jbd2_journal_abort() error code to record an error in
628  * the journal instead.  On recovery, the journal will complain about
629  * that error until we've noted it down and cleared it.
630  *
631  * If force_ro is set, we unconditionally force the filesystem into an
632  * ABORT|READONLY state, unless the error response on the fs has been set to
633  * panic in which case we take the easy way out and panic immediately. This is
634  * used to deal with unrecoverable failures such as journal IO errors or ENOMEM
635  * at a critical moment in log management.
636  */
637 static void ext4_handle_error(struct super_block *sb, bool force_ro, int error,
638                               __u32 ino, __u64 block,
639                               const char *func, unsigned int line)
640 {
641         journal_t *journal = EXT4_SB(sb)->s_journal;
642         bool continue_fs = !force_ro && test_opt(sb, ERRORS_CONT);
643
644         EXT4_SB(sb)->s_mount_state |= EXT4_ERROR_FS;
645         if (test_opt(sb, WARN_ON_ERROR))
646                 WARN_ON_ONCE(1);
647
648         if (!continue_fs && !sb_rdonly(sb)) {
649                 ext4_set_mount_flag(sb, EXT4_MF_FS_ABORTED);
650                 if (journal)
651                         jbd2_journal_abort(journal, -EIO);
652         }
653
654         if (!bdev_read_only(sb->s_bdev)) {
655                 save_error_info(sb, error, ino, block, func, line);
656                 /*
657                  * In case the fs should keep running, we need to writeout
658                  * superblock through the journal. Due to lock ordering
659                  * constraints, it may not be safe to do it right here so we
660                  * defer superblock flushing to a workqueue.
661                  */
662                 if (continue_fs)
663                         schedule_work(&EXT4_SB(sb)->s_error_work);
664                 else
665                         ext4_commit_super(sb);
666         }
667
668         /*
669          * We force ERRORS_RO behavior when system is rebooting. Otherwise we
670          * could panic during 'reboot -f' as the underlying device got already
671          * disabled.
672          */
673         if (test_opt(sb, ERRORS_PANIC) && !system_going_down()) {
674                 panic("EXT4-fs (device %s): panic forced after error\n",
675                         sb->s_id);
676         }
677
678         if (sb_rdonly(sb) || continue_fs)
679                 return;
680
681         ext4_msg(sb, KERN_CRIT, "Remounting filesystem read-only");
682         /*
683          * Make sure updated value of ->s_mount_flags will be visible before
684          * ->s_flags update
685          */
686         smp_wmb();
687         sb->s_flags |= SB_RDONLY;
688 }
689
690 static void flush_stashed_error_work(struct work_struct *work)
691 {
692         struct ext4_sb_info *sbi = container_of(work, struct ext4_sb_info,
693                                                 s_error_work);
694         journal_t *journal = sbi->s_journal;
695         handle_t *handle;
696
697         /*
698          * If the journal is still running, we have to write out superblock
699          * through the journal to avoid collisions of other journalled sb
700          * updates.
701          *
702          * We use directly jbd2 functions here to avoid recursing back into
703          * ext4 error handling code during handling of previous errors.
704          */
705         if (!sb_rdonly(sbi->s_sb) && journal) {
706                 struct buffer_head *sbh = sbi->s_sbh;
707                 handle = jbd2_journal_start(journal, 1);
708                 if (IS_ERR(handle))
709                         goto write_directly;
710                 if (jbd2_journal_get_write_access(handle, sbh)) {
711                         jbd2_journal_stop(handle);
712                         goto write_directly;
713                 }
714                 ext4_update_super(sbi->s_sb);
715                 if (buffer_write_io_error(sbh) || !buffer_uptodate(sbh)) {
716                         ext4_msg(sbi->s_sb, KERN_ERR, "previous I/O error to "
717                                  "superblock detected");
718                         clear_buffer_write_io_error(sbh);
719                         set_buffer_uptodate(sbh);
720                 }
721
722                 if (jbd2_journal_dirty_metadata(handle, sbh)) {
723                         jbd2_journal_stop(handle);
724                         goto write_directly;
725                 }
726                 jbd2_journal_stop(handle);
727                 ext4_notify_error_sysfs(sbi);
728                 return;
729         }
730 write_directly:
731         /*
732          * Write through journal failed. Write sb directly to get error info
733          * out and hope for the best.
734          */
735         ext4_commit_super(sbi->s_sb);
736         ext4_notify_error_sysfs(sbi);
737 }
738
739 #define ext4_error_ratelimit(sb)                                        \
740                 ___ratelimit(&(EXT4_SB(sb)->s_err_ratelimit_state),     \
741                              "EXT4-fs error")
742
743 void __ext4_error(struct super_block *sb, const char *function,
744                   unsigned int line, bool force_ro, int error, __u64 block,
745                   const char *fmt, ...)
746 {
747         struct va_format vaf;
748         va_list args;
749
750         if (unlikely(ext4_forced_shutdown(EXT4_SB(sb))))
751                 return;
752
753         trace_ext4_error(sb, function, line);
754         if (ext4_error_ratelimit(sb)) {
755                 va_start(args, fmt);
756                 vaf.fmt = fmt;
757                 vaf.va = &args;
758                 printk(KERN_CRIT
759                        "EXT4-fs error (device %s): %s:%d: comm %s: %pV\n",
760                        sb->s_id, function, line, current->comm, &vaf);
761                 va_end(args);
762         }
763         ext4_handle_error(sb, force_ro, error, 0, block, function, line);
764 }
765
766 void __ext4_error_inode(struct inode *inode, const char *function,
767                         unsigned int line, ext4_fsblk_t block, int error,
768                         const char *fmt, ...)
769 {
770         va_list args;
771         struct va_format vaf;
772
773         if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb))))
774                 return;
775
776         trace_ext4_error(inode->i_sb, function, line);
777         if (ext4_error_ratelimit(inode->i_sb)) {
778                 va_start(args, fmt);
779                 vaf.fmt = fmt;
780                 vaf.va = &args;
781                 if (block)
782                         printk(KERN_CRIT "EXT4-fs error (device %s): %s:%d: "
783                                "inode #%lu: block %llu: comm %s: %pV\n",
784                                inode->i_sb->s_id, function, line, inode->i_ino,
785                                block, current->comm, &vaf);
786                 else
787                         printk(KERN_CRIT "EXT4-fs error (device %s): %s:%d: "
788                                "inode #%lu: comm %s: %pV\n",
789                                inode->i_sb->s_id, function, line, inode->i_ino,
790                                current->comm, &vaf);
791                 va_end(args);
792         }
793         ext4_handle_error(inode->i_sb, false, error, inode->i_ino, block,
794                           function, line);
795 }
796
797 void __ext4_error_file(struct file *file, const char *function,
798                        unsigned int line, ext4_fsblk_t block,
799                        const char *fmt, ...)
800 {
801         va_list args;
802         struct va_format vaf;
803         struct inode *inode = file_inode(file);
804         char pathname[80], *path;
805
806         if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb))))
807                 return;
808
809         trace_ext4_error(inode->i_sb, function, line);
810         if (ext4_error_ratelimit(inode->i_sb)) {
811                 path = file_path(file, pathname, sizeof(pathname));
812                 if (IS_ERR(path))
813                         path = "(unknown)";
814                 va_start(args, fmt);
815                 vaf.fmt = fmt;
816                 vaf.va = &args;
817                 if (block)
818                         printk(KERN_CRIT
819                                "EXT4-fs error (device %s): %s:%d: inode #%lu: "
820                                "block %llu: comm %s: path %s: %pV\n",
821                                inode->i_sb->s_id, function, line, inode->i_ino,
822                                block, current->comm, path, &vaf);
823                 else
824                         printk(KERN_CRIT
825                                "EXT4-fs error (device %s): %s:%d: inode #%lu: "
826                                "comm %s: path %s: %pV\n",
827                                inode->i_sb->s_id, function, line, inode->i_ino,
828                                current->comm, path, &vaf);
829                 va_end(args);
830         }
831         ext4_handle_error(inode->i_sb, false, EFSCORRUPTED, inode->i_ino, block,
832                           function, line);
833 }
834
835 const char *ext4_decode_error(struct super_block *sb, int errno,
836                               char nbuf[16])
837 {
838         char *errstr = NULL;
839
840         switch (errno) {
841         case -EFSCORRUPTED:
842                 errstr = "Corrupt filesystem";
843                 break;
844         case -EFSBADCRC:
845                 errstr = "Filesystem failed CRC";
846                 break;
847         case -EIO:
848                 errstr = "IO failure";
849                 break;
850         case -ENOMEM:
851                 errstr = "Out of memory";
852                 break;
853         case -EROFS:
854                 if (!sb || (EXT4_SB(sb)->s_journal &&
855                             EXT4_SB(sb)->s_journal->j_flags & JBD2_ABORT))
856                         errstr = "Journal has aborted";
857                 else
858                         errstr = "Readonly filesystem";
859                 break;
860         default:
861                 /* If the caller passed in an extra buffer for unknown
862                  * errors, textualise them now.  Else we just return
863                  * NULL. */
864                 if (nbuf) {
865                         /* Check for truncated error codes... */
866                         if (snprintf(nbuf, 16, "error %d", -errno) >= 0)
867                                 errstr = nbuf;
868                 }
869                 break;
870         }
871
872         return errstr;
873 }
874
875 /* __ext4_std_error decodes expected errors from journaling functions
876  * automatically and invokes the appropriate error response.  */
877
878 void __ext4_std_error(struct super_block *sb, const char *function,
879                       unsigned int line, int errno)
880 {
881         char nbuf[16];
882         const char *errstr;
883
884         if (unlikely(ext4_forced_shutdown(EXT4_SB(sb))))
885                 return;
886
887         /* Special case: if the error is EROFS, and we're not already
888          * inside a transaction, then there's really no point in logging
889          * an error. */
890         if (errno == -EROFS && journal_current_handle() == NULL && sb_rdonly(sb))
891                 return;
892
893         if (ext4_error_ratelimit(sb)) {
894                 errstr = ext4_decode_error(sb, errno, nbuf);
895                 printk(KERN_CRIT "EXT4-fs error (device %s) in %s:%d: %s\n",
896                        sb->s_id, function, line, errstr);
897         }
898
899         ext4_handle_error(sb, false, -errno, 0, 0, function, line);
900 }
901
902 void __ext4_msg(struct super_block *sb,
903                 const char *prefix, const char *fmt, ...)
904 {
905         struct va_format vaf;
906         va_list args;
907
908         atomic_inc(&EXT4_SB(sb)->s_msg_count);
909         if (!___ratelimit(&(EXT4_SB(sb)->s_msg_ratelimit_state), "EXT4-fs"))
910                 return;
911
912         va_start(args, fmt);
913         vaf.fmt = fmt;
914         vaf.va = &args;
915         printk("%sEXT4-fs (%s): %pV\n", prefix, sb->s_id, &vaf);
916         va_end(args);
917 }
918
919 static int ext4_warning_ratelimit(struct super_block *sb)
920 {
921         atomic_inc(&EXT4_SB(sb)->s_warning_count);
922         return ___ratelimit(&(EXT4_SB(sb)->s_warning_ratelimit_state),
923                             "EXT4-fs warning");
924 }
925
926 void __ext4_warning(struct super_block *sb, const char *function,
927                     unsigned int line, const char *fmt, ...)
928 {
929         struct va_format vaf;
930         va_list args;
931
932         if (!ext4_warning_ratelimit(sb))
933                 return;
934
935         va_start(args, fmt);
936         vaf.fmt = fmt;
937         vaf.va = &args;
938         printk(KERN_WARNING "EXT4-fs warning (device %s): %s:%d: %pV\n",
939                sb->s_id, function, line, &vaf);
940         va_end(args);
941 }
942
943 void __ext4_warning_inode(const struct inode *inode, const char *function,
944                           unsigned int line, const char *fmt, ...)
945 {
946         struct va_format vaf;
947         va_list args;
948
949         if (!ext4_warning_ratelimit(inode->i_sb))
950                 return;
951
952         va_start(args, fmt);
953         vaf.fmt = fmt;
954         vaf.va = &args;
955         printk(KERN_WARNING "EXT4-fs warning (device %s): %s:%d: "
956                "inode #%lu: comm %s: %pV\n", inode->i_sb->s_id,
957                function, line, inode->i_ino, current->comm, &vaf);
958         va_end(args);
959 }
960
961 void __ext4_grp_locked_error(const char *function, unsigned int line,
962                              struct super_block *sb, ext4_group_t grp,
963                              unsigned long ino, ext4_fsblk_t block,
964                              const char *fmt, ...)
965 __releases(bitlock)
966 __acquires(bitlock)
967 {
968         struct va_format vaf;
969         va_list args;
970
971         if (unlikely(ext4_forced_shutdown(EXT4_SB(sb))))
972                 return;
973
974         trace_ext4_error(sb, function, line);
975         if (ext4_error_ratelimit(sb)) {
976                 va_start(args, fmt);
977                 vaf.fmt = fmt;
978                 vaf.va = &args;
979                 printk(KERN_CRIT "EXT4-fs error (device %s): %s:%d: group %u, ",
980                        sb->s_id, function, line, grp);
981                 if (ino)
982                         printk(KERN_CONT "inode %lu: ", ino);
983                 if (block)
984                         printk(KERN_CONT "block %llu:",
985                                (unsigned long long) block);
986                 printk(KERN_CONT "%pV\n", &vaf);
987                 va_end(args);
988         }
989
990         if (test_opt(sb, ERRORS_CONT)) {
991                 if (test_opt(sb, WARN_ON_ERROR))
992                         WARN_ON_ONCE(1);
993                 EXT4_SB(sb)->s_mount_state |= EXT4_ERROR_FS;
994                 if (!bdev_read_only(sb->s_bdev)) {
995                         save_error_info(sb, EFSCORRUPTED, ino, block, function,
996                                         line);
997                         schedule_work(&EXT4_SB(sb)->s_error_work);
998                 }
999                 return;
1000         }
1001         ext4_unlock_group(sb, grp);
1002         ext4_handle_error(sb, false, EFSCORRUPTED, ino, block, function, line);
1003         /*
1004          * We only get here in the ERRORS_RO case; relocking the group
1005          * may be dangerous, but nothing bad will happen since the
1006          * filesystem will have already been marked read/only and the
1007          * journal has been aborted.  We return 1 as a hint to callers
1008          * who might what to use the return value from
1009          * ext4_grp_locked_error() to distinguish between the
1010          * ERRORS_CONT and ERRORS_RO case, and perhaps return more
1011          * aggressively from the ext4 function in question, with a
1012          * more appropriate error code.
1013          */
1014         ext4_lock_group(sb, grp);
1015         return;
1016 }
1017
1018 void ext4_mark_group_bitmap_corrupted(struct super_block *sb,
1019                                      ext4_group_t group,
1020                                      unsigned int flags)
1021 {
1022         struct ext4_sb_info *sbi = EXT4_SB(sb);
1023         struct ext4_group_info *grp = ext4_get_group_info(sb, group);
1024         struct ext4_group_desc *gdp = ext4_get_group_desc(sb, group, NULL);
1025         int ret;
1026
1027         if (flags & EXT4_GROUP_INFO_BBITMAP_CORRUPT) {
1028                 ret = ext4_test_and_set_bit(EXT4_GROUP_INFO_BBITMAP_CORRUPT_BIT,
1029                                             &grp->bb_state);
1030                 if (!ret)
1031                         percpu_counter_sub(&sbi->s_freeclusters_counter,
1032                                            grp->bb_free);
1033         }
1034
1035         if (flags & EXT4_GROUP_INFO_IBITMAP_CORRUPT) {
1036                 ret = ext4_test_and_set_bit(EXT4_GROUP_INFO_IBITMAP_CORRUPT_BIT,
1037                                             &grp->bb_state);
1038                 if (!ret && gdp) {
1039                         int count;
1040
1041                         count = ext4_free_inodes_count(sb, gdp);
1042                         percpu_counter_sub(&sbi->s_freeinodes_counter,
1043                                            count);
1044                 }
1045         }
1046 }
1047
1048 void ext4_update_dynamic_rev(struct super_block *sb)
1049 {
1050         struct ext4_super_block *es = EXT4_SB(sb)->s_es;
1051
1052         if (le32_to_cpu(es->s_rev_level) > EXT4_GOOD_OLD_REV)
1053                 return;
1054
1055         ext4_warning(sb,
1056                      "updating to rev %d because of new feature flag, "
1057                      "running e2fsck is recommended",
1058                      EXT4_DYNAMIC_REV);
1059
1060         es->s_first_ino = cpu_to_le32(EXT4_GOOD_OLD_FIRST_INO);
1061         es->s_inode_size = cpu_to_le16(EXT4_GOOD_OLD_INODE_SIZE);
1062         es->s_rev_level = cpu_to_le32(EXT4_DYNAMIC_REV);
1063         /* leave es->s_feature_*compat flags alone */
1064         /* es->s_uuid will be set by e2fsck if empty */
1065
1066         /*
1067          * The rest of the superblock fields should be zero, and if not it
1068          * means they are likely already in use, so leave them alone.  We
1069          * can leave it up to e2fsck to clean up any inconsistencies there.
1070          */
1071 }
1072
1073 /*
1074  * Open the external journal device
1075  */
1076 static struct block_device *ext4_blkdev_get(dev_t dev, struct super_block *sb)
1077 {
1078         struct block_device *bdev;
1079
1080         bdev = blkdev_get_by_dev(dev, FMODE_READ|FMODE_WRITE|FMODE_EXCL, sb);
1081         if (IS_ERR(bdev))
1082                 goto fail;
1083         return bdev;
1084
1085 fail:
1086         ext4_msg(sb, KERN_ERR,
1087                  "failed to open journal device unknown-block(%u,%u) %ld",
1088                  MAJOR(dev), MINOR(dev), PTR_ERR(bdev));
1089         return NULL;
1090 }
1091
1092 /*
1093  * Release the journal device
1094  */
1095 static void ext4_blkdev_put(struct block_device *bdev)
1096 {
1097         blkdev_put(bdev, FMODE_READ|FMODE_WRITE|FMODE_EXCL);
1098 }
1099
1100 static void ext4_blkdev_remove(struct ext4_sb_info *sbi)
1101 {
1102         struct block_device *bdev;
1103         bdev = sbi->s_journal_bdev;
1104         if (bdev) {
1105                 ext4_blkdev_put(bdev);
1106                 sbi->s_journal_bdev = NULL;
1107         }
1108 }
1109
1110 static inline struct inode *orphan_list_entry(struct list_head *l)
1111 {
1112         return &list_entry(l, struct ext4_inode_info, i_orphan)->vfs_inode;
1113 }
1114
1115 static void dump_orphan_list(struct super_block *sb, struct ext4_sb_info *sbi)
1116 {
1117         struct list_head *l;
1118
1119         ext4_msg(sb, KERN_ERR, "sb orphan head is %d",
1120                  le32_to_cpu(sbi->s_es->s_last_orphan));
1121
1122         printk(KERN_ERR "sb_info orphan list:\n");
1123         list_for_each(l, &sbi->s_orphan) {
1124                 struct inode *inode = orphan_list_entry(l);
1125                 printk(KERN_ERR "  "
1126                        "inode %s:%lu at %p: mode %o, nlink %d, next %d\n",
1127                        inode->i_sb->s_id, inode->i_ino, inode,
1128                        inode->i_mode, inode->i_nlink,
1129                        NEXT_ORPHAN(inode));
1130         }
1131 }
1132
1133 #ifdef CONFIG_QUOTA
1134 static int ext4_quota_off(struct super_block *sb, int type);
1135
1136 static inline void ext4_quota_off_umount(struct super_block *sb)
1137 {
1138         int type;
1139
1140         /* Use our quota_off function to clear inode flags etc. */
1141         for (type = 0; type < EXT4_MAXQUOTAS; type++)
1142                 ext4_quota_off(sb, type);
1143 }
1144
1145 /*
1146  * This is a helper function which is used in the mount/remount
1147  * codepaths (which holds s_umount) to fetch the quota file name.
1148  */
1149 static inline char *get_qf_name(struct super_block *sb,
1150                                 struct ext4_sb_info *sbi,
1151                                 int type)
1152 {
1153         return rcu_dereference_protected(sbi->s_qf_names[type],
1154                                          lockdep_is_held(&sb->s_umount));
1155 }
1156 #else
1157 static inline void ext4_quota_off_umount(struct super_block *sb)
1158 {
1159 }
1160 #endif
1161
1162 static void ext4_put_super(struct super_block *sb)
1163 {
1164         struct ext4_sb_info *sbi = EXT4_SB(sb);
1165         struct ext4_super_block *es = sbi->s_es;
1166         struct buffer_head **group_desc;
1167         struct flex_groups **flex_groups;
1168         int aborted = 0;
1169         int i, err;
1170
1171         ext4_unregister_li_request(sb);
1172         ext4_quota_off_umount(sb);
1173
1174         flush_work(&sbi->s_error_work);
1175         destroy_workqueue(sbi->rsv_conversion_wq);
1176
1177         /*
1178          * Unregister sysfs before destroying jbd2 journal.
1179          * Since we could still access attr_journal_task attribute via sysfs
1180          * path which could have sbi->s_journal->j_task as NULL
1181          */
1182         ext4_unregister_sysfs(sb);
1183
1184         if (sbi->s_journal) {
1185                 aborted = is_journal_aborted(sbi->s_journal);
1186                 err = jbd2_journal_destroy(sbi->s_journal);
1187                 sbi->s_journal = NULL;
1188                 if ((err < 0) && !aborted) {
1189                         ext4_abort(sb, -err, "Couldn't clean up the journal");
1190                 }
1191         }
1192
1193         ext4_es_unregister_shrinker(sbi);
1194         del_timer_sync(&sbi->s_err_report);
1195         ext4_release_system_zone(sb);
1196         ext4_mb_release(sb);
1197         ext4_ext_release(sb);
1198
1199         if (!sb_rdonly(sb) && !aborted) {
1200                 ext4_clear_feature_journal_needs_recovery(sb);
1201                 es->s_state = cpu_to_le16(sbi->s_mount_state);
1202         }
1203         if (!sb_rdonly(sb))
1204                 ext4_commit_super(sb);
1205
1206         rcu_read_lock();
1207         group_desc = rcu_dereference(sbi->s_group_desc);
1208         for (i = 0; i < sbi->s_gdb_count; i++)
1209                 brelse(group_desc[i]);
1210         kvfree(group_desc);
1211         flex_groups = rcu_dereference(sbi->s_flex_groups);
1212         if (flex_groups) {
1213                 for (i = 0; i < sbi->s_flex_groups_allocated; i++)
1214                         kvfree(flex_groups[i]);
1215                 kvfree(flex_groups);
1216         }
1217         rcu_read_unlock();
1218         percpu_counter_destroy(&sbi->s_freeclusters_counter);
1219         percpu_counter_destroy(&sbi->s_freeinodes_counter);
1220         percpu_counter_destroy(&sbi->s_dirs_counter);
1221         percpu_counter_destroy(&sbi->s_dirtyclusters_counter);
1222         percpu_counter_destroy(&sbi->s_sra_exceeded_retry_limit);
1223         percpu_free_rwsem(&sbi->s_writepages_rwsem);
1224 #ifdef CONFIG_QUOTA
1225         for (i = 0; i < EXT4_MAXQUOTAS; i++)
1226                 kfree(get_qf_name(sb, sbi, i));
1227 #endif
1228
1229         /* Debugging code just in case the in-memory inode orphan list
1230          * isn't empty.  The on-disk one can be non-empty if we've
1231          * detected an error and taken the fs readonly, but the
1232          * in-memory list had better be clean by this point. */
1233         if (!list_empty(&sbi->s_orphan))
1234                 dump_orphan_list(sb, sbi);
1235         ASSERT(list_empty(&sbi->s_orphan));
1236
1237         sync_blockdev(sb->s_bdev);
1238         invalidate_bdev(sb->s_bdev);
1239         if (sbi->s_journal_bdev && sbi->s_journal_bdev != sb->s_bdev) {
1240                 /*
1241                  * Invalidate the journal device's buffers.  We don't want them
1242                  * floating about in memory - the physical journal device may
1243                  * hotswapped, and it breaks the `ro-after' testing code.
1244                  */
1245                 sync_blockdev(sbi->s_journal_bdev);
1246                 invalidate_bdev(sbi->s_journal_bdev);
1247                 ext4_blkdev_remove(sbi);
1248         }
1249
1250         ext4_xattr_destroy_cache(sbi->s_ea_inode_cache);
1251         sbi->s_ea_inode_cache = NULL;
1252
1253         ext4_xattr_destroy_cache(sbi->s_ea_block_cache);
1254         sbi->s_ea_block_cache = NULL;
1255
1256         ext4_stop_mmpd(sbi);
1257
1258         brelse(sbi->s_sbh);
1259         sb->s_fs_info = NULL;
1260         /*
1261          * Now that we are completely done shutting down the
1262          * superblock, we need to actually destroy the kobject.
1263          */
1264         kobject_put(&sbi->s_kobj);
1265         wait_for_completion(&sbi->s_kobj_unregister);
1266         if (sbi->s_chksum_driver)
1267                 crypto_free_shash(sbi->s_chksum_driver);
1268         kfree(sbi->s_blockgroup_lock);
1269         fs_put_dax(sbi->s_daxdev);
1270         fscrypt_free_dummy_policy(&sbi->s_dummy_enc_policy);
1271 #ifdef CONFIG_UNICODE
1272         utf8_unload(sb->s_encoding);
1273 #endif
1274         kfree(sbi);
1275 }
1276
1277 static struct kmem_cache *ext4_inode_cachep;
1278
1279 /*
1280  * Called inside transaction, so use GFP_NOFS
1281  */
1282 static struct inode *ext4_alloc_inode(struct super_block *sb)
1283 {
1284         struct ext4_inode_info *ei;
1285
1286         ei = kmem_cache_alloc(ext4_inode_cachep, GFP_NOFS);
1287         if (!ei)
1288                 return NULL;
1289
1290         inode_set_iversion(&ei->vfs_inode, 1);
1291         spin_lock_init(&ei->i_raw_lock);
1292         INIT_LIST_HEAD(&ei->i_prealloc_list);
1293         atomic_set(&ei->i_prealloc_active, 0);
1294         spin_lock_init(&ei->i_prealloc_lock);
1295         ext4_es_init_tree(&ei->i_es_tree);
1296         rwlock_init(&ei->i_es_lock);
1297         INIT_LIST_HEAD(&ei->i_es_list);
1298         ei->i_es_all_nr = 0;
1299         ei->i_es_shk_nr = 0;
1300         ei->i_es_shrink_lblk = 0;
1301         ei->i_reserved_data_blocks = 0;
1302         spin_lock_init(&(ei->i_block_reservation_lock));
1303         ext4_init_pending_tree(&ei->i_pending_tree);
1304 #ifdef CONFIG_QUOTA
1305         ei->i_reserved_quota = 0;
1306         memset(&ei->i_dquot, 0, sizeof(ei->i_dquot));
1307 #endif
1308         ei->jinode = NULL;
1309         INIT_LIST_HEAD(&ei->i_rsv_conversion_list);
1310         spin_lock_init(&ei->i_completed_io_lock);
1311         ei->i_sync_tid = 0;
1312         ei->i_datasync_tid = 0;
1313         atomic_set(&ei->i_unwritten, 0);
1314         INIT_WORK(&ei->i_rsv_conversion_work, ext4_end_io_rsv_work);
1315         ext4_fc_init_inode(&ei->vfs_inode);
1316         mutex_init(&ei->i_fc_lock);
1317         return &ei->vfs_inode;
1318 }
1319
1320 static int ext4_drop_inode(struct inode *inode)
1321 {
1322         int drop = generic_drop_inode(inode);
1323
1324         if (!drop)
1325                 drop = fscrypt_drop_inode(inode);
1326
1327         trace_ext4_drop_inode(inode, drop);
1328         return drop;
1329 }
1330
1331 static void ext4_free_in_core_inode(struct inode *inode)
1332 {
1333         fscrypt_free_inode(inode);
1334         if (!list_empty(&(EXT4_I(inode)->i_fc_list))) {
1335                 pr_warn("%s: inode %ld still in fc list",
1336                         __func__, inode->i_ino);
1337         }
1338         kmem_cache_free(ext4_inode_cachep, EXT4_I(inode));
1339 }
1340
1341 static void ext4_destroy_inode(struct inode *inode)
1342 {
1343         if (!list_empty(&(EXT4_I(inode)->i_orphan))) {
1344                 ext4_msg(inode->i_sb, KERN_ERR,
1345                          "Inode %lu (%p): orphan list check failed!",
1346                          inode->i_ino, EXT4_I(inode));
1347                 print_hex_dump(KERN_INFO, "", DUMP_PREFIX_ADDRESS, 16, 4,
1348                                 EXT4_I(inode), sizeof(struct ext4_inode_info),
1349                                 true);
1350                 dump_stack();
1351         }
1352 }
1353
1354 static void init_once(void *foo)
1355 {
1356         struct ext4_inode_info *ei = (struct ext4_inode_info *) foo;
1357
1358         INIT_LIST_HEAD(&ei->i_orphan);
1359         init_rwsem(&ei->xattr_sem);
1360         init_rwsem(&ei->i_data_sem);
1361         inode_init_once(&ei->vfs_inode);
1362         ext4_fc_init_inode(&ei->vfs_inode);
1363 }
1364
1365 static int __init init_inodecache(void)
1366 {
1367         ext4_inode_cachep = kmem_cache_create_usercopy("ext4_inode_cache",
1368                                 sizeof(struct ext4_inode_info), 0,
1369                                 (SLAB_RECLAIM_ACCOUNT|SLAB_MEM_SPREAD|
1370                                         SLAB_ACCOUNT),
1371                                 offsetof(struct ext4_inode_info, i_data),
1372                                 sizeof_field(struct ext4_inode_info, i_data),
1373                                 init_once);
1374         if (ext4_inode_cachep == NULL)
1375                 return -ENOMEM;
1376         return 0;
1377 }
1378
1379 static void destroy_inodecache(void)
1380 {
1381         /*
1382          * Make sure all delayed rcu free inodes are flushed before we
1383          * destroy cache.
1384          */
1385         rcu_barrier();
1386         kmem_cache_destroy(ext4_inode_cachep);
1387 }
1388
1389 void ext4_clear_inode(struct inode *inode)
1390 {
1391         ext4_fc_del(inode);
1392         invalidate_inode_buffers(inode);
1393         clear_inode(inode);
1394         ext4_discard_preallocations(inode, 0);
1395         ext4_es_remove_extent(inode, 0, EXT_MAX_BLOCKS);
1396         dquot_drop(inode);
1397         if (EXT4_I(inode)->jinode) {
1398                 jbd2_journal_release_jbd_inode(EXT4_JOURNAL(inode),
1399                                                EXT4_I(inode)->jinode);
1400                 jbd2_free_inode(EXT4_I(inode)->jinode);
1401                 EXT4_I(inode)->jinode = NULL;
1402         }
1403         fscrypt_put_encryption_info(inode);
1404         fsverity_cleanup_inode(inode);
1405 }
1406
1407 static struct inode *ext4_nfs_get_inode(struct super_block *sb,
1408                                         u64 ino, u32 generation)
1409 {
1410         struct inode *inode;
1411
1412         /*
1413          * Currently we don't know the generation for parent directory, so
1414          * a generation of 0 means "accept any"
1415          */
1416         inode = ext4_iget(sb, ino, EXT4_IGET_HANDLE);
1417         if (IS_ERR(inode))
1418                 return ERR_CAST(inode);
1419         if (generation && inode->i_generation != generation) {
1420                 iput(inode);
1421                 return ERR_PTR(-ESTALE);
1422         }
1423
1424         return inode;
1425 }
1426
1427 static struct dentry *ext4_fh_to_dentry(struct super_block *sb, struct fid *fid,
1428                                         int fh_len, int fh_type)
1429 {
1430         return generic_fh_to_dentry(sb, fid, fh_len, fh_type,
1431                                     ext4_nfs_get_inode);
1432 }
1433
1434 static struct dentry *ext4_fh_to_parent(struct super_block *sb, struct fid *fid,
1435                                         int fh_len, int fh_type)
1436 {
1437         return generic_fh_to_parent(sb, fid, fh_len, fh_type,
1438                                     ext4_nfs_get_inode);
1439 }
1440
1441 static int ext4_nfs_commit_metadata(struct inode *inode)
1442 {
1443         struct writeback_control wbc = {
1444                 .sync_mode = WB_SYNC_ALL
1445         };
1446
1447         trace_ext4_nfs_commit_metadata(inode);
1448         return ext4_write_inode(inode, &wbc);
1449 }
1450
1451 #ifdef CONFIG_FS_ENCRYPTION
1452 static int ext4_get_context(struct inode *inode, void *ctx, size_t len)
1453 {
1454         return ext4_xattr_get(inode, EXT4_XATTR_INDEX_ENCRYPTION,
1455                                  EXT4_XATTR_NAME_ENCRYPTION_CONTEXT, ctx, len);
1456 }
1457
1458 static int ext4_set_context(struct inode *inode, const void *ctx, size_t len,
1459                                                         void *fs_data)
1460 {
1461         handle_t *handle = fs_data;
1462         int res, res2, credits, retries = 0;
1463
1464         /*
1465          * Encrypting the root directory is not allowed because e2fsck expects
1466          * lost+found to exist and be unencrypted, and encrypting the root
1467          * directory would imply encrypting the lost+found directory as well as
1468          * the filename "lost+found" itself.
1469          */
1470         if (inode->i_ino == EXT4_ROOT_INO)
1471                 return -EPERM;
1472
1473         if (WARN_ON_ONCE(IS_DAX(inode) && i_size_read(inode)))
1474                 return -EINVAL;
1475
1476         if (ext4_test_inode_flag(inode, EXT4_INODE_DAX))
1477                 return -EOPNOTSUPP;
1478
1479         res = ext4_convert_inline_data(inode);
1480         if (res)
1481                 return res;
1482
1483         /*
1484          * If a journal handle was specified, then the encryption context is
1485          * being set on a new inode via inheritance and is part of a larger
1486          * transaction to create the inode.  Otherwise the encryption context is
1487          * being set on an existing inode in its own transaction.  Only in the
1488          * latter case should the "retry on ENOSPC" logic be used.
1489          */
1490
1491         if (handle) {
1492                 res = ext4_xattr_set_handle(handle, inode,
1493                                             EXT4_XATTR_INDEX_ENCRYPTION,
1494                                             EXT4_XATTR_NAME_ENCRYPTION_CONTEXT,
1495                                             ctx, len, 0);
1496                 if (!res) {
1497                         ext4_set_inode_flag(inode, EXT4_INODE_ENCRYPT);
1498                         ext4_clear_inode_state(inode,
1499                                         EXT4_STATE_MAY_INLINE_DATA);
1500                         /*
1501                          * Update inode->i_flags - S_ENCRYPTED will be enabled,
1502                          * S_DAX may be disabled
1503                          */
1504                         ext4_set_inode_flags(inode, false);
1505                 }
1506                 return res;
1507         }
1508
1509         res = dquot_initialize(inode);
1510         if (res)
1511                 return res;
1512 retry:
1513         res = ext4_xattr_set_credits(inode, len, false /* is_create */,
1514                                      &credits);
1515         if (res)
1516                 return res;
1517
1518         handle = ext4_journal_start(inode, EXT4_HT_MISC, credits);
1519         if (IS_ERR(handle))
1520                 return PTR_ERR(handle);
1521
1522         res = ext4_xattr_set_handle(handle, inode, EXT4_XATTR_INDEX_ENCRYPTION,
1523                                     EXT4_XATTR_NAME_ENCRYPTION_CONTEXT,
1524                                     ctx, len, 0);
1525         if (!res) {
1526                 ext4_set_inode_flag(inode, EXT4_INODE_ENCRYPT);
1527                 /*
1528                  * Update inode->i_flags - S_ENCRYPTED will be enabled,
1529                  * S_DAX may be disabled
1530                  */
1531                 ext4_set_inode_flags(inode, false);
1532                 res = ext4_mark_inode_dirty(handle, inode);
1533                 if (res)
1534                         EXT4_ERROR_INODE(inode, "Failed to mark inode dirty");
1535         }
1536         res2 = ext4_journal_stop(handle);
1537
1538         if (res == -ENOSPC && ext4_should_retry_alloc(inode->i_sb, &retries))
1539                 goto retry;
1540         if (!res)
1541                 res = res2;
1542         return res;
1543 }
1544
1545 static const union fscrypt_policy *ext4_get_dummy_policy(struct super_block *sb)
1546 {
1547         return EXT4_SB(sb)->s_dummy_enc_policy.policy;
1548 }
1549
1550 static bool ext4_has_stable_inodes(struct super_block *sb)
1551 {
1552         return ext4_has_feature_stable_inodes(sb);
1553 }
1554
1555 static void ext4_get_ino_and_lblk_bits(struct super_block *sb,
1556                                        int *ino_bits_ret, int *lblk_bits_ret)
1557 {
1558         *ino_bits_ret = 8 * sizeof(EXT4_SB(sb)->s_es->s_inodes_count);
1559         *lblk_bits_ret = 8 * sizeof(ext4_lblk_t);
1560 }
1561
1562 static const struct fscrypt_operations ext4_cryptops = {
1563         .key_prefix             = "ext4:",
1564         .get_context            = ext4_get_context,
1565         .set_context            = ext4_set_context,
1566         .get_dummy_policy       = ext4_get_dummy_policy,
1567         .empty_dir              = ext4_empty_dir,
1568         .max_namelen            = EXT4_NAME_LEN,
1569         .has_stable_inodes      = ext4_has_stable_inodes,
1570         .get_ino_and_lblk_bits  = ext4_get_ino_and_lblk_bits,
1571 };
1572 #endif
1573
1574 #ifdef CONFIG_QUOTA
1575 static const char * const quotatypes[] = INITQFNAMES;
1576 #define QTYPE2NAME(t) (quotatypes[t])
1577
1578 static int ext4_write_dquot(struct dquot *dquot);
1579 static int ext4_acquire_dquot(struct dquot *dquot);
1580 static int ext4_release_dquot(struct dquot *dquot);
1581 static int ext4_mark_dquot_dirty(struct dquot *dquot);
1582 static int ext4_write_info(struct super_block *sb, int type);
1583 static int ext4_quota_on(struct super_block *sb, int type, int format_id,
1584                          const struct path *path);
1585 static int ext4_quota_on_mount(struct super_block *sb, int type);
1586 static ssize_t ext4_quota_read(struct super_block *sb, int type, char *data,
1587                                size_t len, loff_t off);
1588 static ssize_t ext4_quota_write(struct super_block *sb, int type,
1589                                 const char *data, size_t len, loff_t off);
1590 static int ext4_quota_enable(struct super_block *sb, int type, int format_id,
1591                              unsigned int flags);
1592 static int ext4_enable_quotas(struct super_block *sb);
1593
1594 static struct dquot **ext4_get_dquots(struct inode *inode)
1595 {
1596         return EXT4_I(inode)->i_dquot;
1597 }
1598
1599 static const struct dquot_operations ext4_quota_operations = {
1600         .get_reserved_space     = ext4_get_reserved_space,
1601         .write_dquot            = ext4_write_dquot,
1602         .acquire_dquot          = ext4_acquire_dquot,
1603         .release_dquot          = ext4_release_dquot,
1604         .mark_dirty             = ext4_mark_dquot_dirty,
1605         .write_info             = ext4_write_info,
1606         .alloc_dquot            = dquot_alloc,
1607         .destroy_dquot          = dquot_destroy,
1608         .get_projid             = ext4_get_projid,
1609         .get_inode_usage        = ext4_get_inode_usage,
1610         .get_next_id            = dquot_get_next_id,
1611 };
1612
1613 static const struct quotactl_ops ext4_qctl_operations = {
1614         .quota_on       = ext4_quota_on,
1615         .quota_off      = ext4_quota_off,
1616         .quota_sync     = dquot_quota_sync,
1617         .get_state      = dquot_get_state,
1618         .set_info       = dquot_set_dqinfo,
1619         .get_dqblk      = dquot_get_dqblk,
1620         .set_dqblk      = dquot_set_dqblk,
1621         .get_nextdqblk  = dquot_get_next_dqblk,
1622 };
1623 #endif
1624
1625 static const struct super_operations ext4_sops = {
1626         .alloc_inode    = ext4_alloc_inode,
1627         .free_inode     = ext4_free_in_core_inode,
1628         .destroy_inode  = ext4_destroy_inode,
1629         .write_inode    = ext4_write_inode,
1630         .dirty_inode    = ext4_dirty_inode,
1631         .drop_inode     = ext4_drop_inode,
1632         .evict_inode    = ext4_evict_inode,
1633         .put_super      = ext4_put_super,
1634         .sync_fs        = ext4_sync_fs,
1635         .freeze_fs      = ext4_freeze,
1636         .unfreeze_fs    = ext4_unfreeze,
1637         .statfs         = ext4_statfs,
1638         .remount_fs     = ext4_remount,
1639         .show_options   = ext4_show_options,
1640 #ifdef CONFIG_QUOTA
1641         .quota_read     = ext4_quota_read,
1642         .quota_write    = ext4_quota_write,
1643         .get_dquots     = ext4_get_dquots,
1644 #endif
1645 };
1646
1647 static const struct export_operations ext4_export_ops = {
1648         .fh_to_dentry = ext4_fh_to_dentry,
1649         .fh_to_parent = ext4_fh_to_parent,
1650         .get_parent = ext4_get_parent,
1651         .commit_metadata = ext4_nfs_commit_metadata,
1652 };
1653
1654 enum {
1655         Opt_bsd_df, Opt_minix_df, Opt_grpid, Opt_nogrpid,
1656         Opt_resgid, Opt_resuid, Opt_sb, Opt_err_cont, Opt_err_panic, Opt_err_ro,
1657         Opt_nouid32, Opt_debug, Opt_removed,
1658         Opt_user_xattr, Opt_nouser_xattr, Opt_acl, Opt_noacl,
1659         Opt_auto_da_alloc, Opt_noauto_da_alloc, Opt_noload,
1660         Opt_commit, Opt_min_batch_time, Opt_max_batch_time, Opt_journal_dev,
1661         Opt_journal_path, Opt_journal_checksum, Opt_journal_async_commit,
1662         Opt_abort, Opt_data_journal, Opt_data_ordered, Opt_data_writeback,
1663         Opt_data_err_abort, Opt_data_err_ignore, Opt_test_dummy_encryption,
1664         Opt_inlinecrypt,
1665         Opt_usrjquota, Opt_grpjquota, Opt_offusrjquota, Opt_offgrpjquota,
1666         Opt_jqfmt_vfsold, Opt_jqfmt_vfsv0, Opt_jqfmt_vfsv1, Opt_quota,
1667         Opt_noquota, Opt_barrier, Opt_nobarrier, Opt_err,
1668         Opt_usrquota, Opt_grpquota, Opt_prjquota, Opt_i_version,
1669         Opt_dax, Opt_dax_always, Opt_dax_inode, Opt_dax_never,
1670         Opt_stripe, Opt_delalloc, Opt_nodelalloc, Opt_warn_on_error,
1671         Opt_nowarn_on_error, Opt_mblk_io_submit,
1672         Opt_lazytime, Opt_nolazytime, Opt_debug_want_extra_isize,
1673         Opt_nomblk_io_submit, Opt_block_validity, Opt_noblock_validity,
1674         Opt_inode_readahead_blks, Opt_journal_ioprio,
1675         Opt_dioread_nolock, Opt_dioread_lock,
1676         Opt_discard, Opt_nodiscard, Opt_init_itable, Opt_noinit_itable,
1677         Opt_max_dir_size_kb, Opt_nojournal_checksum, Opt_nombcache,
1678         Opt_no_prefetch_block_bitmaps, Opt_mb_optimize_scan,
1679 #ifdef CONFIG_EXT4_DEBUG
1680         Opt_fc_debug_max_replay, Opt_fc_debug_force
1681 #endif
1682 };
1683
1684 static const match_table_t tokens = {
1685         {Opt_bsd_df, "bsddf"},
1686         {Opt_minix_df, "minixdf"},
1687         {Opt_grpid, "grpid"},
1688         {Opt_grpid, "bsdgroups"},
1689         {Opt_nogrpid, "nogrpid"},
1690         {Opt_nogrpid, "sysvgroups"},
1691         {Opt_resgid, "resgid=%u"},
1692         {Opt_resuid, "resuid=%u"},
1693         {Opt_sb, "sb=%u"},
1694         {Opt_err_cont, "errors=continue"},
1695         {Opt_err_panic, "errors=panic"},
1696         {Opt_err_ro, "errors=remount-ro"},
1697         {Opt_nouid32, "nouid32"},
1698         {Opt_debug, "debug"},
1699         {Opt_removed, "oldalloc"},
1700         {Opt_removed, "orlov"},
1701         {Opt_user_xattr, "user_xattr"},
1702         {Opt_nouser_xattr, "nouser_xattr"},
1703         {Opt_acl, "acl"},
1704         {Opt_noacl, "noacl"},
1705         {Opt_noload, "norecovery"},
1706         {Opt_noload, "noload"},
1707         {Opt_removed, "nobh"},
1708         {Opt_removed, "bh"},
1709         {Opt_commit, "commit=%u"},
1710         {Opt_min_batch_time, "min_batch_time=%u"},
1711         {Opt_max_batch_time, "max_batch_time=%u"},
1712         {Opt_journal_dev, "journal_dev=%u"},
1713         {Opt_journal_path, "journal_path=%s"},
1714         {Opt_journal_checksum, "journal_checksum"},
1715         {Opt_nojournal_checksum, "nojournal_checksum"},
1716         {Opt_journal_async_commit, "journal_async_commit"},
1717         {Opt_abort, "abort"},
1718         {Opt_data_journal, "data=journal"},
1719         {Opt_data_ordered, "data=ordered"},
1720         {Opt_data_writeback, "data=writeback"},
1721         {Opt_data_err_abort, "data_err=abort"},
1722         {Opt_data_err_ignore, "data_err=ignore"},
1723         {Opt_offusrjquota, "usrjquota="},
1724         {Opt_usrjquota, "usrjquota=%s"},
1725         {Opt_offgrpjquota, "grpjquota="},
1726         {Opt_grpjquota, "grpjquota=%s"},
1727         {Opt_jqfmt_vfsold, "jqfmt=vfsold"},
1728         {Opt_jqfmt_vfsv0, "jqfmt=vfsv0"},
1729         {Opt_jqfmt_vfsv1, "jqfmt=vfsv1"},
1730         {Opt_grpquota, "grpquota"},
1731         {Opt_noquota, "noquota"},
1732         {Opt_quota, "quota"},
1733         {Opt_usrquota, "usrquota"},
1734         {Opt_prjquota, "prjquota"},
1735         {Opt_barrier, "barrier=%u"},
1736         {Opt_barrier, "barrier"},
1737         {Opt_nobarrier, "nobarrier"},
1738         {Opt_i_version, "i_version"},
1739         {Opt_dax, "dax"},
1740         {Opt_dax_always, "dax=always"},
1741         {Opt_dax_inode, "dax=inode"},
1742         {Opt_dax_never, "dax=never"},
1743         {Opt_stripe, "stripe=%u"},
1744         {Opt_delalloc, "delalloc"},
1745         {Opt_warn_on_error, "warn_on_error"},
1746         {Opt_nowarn_on_error, "nowarn_on_error"},
1747         {Opt_lazytime, "lazytime"},
1748         {Opt_nolazytime, "nolazytime"},
1749         {Opt_debug_want_extra_isize, "debug_want_extra_isize=%u"},
1750         {Opt_nodelalloc, "nodelalloc"},
1751         {Opt_removed, "mblk_io_submit"},
1752         {Opt_removed, "nomblk_io_submit"},
1753         {Opt_block_validity, "block_validity"},
1754         {Opt_noblock_validity, "noblock_validity"},
1755         {Opt_inode_readahead_blks, "inode_readahead_blks=%u"},
1756         {Opt_journal_ioprio, "journal_ioprio=%u"},
1757         {Opt_auto_da_alloc, "auto_da_alloc=%u"},
1758         {Opt_auto_da_alloc, "auto_da_alloc"},
1759         {Opt_noauto_da_alloc, "noauto_da_alloc"},
1760         {Opt_dioread_nolock, "dioread_nolock"},
1761         {Opt_dioread_lock, "nodioread_nolock"},
1762         {Opt_dioread_lock, "dioread_lock"},
1763         {Opt_discard, "discard"},
1764         {Opt_nodiscard, "nodiscard"},
1765         {Opt_init_itable, "init_itable=%u"},
1766         {Opt_init_itable, "init_itable"},
1767         {Opt_noinit_itable, "noinit_itable"},
1768 #ifdef CONFIG_EXT4_DEBUG
1769         {Opt_fc_debug_force, "fc_debug_force"},
1770         {Opt_fc_debug_max_replay, "fc_debug_max_replay=%u"},
1771 #endif
1772         {Opt_max_dir_size_kb, "max_dir_size_kb=%u"},
1773         {Opt_test_dummy_encryption, "test_dummy_encryption=%s"},
1774         {Opt_test_dummy_encryption, "test_dummy_encryption"},
1775         {Opt_inlinecrypt, "inlinecrypt"},
1776         {Opt_nombcache, "nombcache"},
1777         {Opt_nombcache, "no_mbcache"},  /* for backward compatibility */
1778         {Opt_removed, "prefetch_block_bitmaps"},
1779         {Opt_no_prefetch_block_bitmaps, "no_prefetch_block_bitmaps"},
1780         {Opt_mb_optimize_scan, "mb_optimize_scan=%d"},
1781         {Opt_removed, "check=none"},    /* mount option from ext2/3 */
1782         {Opt_removed, "nocheck"},       /* mount option from ext2/3 */
1783         {Opt_removed, "reservation"},   /* mount option from ext2/3 */
1784         {Opt_removed, "noreservation"}, /* mount option from ext2/3 */
1785         {Opt_removed, "journal=%u"},    /* mount option from ext2/3 */
1786         {Opt_err, NULL},
1787 };
1788
1789 static ext4_fsblk_t get_sb_block(void **data)
1790 {
1791         ext4_fsblk_t    sb_block;
1792         char            *options = (char *) *data;
1793
1794         if (!options || strncmp(options, "sb=", 3) != 0)
1795                 return 1;       /* Default location */
1796
1797         options += 3;
1798         /* TODO: use simple_strtoll with >32bit ext4 */
1799         sb_block = simple_strtoul(options, &options, 0);
1800         if (*options && *options != ',') {
1801                 printk(KERN_ERR "EXT4-fs: Invalid sb specification: %s\n",
1802                        (char *) *data);
1803                 return 1;
1804         }
1805         if (*options == ',')
1806                 options++;
1807         *data = (void *) options;
1808
1809         return sb_block;
1810 }
1811
1812 #define DEFAULT_JOURNAL_IOPRIO (IOPRIO_PRIO_VALUE(IOPRIO_CLASS_BE, 3))
1813 #define DEFAULT_MB_OPTIMIZE_SCAN        (-1)
1814
1815 static const char deprecated_msg[] =
1816         "Mount option \"%s\" will be removed by %s\n"
1817         "Contact linux-ext4@vger.kernel.org if you think we should keep it.\n";
1818
1819 #ifdef CONFIG_QUOTA
1820 static int set_qf_name(struct super_block *sb, int qtype, substring_t *args)
1821 {
1822         struct ext4_sb_info *sbi = EXT4_SB(sb);
1823         char *qname, *old_qname = get_qf_name(sb, sbi, qtype);
1824         int ret = -1;
1825
1826         if (sb_any_quota_loaded(sb) && !old_qname) {
1827                 ext4_msg(sb, KERN_ERR,
1828                         "Cannot change journaled "
1829                         "quota options when quota turned on");
1830                 return -1;
1831         }
1832         if (ext4_has_feature_quota(sb)) {
1833                 ext4_msg(sb, KERN_INFO, "Journaled quota options "
1834                          "ignored when QUOTA feature is enabled");
1835                 return 1;
1836         }
1837         qname = match_strdup(args);
1838         if (!qname) {
1839                 ext4_msg(sb, KERN_ERR,
1840                         "Not enough memory for storing quotafile name");
1841                 return -1;
1842         }
1843         if (old_qname) {
1844                 if (strcmp(old_qname, qname) == 0)
1845                         ret = 1;
1846                 else
1847                         ext4_msg(sb, KERN_ERR,
1848                                  "%s quota file already specified",
1849                                  QTYPE2NAME(qtype));
1850                 goto errout;
1851         }
1852         if (strchr(qname, '/')) {
1853                 ext4_msg(sb, KERN_ERR,
1854                         "quotafile must be on filesystem root");
1855                 goto errout;
1856         }
1857         rcu_assign_pointer(sbi->s_qf_names[qtype], qname);
1858         set_opt(sb, QUOTA);
1859         return 1;
1860 errout:
1861         kfree(qname);
1862         return ret;
1863 }
1864
1865 static int clear_qf_name(struct super_block *sb, int qtype)
1866 {
1867
1868         struct ext4_sb_info *sbi = EXT4_SB(sb);
1869         char *old_qname = get_qf_name(sb, sbi, qtype);
1870
1871         if (sb_any_quota_loaded(sb) && old_qname) {
1872                 ext4_msg(sb, KERN_ERR, "Cannot change journaled quota options"
1873                         " when quota turned on");
1874                 return -1;
1875         }
1876         rcu_assign_pointer(sbi->s_qf_names[qtype], NULL);
1877         synchronize_rcu();
1878         kfree(old_qname);
1879         return 1;
1880 }
1881 #endif
1882
1883 #define MOPT_SET        0x0001
1884 #define MOPT_CLEAR      0x0002
1885 #define MOPT_NOSUPPORT  0x0004
1886 #define MOPT_EXPLICIT   0x0008
1887 #define MOPT_CLEAR_ERR  0x0010
1888 #define MOPT_GTE0       0x0020
1889 #ifdef CONFIG_QUOTA
1890 #define MOPT_Q          0
1891 #define MOPT_QFMT       0x0040
1892 #else
1893 #define MOPT_Q          MOPT_NOSUPPORT
1894 #define MOPT_QFMT       MOPT_NOSUPPORT
1895 #endif
1896 #define MOPT_DATAJ      0x0080
1897 #define MOPT_NO_EXT2    0x0100
1898 #define MOPT_NO_EXT3    0x0200
1899 #define MOPT_EXT4_ONLY  (MOPT_NO_EXT2 | MOPT_NO_EXT3)
1900 #define MOPT_STRING     0x0400
1901 #define MOPT_SKIP       0x0800
1902 #define MOPT_2          0x1000
1903
1904 static const struct mount_opts {
1905         int     token;
1906         int     mount_opt;
1907         int     flags;
1908 } ext4_mount_opts[] = {
1909         {Opt_minix_df, EXT4_MOUNT_MINIX_DF, MOPT_SET},
1910         {Opt_bsd_df, EXT4_MOUNT_MINIX_DF, MOPT_CLEAR},
1911         {Opt_grpid, EXT4_MOUNT_GRPID, MOPT_SET},
1912         {Opt_nogrpid, EXT4_MOUNT_GRPID, MOPT_CLEAR},
1913         {Opt_block_validity, EXT4_MOUNT_BLOCK_VALIDITY, MOPT_SET},
1914         {Opt_noblock_validity, EXT4_MOUNT_BLOCK_VALIDITY, MOPT_CLEAR},
1915         {Opt_dioread_nolock, EXT4_MOUNT_DIOREAD_NOLOCK,
1916          MOPT_EXT4_ONLY | MOPT_SET},
1917         {Opt_dioread_lock, EXT4_MOUNT_DIOREAD_NOLOCK,
1918          MOPT_EXT4_ONLY | MOPT_CLEAR},
1919         {Opt_discard, EXT4_MOUNT_DISCARD, MOPT_SET},
1920         {Opt_nodiscard, EXT4_MOUNT_DISCARD, MOPT_CLEAR},
1921         {Opt_delalloc, EXT4_MOUNT_DELALLOC,
1922          MOPT_EXT4_ONLY | MOPT_SET | MOPT_EXPLICIT},
1923         {Opt_nodelalloc, EXT4_MOUNT_DELALLOC,
1924          MOPT_EXT4_ONLY | MOPT_CLEAR},
1925         {Opt_warn_on_error, EXT4_MOUNT_WARN_ON_ERROR, MOPT_SET},
1926         {Opt_nowarn_on_error, EXT4_MOUNT_WARN_ON_ERROR, MOPT_CLEAR},
1927         {Opt_nojournal_checksum, EXT4_MOUNT_JOURNAL_CHECKSUM,
1928          MOPT_EXT4_ONLY | MOPT_CLEAR},
1929         {Opt_journal_checksum, EXT4_MOUNT_JOURNAL_CHECKSUM,
1930          MOPT_EXT4_ONLY | MOPT_SET | MOPT_EXPLICIT},
1931         {Opt_journal_async_commit, (EXT4_MOUNT_JOURNAL_ASYNC_COMMIT |
1932                                     EXT4_MOUNT_JOURNAL_CHECKSUM),
1933          MOPT_EXT4_ONLY | MOPT_SET | MOPT_EXPLICIT},
1934         {Opt_noload, EXT4_MOUNT_NOLOAD, MOPT_NO_EXT2 | MOPT_SET},
1935         {Opt_err_panic, EXT4_MOUNT_ERRORS_PANIC, MOPT_SET | MOPT_CLEAR_ERR},
1936         {Opt_err_ro, EXT4_MOUNT_ERRORS_RO, MOPT_SET | MOPT_CLEAR_ERR},
1937         {Opt_err_cont, EXT4_MOUNT_ERRORS_CONT, MOPT_SET | MOPT_CLEAR_ERR},
1938         {Opt_data_err_abort, EXT4_MOUNT_DATA_ERR_ABORT,
1939          MOPT_NO_EXT2},
1940         {Opt_data_err_ignore, EXT4_MOUNT_DATA_ERR_ABORT,
1941          MOPT_NO_EXT2},
1942         {Opt_barrier, EXT4_MOUNT_BARRIER, MOPT_SET},
1943         {Opt_nobarrier, EXT4_MOUNT_BARRIER, MOPT_CLEAR},
1944         {Opt_noauto_da_alloc, EXT4_MOUNT_NO_AUTO_DA_ALLOC, MOPT_SET},
1945         {Opt_auto_da_alloc, EXT4_MOUNT_NO_AUTO_DA_ALLOC, MOPT_CLEAR},
1946         {Opt_noinit_itable, EXT4_MOUNT_INIT_INODE_TABLE, MOPT_CLEAR},
1947         {Opt_commit, 0, MOPT_GTE0},
1948         {Opt_max_batch_time, 0, MOPT_GTE0},
1949         {Opt_min_batch_time, 0, MOPT_GTE0},
1950         {Opt_inode_readahead_blks, 0, MOPT_GTE0},
1951         {Opt_init_itable, 0, MOPT_GTE0},
1952         {Opt_dax, EXT4_MOUNT_DAX_ALWAYS, MOPT_SET | MOPT_SKIP},
1953         {Opt_dax_always, EXT4_MOUNT_DAX_ALWAYS,
1954                 MOPT_EXT4_ONLY | MOPT_SET | MOPT_SKIP},
1955         {Opt_dax_inode, EXT4_MOUNT2_DAX_INODE,
1956                 MOPT_EXT4_ONLY | MOPT_SET | MOPT_SKIP},
1957         {Opt_dax_never, EXT4_MOUNT2_DAX_NEVER,
1958                 MOPT_EXT4_ONLY | MOPT_SET | MOPT_SKIP},
1959         {Opt_stripe, 0, MOPT_GTE0},
1960         {Opt_resuid, 0, MOPT_GTE0},
1961         {Opt_resgid, 0, MOPT_GTE0},
1962         {Opt_journal_dev, 0, MOPT_NO_EXT2 | MOPT_GTE0},
1963         {Opt_journal_path, 0, MOPT_NO_EXT2 | MOPT_STRING},
1964         {Opt_journal_ioprio, 0, MOPT_NO_EXT2 | MOPT_GTE0},
1965         {Opt_data_journal, EXT4_MOUNT_JOURNAL_DATA, MOPT_NO_EXT2 | MOPT_DATAJ},
1966         {Opt_data_ordered, EXT4_MOUNT_ORDERED_DATA, MOPT_NO_EXT2 | MOPT_DATAJ},
1967         {Opt_data_writeback, EXT4_MOUNT_WRITEBACK_DATA,
1968          MOPT_NO_EXT2 | MOPT_DATAJ},
1969         {Opt_user_xattr, EXT4_MOUNT_XATTR_USER, MOPT_SET},
1970         {Opt_nouser_xattr, EXT4_MOUNT_XATTR_USER, MOPT_CLEAR},
1971 #ifdef CONFIG_EXT4_FS_POSIX_ACL
1972         {Opt_acl, EXT4_MOUNT_POSIX_ACL, MOPT_SET},
1973         {Opt_noacl, EXT4_MOUNT_POSIX_ACL, MOPT_CLEAR},
1974 #else
1975         {Opt_acl, 0, MOPT_NOSUPPORT},
1976         {Opt_noacl, 0, MOPT_NOSUPPORT},
1977 #endif
1978         {Opt_nouid32, EXT4_MOUNT_NO_UID32, MOPT_SET},
1979         {Opt_debug, EXT4_MOUNT_DEBUG, MOPT_SET},
1980         {Opt_debug_want_extra_isize, 0, MOPT_GTE0},
1981         {Opt_quota, EXT4_MOUNT_QUOTA | EXT4_MOUNT_USRQUOTA, MOPT_SET | MOPT_Q},
1982         {Opt_usrquota, EXT4_MOUNT_QUOTA | EXT4_MOUNT_USRQUOTA,
1983                                                         MOPT_SET | MOPT_Q},
1984         {Opt_grpquota, EXT4_MOUNT_QUOTA | EXT4_MOUNT_GRPQUOTA,
1985                                                         MOPT_SET | MOPT_Q},
1986         {Opt_prjquota, EXT4_MOUNT_QUOTA | EXT4_MOUNT_PRJQUOTA,
1987                                                         MOPT_SET | MOPT_Q},
1988         {Opt_noquota, (EXT4_MOUNT_QUOTA | EXT4_MOUNT_USRQUOTA |
1989                        EXT4_MOUNT_GRPQUOTA | EXT4_MOUNT_PRJQUOTA),
1990                                                         MOPT_CLEAR | MOPT_Q},
1991         {Opt_usrjquota, 0, MOPT_Q | MOPT_STRING},
1992         {Opt_grpjquota, 0, MOPT_Q | MOPT_STRING},
1993         {Opt_offusrjquota, 0, MOPT_Q},
1994         {Opt_offgrpjquota, 0, MOPT_Q},
1995         {Opt_jqfmt_vfsold, QFMT_VFS_OLD, MOPT_QFMT},
1996         {Opt_jqfmt_vfsv0, QFMT_VFS_V0, MOPT_QFMT},
1997         {Opt_jqfmt_vfsv1, QFMT_VFS_V1, MOPT_QFMT},
1998         {Opt_max_dir_size_kb, 0, MOPT_GTE0},
1999         {Opt_test_dummy_encryption, 0, MOPT_STRING},
2000         {Opt_nombcache, EXT4_MOUNT_NO_MBCACHE, MOPT_SET},
2001         {Opt_no_prefetch_block_bitmaps, EXT4_MOUNT_NO_PREFETCH_BLOCK_BITMAPS,
2002          MOPT_SET},
2003         {Opt_mb_optimize_scan, EXT4_MOUNT2_MB_OPTIMIZE_SCAN, MOPT_GTE0},
2004 #ifdef CONFIG_EXT4_DEBUG
2005         {Opt_fc_debug_force, EXT4_MOUNT2_JOURNAL_FAST_COMMIT,
2006          MOPT_SET | MOPT_2 | MOPT_EXT4_ONLY},
2007         {Opt_fc_debug_max_replay, 0, MOPT_GTE0},
2008 #endif
2009         {Opt_err, 0, 0}
2010 };
2011
2012 #ifdef CONFIG_UNICODE
2013 static const struct ext4_sb_encodings {
2014         __u16 magic;
2015         char *name;
2016         char *version;
2017 } ext4_sb_encoding_map[] = {
2018         {EXT4_ENC_UTF8_12_1, "utf8", "12.1.0"},
2019 };
2020
2021 static int ext4_sb_read_encoding(const struct ext4_super_block *es,
2022                                  const struct ext4_sb_encodings **encoding,
2023                                  __u16 *flags)
2024 {
2025         __u16 magic = le16_to_cpu(es->s_encoding);
2026         int i;
2027
2028         for (i = 0; i < ARRAY_SIZE(ext4_sb_encoding_map); i++)
2029                 if (magic == ext4_sb_encoding_map[i].magic)
2030                         break;
2031
2032         if (i >= ARRAY_SIZE(ext4_sb_encoding_map))
2033                 return -EINVAL;
2034
2035         *encoding = &ext4_sb_encoding_map[i];
2036         *flags = le16_to_cpu(es->s_encoding_flags);
2037
2038         return 0;
2039 }
2040 #endif
2041
2042 static int ext4_set_test_dummy_encryption(struct super_block *sb,
2043                                           const char *opt,
2044                                           const substring_t *arg,
2045                                           bool is_remount)
2046 {
2047 #ifdef CONFIG_FS_ENCRYPTION
2048         struct ext4_sb_info *sbi = EXT4_SB(sb);
2049         int err;
2050
2051         /*
2052          * This mount option is just for testing, and it's not worthwhile to
2053          * implement the extra complexity (e.g. RCU protection) that would be
2054          * needed to allow it to be set or changed during remount.  We do allow
2055          * it to be specified during remount, but only if there is no change.
2056          */
2057         if (is_remount && !sbi->s_dummy_enc_policy.policy) {
2058                 ext4_msg(sb, KERN_WARNING,
2059                          "Can't set test_dummy_encryption on remount");
2060                 return -1;
2061         }
2062         err = fscrypt_set_test_dummy_encryption(sb, arg->from,
2063                                                 &sbi->s_dummy_enc_policy);
2064         if (err) {
2065                 if (err == -EEXIST)
2066                         ext4_msg(sb, KERN_WARNING,
2067                                  "Can't change test_dummy_encryption on remount");
2068                 else if (err == -EINVAL)
2069                         ext4_msg(sb, KERN_WARNING,
2070                                  "Value of option \"%s\" is unrecognized", opt);
2071                 else
2072                         ext4_msg(sb, KERN_WARNING,
2073                                  "Error processing option \"%s\" [%d]",
2074                                  opt, err);
2075                 return -1;
2076         }
2077         ext4_msg(sb, KERN_WARNING, "Test dummy encryption mode enabled");
2078 #else
2079         ext4_msg(sb, KERN_WARNING,
2080                  "Test dummy encryption mount option ignored");
2081 #endif
2082         return 1;
2083 }
2084
2085 struct ext4_parsed_options {
2086         unsigned long journal_devnum;
2087         unsigned int journal_ioprio;
2088         int mb_optimize_scan;
2089 };
2090
2091 static int handle_mount_opt(struct super_block *sb, char *opt, int token,
2092                             substring_t *args, struct ext4_parsed_options *parsed_opts,
2093                             int is_remount)
2094 {
2095         struct ext4_sb_info *sbi = EXT4_SB(sb);
2096         const struct mount_opts *m;
2097         kuid_t uid;
2098         kgid_t gid;
2099         int arg = 0;
2100
2101 #ifdef CONFIG_QUOTA
2102         if (token == Opt_usrjquota)
2103                 return set_qf_name(sb, USRQUOTA, &args[0]);
2104         else if (token == Opt_grpjquota)
2105                 return set_qf_name(sb, GRPQUOTA, &args[0]);
2106         else if (token == Opt_offusrjquota)
2107                 return clear_qf_name(sb, USRQUOTA);
2108         else if (token == Opt_offgrpjquota)
2109                 return clear_qf_name(sb, GRPQUOTA);
2110 #endif
2111         switch (token) {
2112         case Opt_noacl:
2113         case Opt_nouser_xattr:
2114                 ext4_msg(sb, KERN_WARNING, deprecated_msg, opt, "3.5");
2115                 break;
2116         case Opt_sb:
2117                 return 1;       /* handled by get_sb_block() */
2118         case Opt_removed:
2119                 ext4_msg(sb, KERN_WARNING, "Ignoring removed %s option", opt);
2120                 return 1;
2121         case Opt_abort:
2122                 ext4_set_mount_flag(sb, EXT4_MF_FS_ABORTED);
2123                 return 1;
2124         case Opt_i_version:
2125                 sb->s_flags |= SB_I_VERSION;
2126                 return 1;
2127         case Opt_lazytime:
2128                 sb->s_flags |= SB_LAZYTIME;
2129                 return 1;
2130         case Opt_nolazytime:
2131                 sb->s_flags &= ~SB_LAZYTIME;
2132                 return 1;
2133         case Opt_inlinecrypt:
2134 #ifdef CONFIG_FS_ENCRYPTION_INLINE_CRYPT
2135                 sb->s_flags |= SB_INLINECRYPT;
2136 #else
2137                 ext4_msg(sb, KERN_ERR, "inline encryption not supported");
2138 #endif
2139                 return 1;
2140         }
2141
2142         for (m = ext4_mount_opts; m->token != Opt_err; m++)
2143                 if (token == m->token)
2144                         break;
2145
2146         if (m->token == Opt_err) {
2147                 ext4_msg(sb, KERN_ERR, "Unrecognized mount option \"%s\" "
2148                          "or missing value", opt);
2149                 return -1;
2150         }
2151
2152         if ((m->flags & MOPT_NO_EXT2) && IS_EXT2_SB(sb)) {
2153                 ext4_msg(sb, KERN_ERR,
2154                          "Mount option \"%s\" incompatible with ext2", opt);
2155                 return -1;
2156         }
2157         if ((m->flags & MOPT_NO_EXT3) && IS_EXT3_SB(sb)) {
2158                 ext4_msg(sb, KERN_ERR,
2159                          "Mount option \"%s\" incompatible with ext3", opt);
2160                 return -1;
2161         }
2162
2163         if (args->from && !(m->flags & MOPT_STRING) && match_int(args, &arg))
2164                 return -1;
2165         if (args->from && (m->flags & MOPT_GTE0) && (arg < 0))
2166                 return -1;
2167         if (m->flags & MOPT_EXPLICIT) {
2168                 if (m->mount_opt & EXT4_MOUNT_DELALLOC) {
2169                         set_opt2(sb, EXPLICIT_DELALLOC);
2170                 } else if (m->mount_opt & EXT4_MOUNT_JOURNAL_CHECKSUM) {
2171                         set_opt2(sb, EXPLICIT_JOURNAL_CHECKSUM);
2172                 } else
2173                         return -1;
2174         }
2175         if (m->flags & MOPT_CLEAR_ERR)
2176                 clear_opt(sb, ERRORS_MASK);
2177         if (token == Opt_noquota && sb_any_quota_loaded(sb)) {
2178                 ext4_msg(sb, KERN_ERR, "Cannot change quota "
2179                          "options when quota turned on");
2180                 return -1;
2181         }
2182
2183         if (m->flags & MOPT_NOSUPPORT) {
2184                 ext4_msg(sb, KERN_ERR, "%s option not supported", opt);
2185         } else if (token == Opt_commit) {
2186                 if (arg == 0)
2187                         arg = JBD2_DEFAULT_MAX_COMMIT_AGE;
2188                 else if (arg > INT_MAX / HZ) {
2189                         ext4_msg(sb, KERN_ERR,
2190                                  "Invalid commit interval %d, "
2191                                  "must be smaller than %d",
2192                                  arg, INT_MAX / HZ);
2193                         return -1;
2194                 }
2195                 sbi->s_commit_interval = HZ * arg;
2196         } else if (token == Opt_debug_want_extra_isize) {
2197                 if ((arg & 1) ||
2198                     (arg < 4) ||
2199                     (arg > (sbi->s_inode_size - EXT4_GOOD_OLD_INODE_SIZE))) {
2200                         ext4_msg(sb, KERN_ERR,
2201                                  "Invalid want_extra_isize %d", arg);
2202                         return -1;
2203                 }
2204                 sbi->s_want_extra_isize = arg;
2205         } else if (token == Opt_max_batch_time) {
2206                 sbi->s_max_batch_time = arg;
2207         } else if (token == Opt_min_batch_time) {
2208                 sbi->s_min_batch_time = arg;
2209         } else if (token == Opt_inode_readahead_blks) {
2210                 if (arg && (arg > (1 << 30) || !is_power_of_2(arg))) {
2211                         ext4_msg(sb, KERN_ERR,
2212                                  "EXT4-fs: inode_readahead_blks must be "
2213                                  "0 or a power of 2 smaller than 2^31");
2214                         return -1;
2215                 }
2216                 sbi->s_inode_readahead_blks = arg;
2217         } else if (token == Opt_init_itable) {
2218                 set_opt(sb, INIT_INODE_TABLE);
2219                 if (!args->from)
2220                         arg = EXT4_DEF_LI_WAIT_MULT;
2221                 sbi->s_li_wait_mult = arg;
2222         } else if (token == Opt_max_dir_size_kb) {
2223                 sbi->s_max_dir_size_kb = arg;
2224 #ifdef CONFIG_EXT4_DEBUG
2225         } else if (token == Opt_fc_debug_max_replay) {
2226                 sbi->s_fc_debug_max_replay = arg;
2227 #endif
2228         } else if (token == Opt_stripe) {
2229                 sbi->s_stripe = arg;
2230         } else if (token == Opt_resuid) {
2231                 uid = make_kuid(current_user_ns(), arg);
2232                 if (!uid_valid(uid)) {
2233                         ext4_msg(sb, KERN_ERR, "Invalid uid value %d", arg);
2234                         return -1;
2235                 }
2236                 sbi->s_resuid = uid;
2237         } else if (token == Opt_resgid) {
2238                 gid = make_kgid(current_user_ns(), arg);
2239                 if (!gid_valid(gid)) {
2240                         ext4_msg(sb, KERN_ERR, "Invalid gid value %d", arg);
2241                         return -1;
2242                 }
2243                 sbi->s_resgid = gid;
2244         } else if (token == Opt_journal_dev) {
2245                 if (is_remount) {
2246                         ext4_msg(sb, KERN_ERR,
2247                                  "Cannot specify journal on remount");
2248                         return -1;
2249                 }
2250                 parsed_opts->journal_devnum = arg;
2251         } else if (token == Opt_journal_path) {
2252                 char *journal_path;
2253                 struct inode *journal_inode;
2254                 struct path path;
2255                 int error;
2256
2257                 if (is_remount) {
2258                         ext4_msg(sb, KERN_ERR,
2259                                  "Cannot specify journal on remount");
2260                         return -1;
2261                 }
2262                 journal_path = match_strdup(&args[0]);
2263                 if (!journal_path) {
2264                         ext4_msg(sb, KERN_ERR, "error: could not dup "
2265                                 "journal device string");
2266                         return -1;
2267                 }
2268
2269                 error = kern_path(journal_path, LOOKUP_FOLLOW, &path);
2270                 if (error) {
2271                         ext4_msg(sb, KERN_ERR, "error: could not find "
2272                                 "journal device path: error %d", error);
2273                         kfree(journal_path);
2274                         return -1;
2275                 }
2276
2277                 journal_inode = d_inode(path.dentry);
2278                 if (!S_ISBLK(journal_inode->i_mode)) {
2279                         ext4_msg(sb, KERN_ERR, "error: journal path %s "
2280                                 "is not a block device", journal_path);
2281                         path_put(&path);
2282                         kfree(journal_path);
2283                         return -1;
2284                 }
2285
2286                 parsed_opts->journal_devnum = new_encode_dev(journal_inode->i_rdev);
2287                 path_put(&path);
2288                 kfree(journal_path);
2289         } else if (token == Opt_journal_ioprio) {
2290                 if (arg > 7) {
2291                         ext4_msg(sb, KERN_ERR, "Invalid journal IO priority"
2292                                  " (must be 0-7)");
2293                         return -1;
2294                 }
2295                 parsed_opts->journal_ioprio =
2296                         IOPRIO_PRIO_VALUE(IOPRIO_CLASS_BE, arg);
2297         } else if (token == Opt_test_dummy_encryption) {
2298                 return ext4_set_test_dummy_encryption(sb, opt, &args[0],
2299                                                       is_remount);
2300         } else if (m->flags & MOPT_DATAJ) {
2301                 if (is_remount) {
2302                         if (!sbi->s_journal)
2303                                 ext4_msg(sb, KERN_WARNING, "Remounting file system with no journal so ignoring journalled data option");
2304                         else if (test_opt(sb, DATA_FLAGS) != m->mount_opt) {
2305                                 ext4_msg(sb, KERN_ERR,
2306                                          "Cannot change data mode on remount");
2307                                 return -1;
2308                         }
2309                 } else {
2310                         clear_opt(sb, DATA_FLAGS);
2311                         sbi->s_mount_opt |= m->mount_opt;
2312                 }
2313 #ifdef CONFIG_QUOTA
2314         } else if (m->flags & MOPT_QFMT) {
2315                 if (sb_any_quota_loaded(sb) &&
2316                     sbi->s_jquota_fmt != m->mount_opt) {
2317                         ext4_msg(sb, KERN_ERR, "Cannot change journaled "
2318                                  "quota options when quota turned on");
2319                         return -1;
2320                 }
2321                 if (ext4_has_feature_quota(sb)) {
2322                         ext4_msg(sb, KERN_INFO,
2323                                  "Quota format mount options ignored "
2324                                  "when QUOTA feature is enabled");
2325                         return 1;
2326                 }
2327                 sbi->s_jquota_fmt = m->mount_opt;
2328 #endif
2329         } else if (token == Opt_dax || token == Opt_dax_always ||
2330                    token == Opt_dax_inode || token == Opt_dax_never) {
2331 #ifdef CONFIG_FS_DAX
2332                 switch (token) {
2333                 case Opt_dax:
2334                 case Opt_dax_always:
2335                         if (is_remount &&
2336                             (!(sbi->s_mount_opt & EXT4_MOUNT_DAX_ALWAYS) ||
2337                              (sbi->s_mount_opt2 & EXT4_MOUNT2_DAX_NEVER))) {
2338                         fail_dax_change_remount:
2339                                 ext4_msg(sb, KERN_ERR, "can't change "
2340                                          "dax mount option while remounting");
2341                                 return -1;
2342                         }
2343                         if (is_remount &&
2344                             (test_opt(sb, DATA_FLAGS) ==
2345                              EXT4_MOUNT_JOURNAL_DATA)) {
2346                                     ext4_msg(sb, KERN_ERR, "can't mount with "
2347                                              "both data=journal and dax");
2348                                     return -1;
2349                         }
2350                         ext4_msg(sb, KERN_WARNING,
2351                                 "DAX enabled. Warning: EXPERIMENTAL, use at your own risk");
2352                         sbi->s_mount_opt |= EXT4_MOUNT_DAX_ALWAYS;
2353                         sbi->s_mount_opt2 &= ~EXT4_MOUNT2_DAX_NEVER;
2354                         break;
2355                 case Opt_dax_never:
2356                         if (is_remount &&
2357                             (!(sbi->s_mount_opt2 & EXT4_MOUNT2_DAX_NEVER) ||
2358                              (sbi->s_mount_opt & EXT4_MOUNT_DAX_ALWAYS)))
2359                                 goto fail_dax_change_remount;
2360                         sbi->s_mount_opt2 |= EXT4_MOUNT2_DAX_NEVER;
2361                         sbi->s_mount_opt &= ~EXT4_MOUNT_DAX_ALWAYS;
2362                         break;
2363                 case Opt_dax_inode:
2364                         if (is_remount &&
2365                             ((sbi->s_mount_opt & EXT4_MOUNT_DAX_ALWAYS) ||
2366                              (sbi->s_mount_opt2 & EXT4_MOUNT2_DAX_NEVER) ||
2367                              !(sbi->s_mount_opt2 & EXT4_MOUNT2_DAX_INODE)))
2368                                 goto fail_dax_change_remount;
2369                         sbi->s_mount_opt &= ~EXT4_MOUNT_DAX_ALWAYS;
2370                         sbi->s_mount_opt2 &= ~EXT4_MOUNT2_DAX_NEVER;
2371                         /* Strictly for printing options */
2372                         sbi->s_mount_opt2 |= EXT4_MOUNT2_DAX_INODE;
2373                         break;
2374                 }
2375 #else
2376                 ext4_msg(sb, KERN_INFO, "dax option not supported");
2377                 sbi->s_mount_opt2 |= EXT4_MOUNT2_DAX_NEVER;
2378                 sbi->s_mount_opt &= ~EXT4_MOUNT_DAX_ALWAYS;
2379                 return -1;
2380 #endif
2381         } else if (token == Opt_data_err_abort) {
2382                 sbi->s_mount_opt |= m->mount_opt;
2383         } else if (token == Opt_data_err_ignore) {
2384                 sbi->s_mount_opt &= ~m->mount_opt;
2385         } else if (token == Opt_mb_optimize_scan) {
2386                 if (arg != 0 && arg != 1) {
2387                         ext4_msg(sb, KERN_WARNING,
2388                                  "mb_optimize_scan should be set to 0 or 1.");
2389                         return -1;
2390                 }
2391                 parsed_opts->mb_optimize_scan = arg;
2392         } else {
2393                 if (!args->from)
2394                         arg = 1;
2395                 if (m->flags & MOPT_CLEAR)
2396                         arg = !arg;
2397                 else if (unlikely(!(m->flags & MOPT_SET))) {
2398                         ext4_msg(sb, KERN_WARNING,
2399                                  "buggy handling of option %s", opt);
2400                         WARN_ON(1);
2401                         return -1;
2402                 }
2403                 if (m->flags & MOPT_2) {
2404                         if (arg != 0)
2405                                 sbi->s_mount_opt2 |= m->mount_opt;
2406                         else
2407                                 sbi->s_mount_opt2 &= ~m->mount_opt;
2408                 } else {
2409                         if (arg != 0)
2410                                 sbi->s_mount_opt |= m->mount_opt;
2411                         else
2412                                 sbi->s_mount_opt &= ~m->mount_opt;
2413                 }
2414         }
2415         return 1;
2416 }
2417
2418 static int parse_options(char *options, struct super_block *sb,
2419                          struct ext4_parsed_options *ret_opts,
2420                          int is_remount)
2421 {
2422         struct ext4_sb_info __maybe_unused *sbi = EXT4_SB(sb);
2423         char *p, __maybe_unused *usr_qf_name, __maybe_unused *grp_qf_name;
2424         substring_t args[MAX_OPT_ARGS];
2425         int token;
2426
2427         if (!options)
2428                 return 1;
2429
2430         while ((p = strsep(&options, ",")) != NULL) {
2431                 if (!*p)
2432                         continue;
2433                 /*
2434                  * Initialize args struct so we know whether arg was
2435                  * found; some options take optional arguments.
2436                  */
2437                 args[0].to = args[0].from = NULL;
2438                 token = match_token(p, tokens, args);
2439                 if (handle_mount_opt(sb, p, token, args, ret_opts,
2440                                      is_remount) < 0)
2441                         return 0;
2442         }
2443 #ifdef CONFIG_QUOTA
2444         /*
2445          * We do the test below only for project quotas. 'usrquota' and
2446          * 'grpquota' mount options are allowed even without quota feature
2447          * to support legacy quotas in quota files.
2448          */
2449         if (test_opt(sb, PRJQUOTA) && !ext4_has_feature_project(sb)) {
2450                 ext4_msg(sb, KERN_ERR, "Project quota feature not enabled. "
2451                          "Cannot enable project quota enforcement.");
2452                 return 0;
2453         }
2454         usr_qf_name = get_qf_name(sb, sbi, USRQUOTA);
2455         grp_qf_name = get_qf_name(sb, sbi, GRPQUOTA);
2456         if (usr_qf_name || grp_qf_name) {
2457                 if (test_opt(sb, USRQUOTA) && usr_qf_name)
2458                         clear_opt(sb, USRQUOTA);
2459
2460                 if (test_opt(sb, GRPQUOTA) && grp_qf_name)
2461                         clear_opt(sb, GRPQUOTA);
2462
2463                 if (test_opt(sb, GRPQUOTA) || test_opt(sb, USRQUOTA)) {
2464                         ext4_msg(sb, KERN_ERR, "old and new quota "
2465                                         "format mixing");
2466                         return 0;
2467                 }
2468
2469                 if (!sbi->s_jquota_fmt) {
2470                         ext4_msg(sb, KERN_ERR, "journaled quota format "
2471                                         "not specified");
2472                         return 0;
2473                 }
2474         }
2475 #endif
2476         if (test_opt(sb, DIOREAD_NOLOCK)) {
2477                 int blocksize =
2478                         BLOCK_SIZE << le32_to_cpu(sbi->s_es->s_log_block_size);
2479                 if (blocksize < PAGE_SIZE)
2480                         ext4_msg(sb, KERN_WARNING, "Warning: mounting with an "
2481                                  "experimental mount option 'dioread_nolock' "
2482                                  "for blocksize < PAGE_SIZE");
2483         }
2484         return 1;
2485 }
2486
2487 static inline void ext4_show_quota_options(struct seq_file *seq,
2488                                            struct super_block *sb)
2489 {
2490 #if defined(CONFIG_QUOTA)
2491         struct ext4_sb_info *sbi = EXT4_SB(sb);
2492         char *usr_qf_name, *grp_qf_name;
2493
2494         if (sbi->s_jquota_fmt) {
2495                 char *fmtname = "";
2496
2497                 switch (sbi->s_jquota_fmt) {
2498                 case QFMT_VFS_OLD:
2499                         fmtname = "vfsold";
2500                         break;
2501                 case QFMT_VFS_V0:
2502                         fmtname = "vfsv0";
2503                         break;
2504                 case QFMT_VFS_V1:
2505                         fmtname = "vfsv1";
2506                         break;
2507                 }
2508                 seq_printf(seq, ",jqfmt=%s", fmtname);
2509         }
2510
2511         rcu_read_lock();
2512         usr_qf_name = rcu_dereference(sbi->s_qf_names[USRQUOTA]);
2513         grp_qf_name = rcu_dereference(sbi->s_qf_names[GRPQUOTA]);
2514         if (usr_qf_name)
2515                 seq_show_option(seq, "usrjquota", usr_qf_name);
2516         if (grp_qf_name)
2517                 seq_show_option(seq, "grpjquota", grp_qf_name);
2518         rcu_read_unlock();
2519 #endif
2520 }
2521
2522 static const char *token2str(int token)
2523 {
2524         const struct match_token *t;
2525
2526         for (t = tokens; t->token != Opt_err; t++)
2527                 if (t->token == token && !strchr(t->pattern, '='))
2528                         break;
2529         return t->pattern;
2530 }
2531
2532 /*
2533  * Show an option if
2534  *  - it's set to a non-default value OR
2535  *  - if the per-sb default is different from the global default
2536  */
2537 static int _ext4_show_options(struct seq_file *seq, struct super_block *sb,
2538                               int nodefs)
2539 {
2540         struct ext4_sb_info *sbi = EXT4_SB(sb);
2541         struct ext4_super_block *es = sbi->s_es;
2542         int def_errors, def_mount_opt = sbi->s_def_mount_opt;
2543         const struct mount_opts *m;
2544         char sep = nodefs ? '\n' : ',';
2545
2546 #define SEQ_OPTS_PUTS(str) seq_printf(seq, "%c" str, sep)
2547 #define SEQ_OPTS_PRINT(str, arg) seq_printf(seq, "%c" str, sep, arg)
2548
2549         if (sbi->s_sb_block != 1)
2550                 SEQ_OPTS_PRINT("sb=%llu", sbi->s_sb_block);
2551
2552         for (m = ext4_mount_opts; m->token != Opt_err; m++) {
2553                 int want_set = m->flags & MOPT_SET;
2554                 if (((m->flags & (MOPT_SET|MOPT_CLEAR)) == 0) ||
2555                     (m->flags & MOPT_CLEAR_ERR) || m->flags & MOPT_SKIP)
2556                         continue;
2557                 if (!nodefs && !(m->mount_opt & (sbi->s_mount_opt ^ def_mount_opt)))
2558                         continue; /* skip if same as the default */
2559                 if ((want_set &&
2560                      (sbi->s_mount_opt & m->mount_opt) != m->mount_opt) ||
2561                     (!want_set && (sbi->s_mount_opt & m->mount_opt)))
2562                         continue; /* select Opt_noFoo vs Opt_Foo */
2563                 SEQ_OPTS_PRINT("%s", token2str(m->token));
2564         }
2565
2566         if (nodefs || !uid_eq(sbi->s_resuid, make_kuid(&init_user_ns, EXT4_DEF_RESUID)) ||
2567             le16_to_cpu(es->s_def_resuid) != EXT4_DEF_RESUID)
2568                 SEQ_OPTS_PRINT("resuid=%u",
2569                                 from_kuid_munged(&init_user_ns, sbi->s_resuid));
2570         if (nodefs || !gid_eq(sbi->s_resgid, make_kgid(&init_user_ns, EXT4_DEF_RESGID)) ||
2571             le16_to_cpu(es->s_def_resgid) != EXT4_DEF_RESGID)
2572                 SEQ_OPTS_PRINT("resgid=%u",
2573                                 from_kgid_munged(&init_user_ns, sbi->s_resgid));
2574         def_errors = nodefs ? -1 : le16_to_cpu(es->s_errors);
2575         if (test_opt(sb, ERRORS_RO) && def_errors != EXT4_ERRORS_RO)
2576                 SEQ_OPTS_PUTS("errors=remount-ro");
2577         if (test_opt(sb, ERRORS_CONT) && def_errors != EXT4_ERRORS_CONTINUE)
2578                 SEQ_OPTS_PUTS("errors=continue");
2579         if (test_opt(sb, ERRORS_PANIC) && def_errors != EXT4_ERRORS_PANIC)
2580                 SEQ_OPTS_PUTS("errors=panic");
2581         if (nodefs || sbi->s_commit_interval != JBD2_DEFAULT_MAX_COMMIT_AGE*HZ)
2582                 SEQ_OPTS_PRINT("commit=%lu", sbi->s_commit_interval / HZ);
2583         if (nodefs || sbi->s_min_batch_time != EXT4_DEF_MIN_BATCH_TIME)
2584                 SEQ_OPTS_PRINT("min_batch_time=%u", sbi->s_min_batch_time);
2585         if (nodefs || sbi->s_max_batch_time != EXT4_DEF_MAX_BATCH_TIME)
2586                 SEQ_OPTS_PRINT("max_batch_time=%u", sbi->s_max_batch_time);
2587         if (sb->s_flags & SB_I_VERSION)
2588                 SEQ_OPTS_PUTS("i_version");
2589         if (nodefs || sbi->s_stripe)
2590                 SEQ_OPTS_PRINT("stripe=%lu", sbi->s_stripe);
2591         if (nodefs || EXT4_MOUNT_DATA_FLAGS &
2592                         (sbi->s_mount_opt ^ def_mount_opt)) {
2593                 if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA)
2594                         SEQ_OPTS_PUTS("data=journal");
2595                 else if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_ORDERED_DATA)
2596                         SEQ_OPTS_PUTS("data=ordered");
2597                 else if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_WRITEBACK_DATA)
2598                         SEQ_OPTS_PUTS("data=writeback");
2599         }
2600         if (nodefs ||
2601             sbi->s_inode_readahead_blks != EXT4_DEF_INODE_READAHEAD_BLKS)
2602                 SEQ_OPTS_PRINT("inode_readahead_blks=%u",
2603                                sbi->s_inode_readahead_blks);
2604
2605         if (test_opt(sb, INIT_INODE_TABLE) && (nodefs ||
2606                        (sbi->s_li_wait_mult != EXT4_DEF_LI_WAIT_MULT)))
2607                 SEQ_OPTS_PRINT("init_itable=%u", sbi->s_li_wait_mult);
2608         if (nodefs || sbi->s_max_dir_size_kb)
2609                 SEQ_OPTS_PRINT("max_dir_size_kb=%u", sbi->s_max_dir_size_kb);
2610         if (test_opt(sb, DATA_ERR_ABORT))
2611                 SEQ_OPTS_PUTS("data_err=abort");
2612
2613         fscrypt_show_test_dummy_encryption(seq, sep, sb);
2614
2615         if (sb->s_flags & SB_INLINECRYPT)
2616                 SEQ_OPTS_PUTS("inlinecrypt");
2617
2618         if (test_opt(sb, DAX_ALWAYS)) {
2619                 if (IS_EXT2_SB(sb))
2620                         SEQ_OPTS_PUTS("dax");
2621                 else
2622                         SEQ_OPTS_PUTS("dax=always");
2623         } else if (test_opt2(sb, DAX_NEVER)) {
2624                 SEQ_OPTS_PUTS("dax=never");
2625         } else if (test_opt2(sb, DAX_INODE)) {
2626                 SEQ_OPTS_PUTS("dax=inode");
2627         }
2628         ext4_show_quota_options(seq, sb);
2629         return 0;
2630 }
2631
2632 static int ext4_show_options(struct seq_file *seq, struct dentry *root)
2633 {
2634         return _ext4_show_options(seq, root->d_sb, 0);
2635 }
2636
2637 int ext4_seq_options_show(struct seq_file *seq, void *offset)
2638 {
2639         struct super_block *sb = seq->private;
2640         int rc;
2641
2642         seq_puts(seq, sb_rdonly(sb) ? "ro" : "rw");
2643         rc = _ext4_show_options(seq, sb, 1);
2644         seq_puts(seq, "\n");
2645         return rc;
2646 }
2647
2648 static int ext4_setup_super(struct super_block *sb, struct ext4_super_block *es,
2649                             int read_only)
2650 {
2651         struct ext4_sb_info *sbi = EXT4_SB(sb);
2652         int err = 0;
2653
2654         if (le32_to_cpu(es->s_rev_level) > EXT4_MAX_SUPP_REV) {
2655                 ext4_msg(sb, KERN_ERR, "revision level too high, "
2656                          "forcing read-only mode");
2657                 err = -EROFS;
2658                 goto done;
2659         }
2660         if (read_only)
2661                 goto done;
2662         if (!(sbi->s_mount_state & EXT4_VALID_FS))
2663                 ext4_msg(sb, KERN_WARNING, "warning: mounting unchecked fs, "
2664                          "running e2fsck is recommended");
2665         else if (sbi->s_mount_state & EXT4_ERROR_FS)
2666                 ext4_msg(sb, KERN_WARNING,
2667                          "warning: mounting fs with errors, "
2668                          "running e2fsck is recommended");
2669         else if ((__s16) le16_to_cpu(es->s_max_mnt_count) > 0 &&
2670                  le16_to_cpu(es->s_mnt_count) >=
2671                  (unsigned short) (__s16) le16_to_cpu(es->s_max_mnt_count))
2672                 ext4_msg(sb, KERN_WARNING,
2673                          "warning: maximal mount count reached, "
2674                          "running e2fsck is recommended");
2675         else if (le32_to_cpu(es->s_checkinterval) &&
2676                  (ext4_get_tstamp(es, s_lastcheck) +
2677                   le32_to_cpu(es->s_checkinterval) <= ktime_get_real_seconds()))
2678                 ext4_msg(sb, KERN_WARNING,
2679                          "warning: checktime reached, "
2680                          "running e2fsck is recommended");
2681         if (!sbi->s_journal)
2682                 es->s_state &= cpu_to_le16(~EXT4_VALID_FS);
2683         if (!(__s16) le16_to_cpu(es->s_max_mnt_count))
2684                 es->s_max_mnt_count = cpu_to_le16(EXT4_DFL_MAX_MNT_COUNT);
2685         le16_add_cpu(&es->s_mnt_count, 1);
2686         ext4_update_tstamp(es, s_mtime);
2687         if (sbi->s_journal)
2688                 ext4_set_feature_journal_needs_recovery(sb);
2689
2690         err = ext4_commit_super(sb);
2691 done:
2692         if (test_opt(sb, DEBUG))
2693                 printk(KERN_INFO "[EXT4 FS bs=%lu, gc=%u, "
2694                                 "bpg=%lu, ipg=%lu, mo=%04x, mo2=%04x]\n",
2695                         sb->s_blocksize,
2696                         sbi->s_groups_count,
2697                         EXT4_BLOCKS_PER_GROUP(sb),
2698                         EXT4_INODES_PER_GROUP(sb),
2699                         sbi->s_mount_opt, sbi->s_mount_opt2);
2700
2701         cleancache_init_fs(sb);
2702         return err;
2703 }
2704
2705 int ext4_alloc_flex_bg_array(struct super_block *sb, ext4_group_t ngroup)
2706 {
2707         struct ext4_sb_info *sbi = EXT4_SB(sb);
2708         struct flex_groups **old_groups, **new_groups;
2709         int size, i, j;
2710
2711         if (!sbi->s_log_groups_per_flex)
2712                 return 0;
2713
2714         size = ext4_flex_group(sbi, ngroup - 1) + 1;
2715         if (size <= sbi->s_flex_groups_allocated)
2716                 return 0;
2717
2718         new_groups = kvzalloc(roundup_pow_of_two(size *
2719                               sizeof(*sbi->s_flex_groups)), GFP_KERNEL);
2720         if (!new_groups) {
2721                 ext4_msg(sb, KERN_ERR,
2722                          "not enough memory for %d flex group pointers", size);
2723                 return -ENOMEM;
2724         }
2725         for (i = sbi->s_flex_groups_allocated; i < size; i++) {
2726                 new_groups[i] = kvzalloc(roundup_pow_of_two(
2727                                          sizeof(struct flex_groups)),
2728                                          GFP_KERNEL);
2729                 if (!new_groups[i]) {
2730                         for (j = sbi->s_flex_groups_allocated; j < i; j++)
2731                                 kvfree(new_groups[j]);
2732                         kvfree(new_groups);
2733                         ext4_msg(sb, KERN_ERR,
2734                                  "not enough memory for %d flex groups", size);
2735                         return -ENOMEM;
2736                 }
2737         }
2738         rcu_read_lock();
2739         old_groups = rcu_dereference(sbi->s_flex_groups);
2740         if (old_groups)
2741                 memcpy(new_groups, old_groups,
2742                        (sbi->s_flex_groups_allocated *
2743                         sizeof(struct flex_groups *)));
2744         rcu_read_unlock();
2745         rcu_assign_pointer(sbi->s_flex_groups, new_groups);
2746         sbi->s_flex_groups_allocated = size;
2747         if (old_groups)
2748                 ext4_kvfree_array_rcu(old_groups);
2749         return 0;
2750 }
2751
2752 static int ext4_fill_flex_info(struct super_block *sb)
2753 {
2754         struct ext4_sb_info *sbi = EXT4_SB(sb);
2755         struct ext4_group_desc *gdp = NULL;
2756         struct flex_groups *fg;
2757         ext4_group_t flex_group;
2758         int i, err;
2759
2760         sbi->s_log_groups_per_flex = sbi->s_es->s_log_groups_per_flex;
2761         if (sbi->s_log_groups_per_flex < 1 || sbi->s_log_groups_per_flex > 31) {
2762                 sbi->s_log_groups_per_flex = 0;
2763                 return 1;
2764         }
2765
2766         err = ext4_alloc_flex_bg_array(sb, sbi->s_groups_count);
2767         if (err)
2768                 goto failed;
2769
2770         for (i = 0; i < sbi->s_groups_count; i++) {
2771                 gdp = ext4_get_group_desc(sb, i, NULL);
2772
2773                 flex_group = ext4_flex_group(sbi, i);
2774                 fg = sbi_array_rcu_deref(sbi, s_flex_groups, flex_group);
2775                 atomic_add(ext4_free_inodes_count(sb, gdp), &fg->free_inodes);
2776                 atomic64_add(ext4_free_group_clusters(sb, gdp),
2777                              &fg->free_clusters);
2778                 atomic_add(ext4_used_dirs_count(sb, gdp), &fg->used_dirs);
2779         }
2780
2781         return 1;
2782 failed:
2783         return 0;
2784 }
2785
2786 static __le16 ext4_group_desc_csum(struct super_block *sb, __u32 block_group,
2787                                    struct ext4_group_desc *gdp)
2788 {
2789         int offset = offsetof(struct ext4_group_desc, bg_checksum);
2790         __u16 crc = 0;
2791         __le32 le_group = cpu_to_le32(block_group);
2792         struct ext4_sb_info *sbi = EXT4_SB(sb);
2793
2794         if (ext4_has_metadata_csum(sbi->s_sb)) {
2795                 /* Use new metadata_csum algorithm */
2796                 __u32 csum32;
2797                 __u16 dummy_csum = 0;
2798
2799                 csum32 = ext4_chksum(sbi, sbi->s_csum_seed, (__u8 *)&le_group,
2800                                      sizeof(le_group));
2801                 csum32 = ext4_chksum(sbi, csum32, (__u8 *)gdp, offset);
2802                 csum32 = ext4_chksum(sbi, csum32, (__u8 *)&dummy_csum,
2803                                      sizeof(dummy_csum));
2804                 offset += sizeof(dummy_csum);
2805                 if (offset < sbi->s_desc_size)
2806                         csum32 = ext4_chksum(sbi, csum32, (__u8 *)gdp + offset,
2807                                              sbi->s_desc_size - offset);
2808
2809                 crc = csum32 & 0xFFFF;
2810                 goto out;
2811         }
2812
2813         /* old crc16 code */
2814         if (!ext4_has_feature_gdt_csum(sb))
2815                 return 0;
2816
2817         crc = crc16(~0, sbi->s_es->s_uuid, sizeof(sbi->s_es->s_uuid));
2818         crc = crc16(crc, (__u8 *)&le_group, sizeof(le_group));
2819         crc = crc16(crc, (__u8 *)gdp, offset);
2820         offset += sizeof(gdp->bg_checksum); /* skip checksum */
2821         /* for checksum of struct ext4_group_desc do the rest...*/
2822         if (ext4_has_feature_64bit(sb) &&
2823             offset < le16_to_cpu(sbi->s_es->s_desc_size))
2824                 crc = crc16(crc, (__u8 *)gdp + offset,
2825                             le16_to_cpu(sbi->s_es->s_desc_size) -
2826                                 offset);
2827
2828 out:
2829         return cpu_to_le16(crc);
2830 }
2831
2832 int ext4_group_desc_csum_verify(struct super_block *sb, __u32 block_group,
2833                                 struct ext4_group_desc *gdp)
2834 {
2835         if (ext4_has_group_desc_csum(sb) &&
2836             (gdp->bg_checksum != ext4_group_desc_csum(sb, block_group, gdp)))
2837                 return 0;
2838
2839         return 1;
2840 }
2841
2842 void ext4_group_desc_csum_set(struct super_block *sb, __u32 block_group,
2843                               struct ext4_group_desc *gdp)
2844 {
2845         if (!ext4_has_group_desc_csum(sb))
2846                 return;
2847         gdp->bg_checksum = ext4_group_desc_csum(sb, block_group, gdp);
2848 }
2849
2850 /* Called at mount-time, super-block is locked */
2851 static int ext4_check_descriptors(struct super_block *sb,
2852                                   ext4_fsblk_t sb_block,
2853                                   ext4_group_t *first_not_zeroed)
2854 {
2855         struct ext4_sb_info *sbi = EXT4_SB(sb);
2856         ext4_fsblk_t first_block = le32_to_cpu(sbi->s_es->s_first_data_block);
2857         ext4_fsblk_t last_block;
2858         ext4_fsblk_t last_bg_block = sb_block + ext4_bg_num_gdb(sb, 0);
2859         ext4_fsblk_t block_bitmap;
2860         ext4_fsblk_t inode_bitmap;
2861         ext4_fsblk_t inode_table;
2862         int flexbg_flag = 0;
2863         ext4_group_t i, grp = sbi->s_groups_count;
2864
2865         if (ext4_has_feature_flex_bg(sb))
2866                 flexbg_flag = 1;
2867
2868         ext4_debug("Checking group descriptors");
2869
2870         for (i = 0; i < sbi->s_groups_count; i++) {
2871                 struct ext4_group_desc *gdp = ext4_get_group_desc(sb, i, NULL);
2872
2873                 if (i == sbi->s_groups_count - 1 || flexbg_flag)
2874                         last_block = ext4_blocks_count(sbi->s_es) - 1;
2875                 else
2876                         last_block = first_block +
2877                                 (EXT4_BLOCKS_PER_GROUP(sb) - 1);
2878
2879                 if ((grp == sbi->s_groups_count) &&
2880                    !(gdp->bg_flags & cpu_to_le16(EXT4_BG_INODE_ZEROED)))
2881                         grp = i;
2882
2883                 block_bitmap = ext4_block_bitmap(sb, gdp);
2884                 if (block_bitmap == sb_block) {
2885                         ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: "
2886                                  "Block bitmap for group %u overlaps "
2887                                  "superblock", i);
2888                         if (!sb_rdonly(sb))
2889                                 return 0;
2890                 }
2891                 if (block_bitmap >= sb_block + 1 &&
2892                     block_bitmap <= last_bg_block) {
2893                         ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: "
2894                                  "Block bitmap for group %u overlaps "
2895                                  "block group descriptors", i);
2896                         if (!sb_rdonly(sb))
2897                                 return 0;
2898                 }
2899                 if (block_bitmap < first_block || block_bitmap > last_block) {
2900                         ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: "
2901                                "Block bitmap for group %u not in group "
2902                                "(block %llu)!", i, block_bitmap);
2903                         return 0;
2904                 }
2905                 inode_bitmap = ext4_inode_bitmap(sb, gdp);
2906                 if (inode_bitmap == sb_block) {
2907                         ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: "
2908                                  "Inode bitmap for group %u overlaps "
2909                                  "superblock", i);
2910                         if (!sb_rdonly(sb))
2911                                 return 0;
2912                 }
2913                 if (inode_bitmap >= sb_block + 1 &&
2914                     inode_bitmap <= last_bg_block) {
2915                         ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: "
2916                                  "Inode bitmap for group %u overlaps "
2917                                  "block group descriptors", i);
2918                         if (!sb_rdonly(sb))
2919                                 return 0;
2920                 }
2921                 if (inode_bitmap < first_block || inode_bitmap > last_block) {
2922                         ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: "
2923                                "Inode bitmap for group %u not in group "
2924                                "(block %llu)!", i, inode_bitmap);
2925                         return 0;
2926                 }
2927                 inode_table = ext4_inode_table(sb, gdp);
2928                 if (inode_table == sb_block) {
2929                         ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: "
2930                                  "Inode table for group %u overlaps "
2931                                  "superblock", i);
2932                         if (!sb_rdonly(sb))
2933                                 return 0;
2934                 }
2935                 if (inode_table >= sb_block + 1 &&
2936                     inode_table <= last_bg_block) {
2937                         ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: "
2938                                  "Inode table for group %u overlaps "
2939                                  "block group descriptors", i);
2940                         if (!sb_rdonly(sb))
2941                                 return 0;
2942                 }
2943                 if (inode_table < first_block ||
2944                     inode_table + sbi->s_itb_per_group - 1 > last_block) {
2945                         ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: "
2946                                "Inode table for group %u not in group "
2947                                "(block %llu)!", i, inode_table);
2948                         return 0;
2949                 }
2950                 ext4_lock_group(sb, i);
2951                 if (!ext4_group_desc_csum_verify(sb, i, gdp)) {
2952                         ext4_msg(sb, KERN_ERR, "ext4_check_descriptors: "
2953                                  "Checksum for group %u failed (%u!=%u)",
2954                                  i, le16_to_cpu(ext4_group_desc_csum(sb, i,
2955                                      gdp)), le16_to_cpu(gdp->bg_checksum));
2956                         if (!sb_rdonly(sb)) {
2957                                 ext4_unlock_group(sb, i);
2958                                 return 0;
2959                         }
2960                 }
2961                 ext4_unlock_group(sb, i);
2962                 if (!flexbg_flag)
2963                         first_block += EXT4_BLOCKS_PER_GROUP(sb);
2964         }
2965         if (NULL != first_not_zeroed)
2966                 *first_not_zeroed = grp;
2967         return 1;
2968 }
2969
2970 /* ext4_orphan_cleanup() walks a singly-linked list of inodes (starting at
2971  * the superblock) which were deleted from all directories, but held open by
2972  * a process at the time of a crash.  We walk the list and try to delete these
2973  * inodes at recovery time (only with a read-write filesystem).
2974  *
2975  * In order to keep the orphan inode chain consistent during traversal (in
2976  * case of crash during recovery), we link each inode into the superblock
2977  * orphan list_head and handle it the same way as an inode deletion during
2978  * normal operation (which journals the operations for us).
2979  *
2980  * We only do an iget() and an iput() on each inode, which is very safe if we
2981  * accidentally point at an in-use or already deleted inode.  The worst that
2982  * can happen in this case is that we get a "bit already cleared" message from
2983  * ext4_free_inode().  The only reason we would point at a wrong inode is if
2984  * e2fsck was run on this filesystem, and it must have already done the orphan
2985  * inode cleanup for us, so we can safely abort without any further action.
2986  */
2987 static void ext4_orphan_cleanup(struct super_block *sb,
2988                                 struct ext4_super_block *es)
2989 {
2990         unsigned int s_flags = sb->s_flags;
2991         int ret, nr_orphans = 0, nr_truncates = 0;
2992 #ifdef CONFIG_QUOTA
2993         int quota_update = 0;
2994         int i;
2995 #endif
2996         if (!es->s_last_orphan) {
2997                 jbd_debug(4, "no orphan inodes to clean up\n");
2998                 return;
2999         }
3000
3001         if (bdev_read_only(sb->s_bdev)) {
3002                 ext4_msg(sb, KERN_ERR, "write access "
3003                         "unavailable, skipping orphan cleanup");
3004                 return;
3005         }
3006
3007         /* Check if feature set would not allow a r/w mount */
3008         if (!ext4_feature_set_ok(sb, 0)) {
3009                 ext4_msg(sb, KERN_INFO, "Skipping orphan cleanup due to "
3010                          "unknown ROCOMPAT features");
3011                 return;
3012         }
3013
3014         if (EXT4_SB(sb)->s_mount_state & EXT4_ERROR_FS) {
3015                 /* don't clear list on RO mount w/ errors */
3016                 if (es->s_last_orphan && !(s_flags & SB_RDONLY)) {
3017                         ext4_msg(sb, KERN_INFO, "Errors on filesystem, "
3018                                   "clearing orphan list.\n");
3019                         es->s_last_orphan = 0;
3020                 }
3021                 jbd_debug(1, "Skipping orphan recovery on fs with errors.\n");
3022                 return;
3023         }
3024
3025         if (s_flags & SB_RDONLY) {
3026                 ext4_msg(sb, KERN_INFO, "orphan cleanup on readonly fs");
3027                 sb->s_flags &= ~SB_RDONLY;
3028         }
3029 #ifdef CONFIG_QUOTA
3030         /*
3031          * Turn on quotas which were not enabled for read-only mounts if
3032          * filesystem has quota feature, so that they are updated correctly.
3033          */
3034         if (ext4_has_feature_quota(sb) && (s_flags & SB_RDONLY)) {
3035                 int ret = ext4_enable_quotas(sb);
3036
3037                 if (!ret)
3038                         quota_update = 1;
3039                 else
3040                         ext4_msg(sb, KERN_ERR,
3041                                 "Cannot turn on quotas: error %d", ret);
3042         }
3043
3044         /* Turn on journaled quotas used for old sytle */
3045         for (i = 0; i < EXT4_MAXQUOTAS; i++) {
3046                 if (EXT4_SB(sb)->s_qf_names[i]) {
3047                         int ret = ext4_quota_on_mount(sb, i);
3048
3049                         if (!ret)
3050                                 quota_update = 1;
3051                         else
3052                                 ext4_msg(sb, KERN_ERR,
3053                                         "Cannot turn on journaled "
3054                                         "quota: type %d: error %d", i, ret);
3055                 }
3056         }
3057 #endif
3058
3059         while (es->s_last_orphan) {
3060                 struct inode *inode;
3061
3062                 /*
3063                  * We may have encountered an error during cleanup; if
3064                  * so, skip the rest.
3065                  */
3066                 if (EXT4_SB(sb)->s_mount_state & EXT4_ERROR_FS) {
3067                         jbd_debug(1, "Skipping orphan recovery on fs with errors.\n");
3068                         es->s_last_orphan = 0;
3069                         break;
3070                 }
3071
3072                 inode = ext4_orphan_get(sb, le32_to_cpu(es->s_last_orphan));
3073                 if (IS_ERR(inode)) {
3074                         es->s_last_orphan = 0;
3075                         break;
3076                 }
3077
3078                 list_add(&EXT4_I(inode)->i_orphan, &EXT4_SB(sb)->s_orphan);
3079                 dquot_initialize(inode);
3080                 if (inode->i_nlink) {
3081                         if (test_opt(sb, DEBUG))
3082                                 ext4_msg(sb, KERN_DEBUG,
3083                                         "%s: truncating inode %lu to %lld bytes",
3084                                         __func__, inode->i_ino, inode->i_size);
3085                         jbd_debug(2, "truncating inode %lu to %lld bytes\n",
3086                                   inode->i_ino, inode->i_size);
3087                         inode_lock(inode);
3088                         truncate_inode_pages(inode->i_mapping, inode->i_size);
3089                         ret = ext4_truncate(inode);
3090                         if (ret) {
3091                                 /*
3092                                  * We need to clean up the in-core orphan list
3093                                  * manually if ext4_truncate() failed to get a
3094                                  * transaction handle.
3095                                  */
3096                                 ext4_orphan_del(NULL, inode);
3097                                 ext4_std_error(inode->i_sb, ret);
3098                         }
3099                         inode_unlock(inode);
3100                         nr_truncates++;
3101                 } else {
3102                         if (test_opt(sb, DEBUG))
3103                                 ext4_msg(sb, KERN_DEBUG,
3104                                         "%s: deleting unreferenced inode %lu",
3105                                         __func__, inode->i_ino);
3106                         jbd_debug(2, "deleting unreferenced inode %lu\n",
3107                                   inode->i_ino);
3108                         nr_orphans++;
3109                 }
3110                 iput(inode);  /* The delete magic happens here! */
3111         }
3112
3113 #define PLURAL(x) (x), ((x) == 1) ? "" : "s"
3114
3115         if (nr_orphans)
3116                 ext4_msg(sb, KERN_INFO, "%d orphan inode%s deleted",
3117                        PLURAL(nr_orphans));
3118         if (nr_truncates)
3119                 ext4_msg(sb, KERN_INFO, "%d truncate%s cleaned up",
3120                        PLURAL(nr_truncates));
3121 #ifdef CONFIG_QUOTA
3122         /* Turn off quotas if they were enabled for orphan cleanup */
3123         if (quota_update) {
3124                 for (i = 0; i < EXT4_MAXQUOTAS; i++) {
3125                         if (sb_dqopt(sb)->files[i])
3126                                 dquot_quota_off(sb, i);
3127                 }
3128         }
3129 #endif
3130         sb->s_flags = s_flags; /* Restore SB_RDONLY status */
3131 }
3132
3133 /*
3134  * Maximal extent format file size.
3135  * Resulting logical blkno at s_maxbytes must fit in our on-disk
3136  * extent format containers, within a sector_t, and within i_blocks
3137  * in the vfs.  ext4 inode has 48 bits of i_block in fsblock units,
3138  * so that won't be a limiting factor.
3139  *
3140  * However there is other limiting factor. We do store extents in the form
3141  * of starting block and length, hence the resulting length of the extent
3142  * covering maximum file size must fit into on-disk format containers as
3143  * well. Given that length is always by 1 unit bigger than max unit (because
3144  * we count 0 as well) we have to lower the s_maxbytes by one fs block.
3145  *
3146  * Note, this does *not* consider any metadata overhead for vfs i_blocks.
3147  */
3148 static loff_t ext4_max_size(int blkbits, int has_huge_files)
3149 {
3150         loff_t res;
3151         loff_t upper_limit = MAX_LFS_FILESIZE;
3152
3153         BUILD_BUG_ON(sizeof(blkcnt_t) < sizeof(u64));
3154
3155         if (!has_huge_files) {
3156                 upper_limit = (1LL << 32) - 1;
3157
3158                 /* total blocks in file system block size */
3159                 upper_limit >>= (blkbits - 9);
3160                 upper_limit <<= blkbits;
3161         }
3162
3163         /*
3164          * 32-bit extent-start container, ee_block. We lower the maxbytes
3165          * by one fs block, so ee_len can cover the extent of maximum file
3166          * size
3167          */
3168         res = (1LL << 32) - 1;
3169         res <<= blkbits;
3170
3171         /* Sanity check against vm- & vfs- imposed limits */
3172         if (res > upper_limit)
3173                 res = upper_limit;
3174
3175         return res;
3176 }
3177
3178 /*
3179  * Maximal bitmap file size.  There is a direct, and {,double-,triple-}indirect
3180  * block limit, and also a limit of (2^48 - 1) 512-byte sectors in i_blocks.
3181  * We need to be 1 filesystem block less than the 2^48 sector limit.
3182  */
3183 static loff_t ext4_max_bitmap_size(int bits, int has_huge_files)
3184 {
3185         loff_t res = EXT4_NDIR_BLOCKS;
3186         int meta_blocks;
3187         loff_t upper_limit;
3188         /* This is calculated to be the largest file size for a dense, block
3189          * mapped file such that the file's total number of 512-byte sectors,
3190          * including data and all indirect blocks, does not exceed (2^48 - 1).
3191          *
3192          * __u32 i_blocks_lo and _u16 i_blocks_high represent the total
3193          * number of 512-byte sectors of the file.
3194          */
3195
3196         if (!has_huge_files) {
3197                 /*
3198                  * !has_huge_files or implies that the inode i_block field
3199                  * represents total file blocks in 2^32 512-byte sectors ==
3200                  * size of vfs inode i_blocks * 8
3201                  */
3202                 upper_limit = (1LL << 32) - 1;
3203
3204                 /* total blocks in file system block size */
3205                 upper_limit >>= (bits - 9);
3206
3207         } else {
3208                 /*
3209                  * We use 48 bit ext4_inode i_blocks
3210                  * With EXT4_HUGE_FILE_FL set the i_blocks
3211                  * represent total number of blocks in
3212                  * file system block size
3213                  */
3214                 upper_limit = (1LL << 48) - 1;
3215
3216         }
3217
3218         /* indirect blocks */
3219         meta_blocks = 1;
3220         /* double indirect blocks */
3221         meta_blocks += 1 + (1LL << (bits-2));
3222         /* tripple indirect blocks */
3223         meta_blocks += 1 + (1LL << (bits-2)) + (1LL << (2*(bits-2)));
3224
3225         upper_limit -= meta_blocks;
3226         upper_limit <<= bits;
3227
3228         res += 1LL << (bits-2);
3229         res += 1LL << (2*(bits-2));
3230         res += 1LL << (3*(bits-2));
3231         res <<= bits;
3232         if (res > upper_limit)
3233                 res = upper_limit;
3234
3235         if (res > MAX_LFS_FILESIZE)
3236                 res = MAX_LFS_FILESIZE;
3237
3238         return res;
3239 }
3240
3241 static ext4_fsblk_t descriptor_loc(struct super_block *sb,
3242                                    ext4_fsblk_t logical_sb_block, int nr)
3243 {
3244         struct ext4_sb_info *sbi = EXT4_SB(sb);
3245         ext4_group_t bg, first_meta_bg;
3246         int has_super = 0;
3247
3248         first_meta_bg = le32_to_cpu(sbi->s_es->s_first_meta_bg);
3249
3250         if (!ext4_has_feature_meta_bg(sb) || nr < first_meta_bg)
3251                 return logical_sb_block + nr + 1;
3252         bg = sbi->s_desc_per_block * nr;
3253         if (ext4_bg_has_super(sb, bg))
3254                 has_super = 1;
3255
3256         /*
3257          * If we have a meta_bg fs with 1k blocks, group 0's GDT is at
3258          * block 2, not 1.  If s_first_data_block == 0 (bigalloc is enabled
3259          * on modern mke2fs or blksize > 1k on older mke2fs) then we must
3260          * compensate.
3261          */
3262         if (sb->s_blocksize == 1024 && nr == 0 &&
3263             le32_to_cpu(sbi->s_es->s_first_data_block) == 0)
3264                 has_super++;
3265
3266         return (has_super + ext4_group_first_block_no(sb, bg));
3267 }
3268
3269 /**
3270  * ext4_get_stripe_size: Get the stripe size.
3271  * @sbi: In memory super block info
3272  *
3273  * If we have specified it via mount option, then
3274  * use the mount option value. If the value specified at mount time is
3275  * greater than the blocks per group use the super block value.
3276  * If the super block value is greater than blocks per group return 0.
3277  * Allocator needs it be less than blocks per group.
3278  *
3279  */
3280 static unsigned long ext4_get_stripe_size(struct ext4_sb_info *sbi)
3281 {
3282         unsigned long stride = le16_to_cpu(sbi->s_es->s_raid_stride);
3283         unsigned long stripe_width =
3284                         le32_to_cpu(sbi->s_es->s_raid_stripe_width);
3285         int ret;
3286
3287         if (sbi->s_stripe && sbi->s_stripe <= sbi->s_blocks_per_group)
3288                 ret = sbi->s_stripe;
3289         else if (stripe_width && stripe_width <= sbi->s_blocks_per_group)
3290                 ret = stripe_width;
3291         else if (stride && stride <= sbi->s_blocks_per_group)
3292                 ret = stride;
3293         else
3294                 ret = 0;
3295
3296         /*
3297          * If the stripe width is 1, this makes no sense and
3298          * we set it to 0 to turn off stripe handling code.
3299          */
3300         if (ret <= 1)
3301                 ret = 0;
3302
3303         return ret;
3304 }
3305
3306 /*
3307  * Check whether this filesystem can be mounted based on
3308  * the features present and the RDONLY/RDWR mount requested.
3309  * Returns 1 if this filesystem can be mounted as requested,
3310  * 0 if it cannot be.
3311  */
3312 static int ext4_feature_set_ok(struct super_block *sb, int readonly)
3313 {
3314         if (ext4_has_unknown_ext4_incompat_features(sb)) {
3315                 ext4_msg(sb, KERN_ERR,
3316                         "Couldn't mount because of "
3317                         "unsupported optional features (%x)",
3318                         (le32_to_cpu(EXT4_SB(sb)->s_es->s_feature_incompat) &
3319                         ~EXT4_FEATURE_INCOMPAT_SUPP));
3320                 return 0;
3321         }
3322
3323 #ifndef CONFIG_UNICODE
3324         if (ext4_has_feature_casefold(sb)) {
3325                 ext4_msg(sb, KERN_ERR,
3326                          "Filesystem with casefold feature cannot be "
3327                          "mounted without CONFIG_UNICODE");
3328                 return 0;
3329         }
3330 #endif
3331
3332         if (readonly)
3333                 return 1;
3334
3335         if (ext4_has_feature_readonly(sb)) {
3336                 ext4_msg(sb, KERN_INFO, "filesystem is read-only");
3337                 sb->s_flags |= SB_RDONLY;
3338                 return 1;
3339         }
3340
3341         /* Check that feature set is OK for a read-write mount */
3342         if (ext4_has_unknown_ext4_ro_compat_features(sb)) {
3343                 ext4_msg(sb, KERN_ERR, "couldn't mount RDWR because of "
3344                          "unsupported optional features (%x)",
3345                          (le32_to_cpu(EXT4_SB(sb)->s_es->s_feature_ro_compat) &
3346                                 ~EXT4_FEATURE_RO_COMPAT_SUPP));
3347                 return 0;
3348         }
3349         if (ext4_has_feature_bigalloc(sb) && !ext4_has_feature_extents(sb)) {
3350                 ext4_msg(sb, KERN_ERR,
3351                          "Can't support bigalloc feature without "
3352                          "extents feature\n");
3353                 return 0;
3354         }
3355
3356 #if !IS_ENABLED(CONFIG_QUOTA) || !IS_ENABLED(CONFIG_QFMT_V2)
3357         if (!readonly && (ext4_has_feature_quota(sb) ||
3358                           ext4_has_feature_project(sb))) {
3359                 ext4_msg(sb, KERN_ERR,
3360                          "The kernel was not built with CONFIG_QUOTA and CONFIG_QFMT_V2");
3361                 return 0;
3362         }
3363 #endif  /* CONFIG_QUOTA */
3364         return 1;
3365 }
3366
3367 /*
3368  * This function is called once a day if we have errors logged
3369  * on the file system
3370  */
3371 static void print_daily_error_info(struct timer_list *t)
3372 {
3373         struct ext4_sb_info *sbi = from_timer(sbi, t, s_err_report);
3374         struct super_block *sb = sbi->s_sb;
3375         struct ext4_super_block *es = sbi->s_es;
3376
3377         if (es->s_error_count)
3378                 /* fsck newer than v1.41.13 is needed to clean this condition. */
3379                 ext4_msg(sb, KERN_NOTICE, "error count since last fsck: %u",
3380                          le32_to_cpu(es->s_error_count));
3381         if (es->s_first_error_time) {
3382                 printk(KERN_NOTICE "EXT4-fs (%s): initial error at time %llu: %.*s:%d",
3383                        sb->s_id,
3384                        ext4_get_tstamp(es, s_first_error_time),
3385                        (int) sizeof(es->s_first_error_func),
3386                        es->s_first_error_func,
3387                        le32_to_cpu(es->s_first_error_line));
3388                 if (es->s_first_error_ino)
3389                         printk(KERN_CONT ": inode %u",
3390                                le32_to_cpu(es->s_first_error_ino));
3391                 if (es->s_first_error_block)
3392                         printk(KERN_CONT ": block %llu", (unsigned long long)
3393                                le64_to_cpu(es->s_first_error_block));
3394                 printk(KERN_CONT "\n");
3395         }
3396         if (es->s_last_error_time) {
3397                 printk(KERN_NOTICE "EXT4-fs (%s): last error at time %llu: %.*s:%d",
3398                        sb->s_id,
3399                        ext4_get_tstamp(es, s_last_error_time),
3400                        (int) sizeof(es->s_last_error_func),
3401                        es->s_last_error_func,
3402                        le32_to_cpu(es->s_last_error_line));
3403                 if (es->s_last_error_ino)
3404                         printk(KERN_CONT ": inode %u",
3405                                le32_to_cpu(es->s_last_error_ino));
3406                 if (es->s_last_error_block)
3407                         printk(KERN_CONT ": block %llu", (unsigned long long)
3408                                le64_to_cpu(es->s_last_error_block));
3409                 printk(KERN_CONT "\n");
3410         }
3411         mod_timer(&sbi->s_err_report, jiffies + 24*60*60*HZ);  /* Once a day */
3412 }
3413
3414 /* Find next suitable group and run ext4_init_inode_table */
3415 static int ext4_run_li_request(struct ext4_li_request *elr)
3416 {
3417         struct ext4_group_desc *gdp = NULL;
3418         struct super_block *sb = elr->lr_super;
3419         ext4_group_t ngroups = EXT4_SB(sb)->s_groups_count;
3420         ext4_group_t group = elr->lr_next_group;
3421         unsigned long timeout = 0;
3422         unsigned int prefetch_ios = 0;
3423         int ret = 0;
3424
3425         if (elr->lr_mode == EXT4_LI_MODE_PREFETCH_BBITMAP) {
3426                 elr->lr_next_group = ext4_mb_prefetch(sb, group,
3427                                 EXT4_SB(sb)->s_mb_prefetch, &prefetch_ios);
3428                 if (prefetch_ios)
3429                         ext4_mb_prefetch_fini(sb, elr->lr_next_group,
3430                                               prefetch_ios);
3431                 trace_ext4_prefetch_bitmaps(sb, group, elr->lr_next_group,
3432                                             prefetch_ios);
3433                 if (group >= elr->lr_next_group) {
3434                         ret = 1;
3435                         if (elr->lr_first_not_zeroed != ngroups &&
3436                             !sb_rdonly(sb) && test_opt(sb, INIT_INODE_TABLE)) {
3437                                 elr->lr_next_group = elr->lr_first_not_zeroed;
3438                                 elr->lr_mode = EXT4_LI_MODE_ITABLE;
3439                                 ret = 0;
3440                         }
3441                 }
3442                 return ret;
3443         }
3444
3445         for (; group < ngroups; group++) {
3446                 gdp = ext4_get_group_desc(sb, group, NULL);
3447                 if (!gdp) {
3448                         ret = 1;
3449                         break;
3450                 }
3451
3452                 if (!(gdp->bg_flags & cpu_to_le16(EXT4_BG_INODE_ZEROED)))
3453                         break;
3454         }
3455
3456         if (group >= ngroups)
3457                 ret = 1;
3458
3459         if (!ret) {
3460                 timeout = jiffies;
3461                 ret = ext4_init_inode_table(sb, group,
3462                                             elr->lr_timeout ? 0 : 1);
3463                 trace_ext4_lazy_itable_init(sb, group);
3464                 if (elr->lr_timeout == 0) {
3465                         timeout = (jiffies - timeout) *
3466                                 EXT4_SB(elr->lr_super)->s_li_wait_mult;
3467                         elr->lr_timeout = timeout;
3468                 }
3469                 elr->lr_next_sched = jiffies + elr->lr_timeout;
3470                 elr->lr_next_group = group + 1;
3471         }
3472         return ret;
3473 }
3474
3475 /*
3476  * Remove lr_request from the list_request and free the
3477  * request structure. Should be called with li_list_mtx held
3478  */
3479 static void ext4_remove_li_request(struct ext4_li_request *elr)
3480 {
3481         if (!elr)
3482                 return;
3483
3484         list_del(&elr->lr_request);
3485         EXT4_SB(elr->lr_super)->s_li_request = NULL;
3486         kfree(elr);
3487 }
3488
3489 static void ext4_unregister_li_request(struct super_block *sb)
3490 {
3491         mutex_lock(&ext4_li_mtx);
3492         if (!ext4_li_info) {
3493                 mutex_unlock(&ext4_li_mtx);
3494                 return;
3495         }
3496
3497         mutex_lock(&ext4_li_info->li_list_mtx);
3498         ext4_remove_li_request(EXT4_SB(sb)->s_li_request);
3499         mutex_unlock(&ext4_li_info->li_list_mtx);
3500         mutex_unlock(&ext4_li_mtx);
3501 }
3502
3503 static struct task_struct *ext4_lazyinit_task;
3504
3505 /*
3506  * This is the function where ext4lazyinit thread lives. It walks
3507  * through the request list searching for next scheduled filesystem.
3508  * When such a fs is found, run the lazy initialization request
3509  * (ext4_rn_li_request) and keep track of the time spend in this
3510  * function. Based on that time we compute next schedule time of
3511  * the request. When walking through the list is complete, compute
3512  * next waking time and put itself into sleep.
3513  */
3514 static int ext4_lazyinit_thread(void *arg)
3515 {
3516         struct ext4_lazy_init *eli = (struct ext4_lazy_init *)arg;
3517         struct list_head *pos, *n;
3518         struct ext4_li_request *elr;
3519         unsigned long next_wakeup, cur;
3520
3521         BUG_ON(NULL == eli);
3522
3523 cont_thread:
3524         while (true) {
3525                 next_wakeup = MAX_JIFFY_OFFSET;
3526
3527                 mutex_lock(&eli->li_list_mtx);
3528                 if (list_empty(&eli->li_request_list)) {
3529                         mutex_unlock(&eli->li_list_mtx);
3530                         goto exit_thread;
3531                 }
3532                 list_for_each_safe(pos, n, &eli->li_request_list) {
3533                         int err = 0;
3534                         int progress = 0;
3535                         elr = list_entry(pos, struct ext4_li_request,
3536                                          lr_request);
3537
3538                         if (time_before(jiffies, elr->lr_next_sched)) {
3539                                 if (time_before(elr->lr_next_sched, next_wakeup))
3540                                         next_wakeup = elr->lr_next_sched;
3541                                 continue;
3542                         }
3543                         if (down_read_trylock(&elr->lr_super->s_umount)) {
3544                                 if (sb_start_write_trylock(elr->lr_super)) {
3545                                         progress = 1;
3546                                         /*
3547                                          * We hold sb->s_umount, sb can not
3548                                          * be removed from the list, it is
3549                                          * now safe to drop li_list_mtx
3550                                          */
3551                                         mutex_unlock(&eli->li_list_mtx);
3552                                         err = ext4_run_li_request(elr);
3553                                         sb_end_write(elr->lr_super);
3554                                         mutex_lock(&eli->li_list_mtx);
3555                                         n = pos->next;
3556                                 }
3557                                 up_read((&elr->lr_super->s_umount));
3558                         }
3559                         /* error, remove the lazy_init job */
3560                         if (err) {
3561                                 ext4_remove_li_request(elr);
3562                                 continue;
3563                         }
3564                         if (!progress) {
3565                                 elr->lr_next_sched = jiffies +
3566                                         (prandom_u32()
3567                                          % (EXT4_DEF_LI_MAX_START_DELAY * HZ));
3568                         }
3569                         if (time_before(elr->lr_next_sched, next_wakeup))
3570                                 next_wakeup = elr->lr_next_sched;
3571                 }
3572                 mutex_unlock(&eli->li_list_mtx);
3573
3574                 try_to_freeze();
3575
3576                 cur = jiffies;
3577                 if ((time_after_eq(cur, next_wakeup)) ||
3578                     (MAX_JIFFY_OFFSET == next_wakeup)) {
3579                         cond_resched();
3580                         continue;
3581                 }
3582
3583                 schedule_timeout_interruptible(next_wakeup - cur);
3584
3585                 if (kthread_should_stop()) {
3586                         ext4_clear_request_list();
3587                         goto exit_thread;
3588                 }
3589         }
3590
3591 exit_thread:
3592         /*
3593          * It looks like the request list is empty, but we need
3594          * to check it under the li_list_mtx lock, to prevent any
3595          * additions into it, and of course we should lock ext4_li_mtx
3596          * to atomically free the list and ext4_li_info, because at
3597          * this point another ext4 filesystem could be registering
3598          * new one.
3599          */
3600         mutex_lock(&ext4_li_mtx);
3601         mutex_lock(&eli->li_list_mtx);
3602         if (!list_empty(&eli->li_request_list)) {
3603                 mutex_unlock(&eli->li_list_mtx);
3604                 mutex_unlock(&ext4_li_mtx);
3605                 goto cont_thread;
3606         }
3607         mutex_unlock(&eli->li_list_mtx);
3608         kfree(ext4_li_info);
3609         ext4_li_info = NULL;
3610         mutex_unlock(&ext4_li_mtx);
3611
3612         return 0;
3613 }
3614
3615 static void ext4_clear_request_list(void)
3616 {
3617         struct list_head *pos, *n;
3618         struct ext4_li_request *elr;
3619
3620         mutex_lock(&ext4_li_info->li_list_mtx);
3621         list_for_each_safe(pos, n, &ext4_li_info->li_request_list) {
3622                 elr = list_entry(pos, struct ext4_li_request,
3623                                  lr_request);
3624                 ext4_remove_li_request(elr);
3625         }
3626         mutex_unlock(&ext4_li_info->li_list_mtx);
3627 }
3628
3629 static int ext4_run_lazyinit_thread(void)
3630 {
3631         ext4_lazyinit_task = kthread_run(ext4_lazyinit_thread,
3632                                          ext4_li_info, "ext4lazyinit");
3633         if (IS_ERR(ext4_lazyinit_task)) {
3634                 int err = PTR_ERR(ext4_lazyinit_task);
3635                 ext4_clear_request_list();
3636                 kfree(ext4_li_info);
3637                 ext4_li_info = NULL;
3638                 printk(KERN_CRIT "EXT4-fs: error %d creating inode table "
3639                                  "initialization thread\n",
3640                                  err);
3641                 return err;
3642         }
3643         ext4_li_info->li_state |= EXT4_LAZYINIT_RUNNING;
3644         return 0;
3645 }
3646
3647 /*
3648  * Check whether it make sense to run itable init. thread or not.
3649  * If there is at least one uninitialized inode table, return
3650  * corresponding group number, else the loop goes through all
3651  * groups and return total number of groups.
3652  */
3653 static ext4_group_t ext4_has_uninit_itable(struct super_block *sb)
3654 {
3655         ext4_group_t group, ngroups = EXT4_SB(sb)->s_groups_count;
3656         struct ext4_group_desc *gdp = NULL;
3657
3658         if (!ext4_has_group_desc_csum(sb))
3659                 return ngroups;
3660
3661         for (group = 0; group < ngroups; group++) {
3662                 gdp = ext4_get_group_desc(sb, group, NULL);
3663                 if (!gdp)
3664                         continue;
3665
3666                 if (!(gdp->bg_flags & cpu_to_le16(EXT4_BG_INODE_ZEROED)))
3667                         break;
3668         }
3669
3670         return group;
3671 }
3672
3673 static int ext4_li_info_new(void)
3674 {
3675         struct ext4_lazy_init *eli = NULL;
3676
3677         eli = kzalloc(sizeof(*eli), GFP_KERNEL);
3678         if (!eli)
3679                 return -ENOMEM;
3680
3681         INIT_LIST_HEAD(&eli->li_request_list);
3682         mutex_init(&eli->li_list_mtx);
3683
3684         eli->li_state |= EXT4_LAZYINIT_QUIT;
3685
3686         ext4_li_info = eli;
3687
3688         return 0;
3689 }
3690
3691 static struct ext4_li_request *ext4_li_request_new(struct super_block *sb,
3692                                             ext4_group_t start)
3693 {
3694         struct ext4_li_request *elr;
3695
3696         elr = kzalloc(sizeof(*elr), GFP_KERNEL);
3697         if (!elr)
3698                 return NULL;
3699
3700         elr->lr_super = sb;
3701         elr->lr_first_not_zeroed = start;
3702         if (test_opt(sb, NO_PREFETCH_BLOCK_BITMAPS)) {
3703                 elr->lr_mode = EXT4_LI_MODE_ITABLE;
3704                 elr->lr_next_group = start;
3705         } else {
3706                 elr->lr_mode = EXT4_LI_MODE_PREFETCH_BBITMAP;
3707         }
3708
3709         /*
3710          * Randomize first schedule time of the request to
3711          * spread the inode table initialization requests
3712          * better.
3713          */
3714         elr->lr_next_sched = jiffies + (prandom_u32() %
3715                                 (EXT4_DEF_LI_MAX_START_DELAY * HZ));
3716         return elr;
3717 }
3718
3719 int ext4_register_li_request(struct super_block *sb,
3720                              ext4_group_t first_not_zeroed)
3721 {
3722         struct ext4_sb_info *sbi = EXT4_SB(sb);
3723         struct ext4_li_request *elr = NULL;
3724         ext4_group_t ngroups = sbi->s_groups_count;
3725         int ret = 0;
3726
3727         mutex_lock(&ext4_li_mtx);
3728         if (sbi->s_li_request != NULL) {
3729                 /*
3730                  * Reset timeout so it can be computed again, because
3731                  * s_li_wait_mult might have changed.
3732                  */
3733                 sbi->s_li_request->lr_timeout = 0;
3734                 goto out;
3735         }
3736
3737         if (test_opt(sb, NO_PREFETCH_BLOCK_BITMAPS) &&
3738             (first_not_zeroed == ngroups || sb_rdonly(sb) ||
3739              !test_opt(sb, INIT_INODE_TABLE)))
3740                 goto out;
3741
3742         elr = ext4_li_request_new(sb, first_not_zeroed);
3743         if (!elr) {
3744                 ret = -ENOMEM;
3745                 goto out;
3746         }
3747
3748         if (NULL == ext4_li_info) {
3749                 ret = ext4_li_info_new();
3750                 if (ret)
3751                         goto out;
3752         }
3753
3754         mutex_lock(&ext4_li_info->li_list_mtx);
3755         list_add(&elr->lr_request, &ext4_li_info->li_request_list);
3756         mutex_unlock(&ext4_li_info->li_list_mtx);
3757
3758         sbi->s_li_request = elr;
3759         /*
3760          * set elr to NULL here since it has been inserted to
3761          * the request_list and the removal and free of it is
3762          * handled by ext4_clear_request_list from now on.
3763          */
3764         elr = NULL;
3765
3766         if (!(ext4_li_info->li_state & EXT4_LAZYINIT_RUNNING)) {
3767                 ret = ext4_run_lazyinit_thread();
3768                 if (ret)
3769                         goto out;
3770         }
3771 out:
3772         mutex_unlock(&ext4_li_mtx);
3773         if (ret)
3774                 kfree(elr);
3775         return ret;
3776 }
3777
3778 /*
3779  * We do not need to lock anything since this is called on
3780  * module unload.
3781  */
3782 static void ext4_destroy_lazyinit_thread(void)
3783 {
3784         /*
3785          * If thread exited earlier
3786          * there's nothing to be done.
3787          */
3788         if (!ext4_li_info || !ext4_lazyinit_task)
3789                 return;
3790
3791         kthread_stop(ext4_lazyinit_task);
3792 }
3793
3794 static int set_journal_csum_feature_set(struct super_block *sb)
3795 {
3796         int ret = 1;
3797         int compat, incompat;
3798         struct ext4_sb_info *sbi = EXT4_SB(sb);
3799
3800         if (ext4_has_metadata_csum(sb)) {
3801                 /* journal checksum v3 */
3802                 compat = 0;
3803                 incompat = JBD2_FEATURE_INCOMPAT_CSUM_V3;
3804         } else {
3805                 /* journal checksum v1 */
3806                 compat = JBD2_FEATURE_COMPAT_CHECKSUM;
3807                 incompat = 0;
3808         }
3809
3810         jbd2_journal_clear_features(sbi->s_journal,
3811                         JBD2_FEATURE_COMPAT_CHECKSUM, 0,
3812                         JBD2_FEATURE_INCOMPAT_CSUM_V3 |
3813                         JBD2_FEATURE_INCOMPAT_CSUM_V2);
3814         if (test_opt(sb, JOURNAL_ASYNC_COMMIT)) {
3815                 ret = jbd2_journal_set_features(sbi->s_journal,
3816                                 compat, 0,
3817                                 JBD2_FEATURE_INCOMPAT_ASYNC_COMMIT |
3818                                 incompat);
3819         } else if (test_opt(sb, JOURNAL_CHECKSUM)) {
3820                 ret = jbd2_journal_set_features(sbi->s_journal,
3821                                 compat, 0,
3822                                 incompat);
3823                 jbd2_journal_clear_features(sbi->s_journal, 0, 0,
3824                                 JBD2_FEATURE_INCOMPAT_ASYNC_COMMIT);
3825         } else {
3826                 jbd2_journal_clear_features(sbi->s_journal, 0, 0,
3827                                 JBD2_FEATURE_INCOMPAT_ASYNC_COMMIT);
3828         }
3829
3830         return ret;
3831 }
3832
3833 /*
3834  * Note: calculating the overhead so we can be compatible with
3835  * historical BSD practice is quite difficult in the face of
3836  * clusters/bigalloc.  This is because multiple metadata blocks from
3837  * different block group can end up in the same allocation cluster.
3838  * Calculating the exact overhead in the face of clustered allocation
3839  * requires either O(all block bitmaps) in memory or O(number of block
3840  * groups**2) in time.  We will still calculate the superblock for
3841  * older file systems --- and if we come across with a bigalloc file
3842  * system with zero in s_overhead_clusters the estimate will be close to
3843  * correct especially for very large cluster sizes --- but for newer
3844  * file systems, it's better to calculate this figure once at mkfs
3845  * time, and store it in the superblock.  If the superblock value is
3846  * present (even for non-bigalloc file systems), we will use it.
3847  */
3848 static int count_overhead(struct super_block *sb, ext4_group_t grp,
3849                           char *buf)
3850 {
3851         struct ext4_sb_info     *sbi = EXT4_SB(sb);
3852         struct ext4_group_desc  *gdp;
3853         ext4_fsblk_t            first_block, last_block, b;
3854         ext4_group_t            i, ngroups = ext4_get_groups_count(sb);
3855         int                     s, j, count = 0;
3856
3857         if (!ext4_has_feature_bigalloc(sb))
3858                 return (ext4_bg_has_super(sb, grp) + ext4_bg_num_gdb(sb, grp) +
3859                         sbi->s_itb_per_group + 2);
3860
3861         first_block = le32_to_cpu(sbi->s_es->s_first_data_block) +
3862                 (grp * EXT4_BLOCKS_PER_GROUP(sb));
3863         last_block = first_block + EXT4_BLOCKS_PER_GROUP(sb) - 1;
3864         for (i = 0; i < ngroups; i++) {
3865                 gdp = ext4_get_group_desc(sb, i, NULL);
3866                 b = ext4_block_bitmap(sb, gdp);
3867                 if (b >= first_block && b <= last_block) {
3868                         ext4_set_bit(EXT4_B2C(sbi, b - first_block), buf);
3869                         count++;
3870                 }
3871                 b = ext4_inode_bitmap(sb, gdp);
3872                 if (b >= first_block && b <= last_block) {
3873                         ext4_set_bit(EXT4_B2C(sbi, b - first_block), buf);
3874                         count++;
3875                 }
3876                 b = ext4_inode_table(sb, gdp);
3877                 if (b >= first_block && b + sbi->s_itb_per_group <= last_block)
3878                         for (j = 0; j < sbi->s_itb_per_group; j++, b++) {
3879                                 int c = EXT4_B2C(sbi, b - first_block);
3880                                 ext4_set_bit(c, buf);
3881                                 count++;
3882                         }
3883                 if (i != grp)
3884                         continue;
3885                 s = 0;
3886                 if (ext4_bg_has_super(sb, grp)) {
3887                         ext4_set_bit(s++, buf);
3888                         count++;
3889                 }
3890                 j = ext4_bg_num_gdb(sb, grp);
3891                 if (s + j > EXT4_BLOCKS_PER_GROUP(sb)) {
3892                         ext4_error(sb, "Invalid number of block group "
3893                                    "descriptor blocks: %d", j);
3894                         j = EXT4_BLOCKS_PER_GROUP(sb) - s;
3895                 }
3896                 count += j;
3897                 for (; j > 0; j--)
3898                         ext4_set_bit(EXT4_B2C(sbi, s++), buf);
3899         }
3900         if (!count)
3901                 return 0;
3902         return EXT4_CLUSTERS_PER_GROUP(sb) -
3903                 ext4_count_free(buf, EXT4_CLUSTERS_PER_GROUP(sb) / 8);
3904 }
3905
3906 /*
3907  * Compute the overhead and stash it in sbi->s_overhead
3908  */
3909 int ext4_calculate_overhead(struct super_block *sb)
3910 {
3911         struct ext4_sb_info *sbi = EXT4_SB(sb);
3912         struct ext4_super_block *es = sbi->s_es;
3913         struct inode *j_inode;
3914         unsigned int j_blocks, j_inum = le32_to_cpu(es->s_journal_inum);
3915         ext4_group_t i, ngroups = ext4_get_groups_count(sb);
3916         ext4_fsblk_t overhead = 0;
3917         char *buf = (char *) get_zeroed_page(GFP_NOFS);
3918
3919         if (!buf)
3920                 return -ENOMEM;
3921
3922         /*
3923          * Compute the overhead (FS structures).  This is constant
3924          * for a given filesystem unless the number of block groups
3925          * changes so we cache the previous value until it does.
3926          */
3927
3928         /*
3929          * All of the blocks before first_data_block are overhead
3930          */
3931         overhead = EXT4_B2C(sbi, le32_to_cpu(es->s_first_data_block));
3932
3933         /*
3934          * Add the overhead found in each block group
3935          */
3936         for (i = 0; i < ngroups; i++) {
3937                 int blks;
3938
3939                 blks = count_overhead(sb, i, buf);
3940                 overhead += blks;
3941                 if (blks)
3942                         memset(buf, 0, PAGE_SIZE);
3943                 cond_resched();
3944         }
3945
3946         /*
3947          * Add the internal journal blocks whether the journal has been
3948          * loaded or not
3949          */
3950         if (sbi->s_journal && !sbi->s_journal_bdev)
3951                 overhead += EXT4_NUM_B2C(sbi, sbi->s_journal->j_total_len);
3952         else if (ext4_has_feature_journal(sb) && !sbi->s_journal && j_inum) {
3953                 /* j_inum for internal journal is non-zero */
3954                 j_inode = ext4_get_journal_inode(sb, j_inum);
3955                 if (j_inode) {
3956                         j_blocks = j_inode->i_size >> sb->s_blocksize_bits;
3957                         overhead += EXT4_NUM_B2C(sbi, j_blocks);
3958                         iput(j_inode);
3959                 } else {
3960                         ext4_msg(sb, KERN_ERR, "can't get journal size");
3961                 }
3962         }
3963         sbi->s_overhead = overhead;
3964         smp_wmb();
3965         free_page((unsigned long) buf);
3966         return 0;
3967 }
3968
3969 static void ext4_set_resv_clusters(struct super_block *sb)
3970 {
3971         ext4_fsblk_t resv_clusters;
3972         struct ext4_sb_info *sbi = EXT4_SB(sb);
3973
3974         /*
3975          * There's no need to reserve anything when we aren't using extents.
3976          * The space estimates are exact, there are no unwritten extents,
3977          * hole punching doesn't need new metadata... This is needed especially
3978          * to keep ext2/3 backward compatibility.
3979          */
3980         if (!ext4_has_feature_extents(sb))
3981                 return;
3982         /*
3983          * By default we reserve 2% or 4096 clusters, whichever is smaller.
3984          * This should cover the situations where we can not afford to run
3985          * out of space like for example punch hole, or converting
3986          * unwritten extents in delalloc path. In most cases such
3987          * allocation would require 1, or 2 blocks, higher numbers are
3988          * very rare.
3989          */
3990         resv_clusters = (ext4_blocks_count(sbi->s_es) >>
3991                          sbi->s_cluster_bits);
3992
3993         do_div(resv_clusters, 50);
3994         resv_clusters = min_t(ext4_fsblk_t, resv_clusters, 4096);
3995
3996         atomic64_set(&sbi->s_resv_clusters, resv_clusters);
3997 }
3998
3999 static const char *ext4_quota_mode(struct super_block *sb)
4000 {
4001 #ifdef CONFIG_QUOTA
4002         if (!ext4_quota_capable(sb))
4003                 return "none";
4004
4005         if (EXT4_SB(sb)->s_journal && ext4_is_quota_journalled(sb))
4006                 return "journalled";
4007         else
4008                 return "writeback";
4009 #else
4010         return "disabled";
4011 #endif
4012 }
4013
4014 static int ext4_fill_super(struct super_block *sb, void *data, int silent)
4015 {
4016         struct dax_device *dax_dev = fs_dax_get_by_bdev(sb->s_bdev);
4017         char *orig_data = kstrdup(data, GFP_KERNEL);
4018         struct buffer_head *bh, **group_desc;
4019         struct ext4_super_block *es = NULL;
4020         struct ext4_sb_info *sbi = kzalloc(sizeof(*sbi), GFP_KERNEL);
4021         struct flex_groups **flex_groups;
4022         ext4_fsblk_t block;
4023         ext4_fsblk_t sb_block = get_sb_block(&data);
4024         ext4_fsblk_t logical_sb_block;
4025         unsigned long offset = 0;
4026         unsigned long def_mount_opts;
4027         struct inode *root;
4028         const char *descr;
4029         int ret = -ENOMEM;
4030         int blocksize, clustersize;
4031         unsigned int db_count;
4032         unsigned int i;
4033         int needs_recovery, has_huge_files;
4034         __u64 blocks_count;
4035         int err = 0;
4036         ext4_group_t first_not_zeroed;
4037         struct ext4_parsed_options parsed_opts;
4038
4039         /* Set defaults for the variables that will be set during parsing */
4040         parsed_opts.journal_ioprio = DEFAULT_JOURNAL_IOPRIO;
4041         parsed_opts.journal_devnum = 0;
4042         parsed_opts.mb_optimize_scan = DEFAULT_MB_OPTIMIZE_SCAN;
4043
4044         if ((data && !orig_data) || !sbi)
4045                 goto out_free_base;
4046
4047         sbi->s_daxdev = dax_dev;
4048         sbi->s_blockgroup_lock =
4049                 kzalloc(sizeof(struct blockgroup_lock), GFP_KERNEL);
4050         if (!sbi->s_blockgroup_lock)
4051                 goto out_free_base;
4052
4053         sb->s_fs_info = sbi;
4054         sbi->s_sb = sb;
4055         sbi->s_inode_readahead_blks = EXT4_DEF_INODE_READAHEAD_BLKS;
4056         sbi->s_sb_block = sb_block;
4057         sbi->s_sectors_written_start =
4058                 part_stat_read(sb->s_bdev, sectors[STAT_WRITE]);
4059
4060         /* Cleanup superblock name */
4061         strreplace(sb->s_id, '/', '!');
4062
4063         /* -EINVAL is default */
4064         ret = -EINVAL;
4065         blocksize = sb_min_blocksize(sb, EXT4_MIN_BLOCK_SIZE);
4066         if (!blocksize) {
4067                 ext4_msg(sb, KERN_ERR, "unable to set blocksize");
4068                 goto out_fail;
4069         }
4070
4071         /*
4072          * The ext4 superblock will not be buffer aligned for other than 1kB
4073          * block sizes.  We need to calculate the offset from buffer start.
4074          */
4075         if (blocksize != EXT4_MIN_BLOCK_SIZE) {
4076                 logical_sb_block = sb_block * EXT4_MIN_BLOCK_SIZE;
4077                 offset = do_div(logical_sb_block, blocksize);
4078         } else {
4079                 logical_sb_block = sb_block;
4080         }
4081
4082         bh = ext4_sb_bread_unmovable(sb, logical_sb_block);
4083         if (IS_ERR(bh)) {
4084                 ext4_msg(sb, KERN_ERR, "unable to read superblock");
4085                 ret = PTR_ERR(bh);
4086                 goto out_fail;
4087         }
4088         /*
4089          * Note: s_es must be initialized as soon as possible because
4090          *       some ext4 macro-instructions depend on its value
4091          */
4092         es = (struct ext4_super_block *) (bh->b_data + offset);
4093         sbi->s_es = es;
4094         sb->s_magic = le16_to_cpu(es->s_magic);
4095         if (sb->s_magic != EXT4_SUPER_MAGIC)
4096                 goto cantfind_ext4;
4097         sbi->s_kbytes_written = le64_to_cpu(es->s_kbytes_written);
4098
4099         /* Warn if metadata_csum and gdt_csum are both set. */
4100         if (ext4_has_feature_metadata_csum(sb) &&
4101             ext4_has_feature_gdt_csum(sb))
4102                 ext4_warning(sb, "metadata_csum and uninit_bg are "
4103                              "redundant flags; please run fsck.");
4104
4105         /* Check for a known checksum algorithm */
4106         if (!ext4_verify_csum_type(sb, es)) {
4107                 ext4_msg(sb, KERN_ERR, "VFS: Found ext4 filesystem with "
4108                          "unknown checksum algorithm.");
4109                 silent = 1;
4110                 goto cantfind_ext4;
4111         }
4112
4113         /* Load the checksum driver */
4114         sbi->s_chksum_driver = crypto_alloc_shash("crc32c", 0, 0);
4115         if (IS_ERR(sbi->s_chksum_driver)) {
4116                 ext4_msg(sb, KERN_ERR, "Cannot load crc32c driver.");
4117                 ret = PTR_ERR(sbi->s_chksum_driver);
4118                 sbi->s_chksum_driver = NULL;
4119                 goto failed_mount;
4120         }
4121
4122         /* Check superblock checksum */
4123         if (!ext4_superblock_csum_verify(sb, es)) {
4124                 ext4_msg(sb, KERN_ERR, "VFS: Found ext4 filesystem with "
4125                          "invalid superblock checksum.  Run e2fsck?");
4126                 silent = 1;
4127                 ret = -EFSBADCRC;
4128                 goto cantfind_ext4;
4129         }
4130
4131         /* Precompute checksum seed for all metadata */
4132         if (ext4_has_feature_csum_seed(sb))
4133                 sbi->s_csum_seed = le32_to_cpu(es->s_checksum_seed);
4134         else if (ext4_has_metadata_csum(sb) || ext4_has_feature_ea_inode(sb))
4135                 sbi->s_csum_seed = ext4_chksum(sbi, ~0, es->s_uuid,
4136                                                sizeof(es->s_uuid));
4137
4138         /* Set defaults before we parse the mount options */
4139         def_mount_opts = le32_to_cpu(es->s_default_mount_opts);
4140         set_opt(sb, INIT_INODE_TABLE);
4141         if (def_mount_opts & EXT4_DEFM_DEBUG)
4142                 set_opt(sb, DEBUG);
4143         if (def_mount_opts & EXT4_DEFM_BSDGROUPS)
4144                 set_opt(sb, GRPID);
4145         if (def_mount_opts & EXT4_DEFM_UID16)
4146                 set_opt(sb, NO_UID32);
4147         /* xattr user namespace & acls are now defaulted on */
4148         set_opt(sb, XATTR_USER);
4149 #ifdef CONFIG_EXT4_FS_POSIX_ACL
4150         set_opt(sb, POSIX_ACL);
4151 #endif
4152         if (ext4_has_feature_fast_commit(sb))
4153                 set_opt2(sb, JOURNAL_FAST_COMMIT);
4154         /* don't forget to enable journal_csum when metadata_csum is enabled. */
4155         if (ext4_has_metadata_csum(sb))
4156                 set_opt(sb, JOURNAL_CHECKSUM);
4157
4158         if ((def_mount_opts & EXT4_DEFM_JMODE) == EXT4_DEFM_JMODE_DATA)
4159                 set_opt(sb, JOURNAL_DATA);
4160         else if ((def_mount_opts & EXT4_DEFM_JMODE) == EXT4_DEFM_JMODE_ORDERED)
4161                 set_opt(sb, ORDERED_DATA);
4162         else if ((def_mount_opts & EXT4_DEFM_JMODE) == EXT4_DEFM_JMODE_WBACK)
4163                 set_opt(sb, WRITEBACK_DATA);
4164
4165         if (le16_to_cpu(sbi->s_es->s_errors) == EXT4_ERRORS_PANIC)
4166                 set_opt(sb, ERRORS_PANIC);
4167         else if (le16_to_cpu(sbi->s_es->s_errors) == EXT4_ERRORS_CONTINUE)
4168                 set_opt(sb, ERRORS_CONT);
4169         else
4170                 set_opt(sb, ERRORS_RO);
4171         /* block_validity enabled by default; disable with noblock_validity */
4172         set_opt(sb, BLOCK_VALIDITY);
4173         if (def_mount_opts & EXT4_DEFM_DISCARD)
4174                 set_opt(sb, DISCARD);
4175
4176         sbi->s_resuid = make_kuid(&init_user_ns, le16_to_cpu(es->s_def_resuid));
4177         sbi->s_resgid = make_kgid(&init_user_ns, le16_to_cpu(es->s_def_resgid));
4178         sbi->s_commit_interval = JBD2_DEFAULT_MAX_COMMIT_AGE * HZ;
4179         sbi->s_min_batch_time = EXT4_DEF_MIN_BATCH_TIME;
4180         sbi->s_max_batch_time = EXT4_DEF_MAX_BATCH_TIME;
4181
4182         if ((def_mount_opts & EXT4_DEFM_NOBARRIER) == 0)
4183                 set_opt(sb, BARRIER);
4184
4185         /*
4186          * enable delayed allocation by default
4187          * Use -o nodelalloc to turn it off
4188          */
4189         if (!IS_EXT3_SB(sb) && !IS_EXT2_SB(sb) &&
4190             ((def_mount_opts & EXT4_DEFM_NODELALLOC) == 0))
4191                 set_opt(sb, DELALLOC);
4192
4193         /*
4194          * set default s_li_wait_mult for lazyinit, for the case there is
4195          * no mount option specified.
4196          */
4197         sbi->s_li_wait_mult = EXT4_DEF_LI_WAIT_MULT;
4198
4199         if (le32_to_cpu(es->s_log_block_size) >
4200             (EXT4_MAX_BLOCK_LOG_SIZE - EXT4_MIN_BLOCK_LOG_SIZE)) {
4201                 ext4_msg(sb, KERN_ERR,
4202                          "Invalid log block size: %u",
4203                          le32_to_cpu(es->s_log_block_size));
4204                 goto failed_mount;
4205         }
4206         if (le32_to_cpu(es->s_log_cluster_size) >
4207             (EXT4_MAX_CLUSTER_LOG_SIZE - EXT4_MIN_BLOCK_LOG_SIZE)) {
4208                 ext4_msg(sb, KERN_ERR,
4209                          "Invalid log cluster size: %u",
4210                          le32_to_cpu(es->s_log_cluster_size));
4211                 goto failed_mount;
4212         }
4213
4214         blocksize = EXT4_MIN_BLOCK_SIZE << le32_to_cpu(es->s_log_block_size);
4215
4216         if (blocksize == PAGE_SIZE)
4217                 set_opt(sb, DIOREAD_NOLOCK);
4218
4219         if (le32_to_cpu(es->s_rev_level) == EXT4_GOOD_OLD_REV) {
4220                 sbi->s_inode_size = EXT4_GOOD_OLD_INODE_SIZE;
4221                 sbi->s_first_ino = EXT4_GOOD_OLD_FIRST_INO;
4222         } else {
4223                 sbi->s_inode_size = le16_to_cpu(es->s_inode_size);
4224                 sbi->s_first_ino = le32_to_cpu(es->s_first_ino);
4225                 if (sbi->s_first_ino < EXT4_GOOD_OLD_FIRST_INO) {
4226                         ext4_msg(sb, KERN_ERR, "invalid first ino: %u",
4227                                  sbi->s_first_ino);
4228                         goto failed_mount;
4229                 }
4230                 if ((sbi->s_inode_size < EXT4_GOOD_OLD_INODE_SIZE) ||
4231                     (!is_power_of_2(sbi->s_inode_size)) ||
4232                     (sbi->s_inode_size > blocksize)) {
4233                         ext4_msg(sb, KERN_ERR,
4234                                "unsupported inode size: %d",
4235                                sbi->s_inode_size);
4236                         ext4_msg(sb, KERN_ERR, "blocksize: %d", blocksize);
4237                         goto failed_mount;
4238                 }
4239                 /*
4240                  * i_atime_extra is the last extra field available for
4241                  * [acm]times in struct ext4_inode. Checking for that
4242                  * field should suffice to ensure we have extra space
4243                  * for all three.
4244                  */
4245                 if (sbi->s_inode_size >= offsetof(struct ext4_inode, i_atime_extra) +
4246                         sizeof(((struct ext4_inode *)0)->i_atime_extra)) {
4247                         sb->s_time_gran = 1;
4248                         sb->s_time_max = EXT4_EXTRA_TIMESTAMP_MAX;
4249                 } else {
4250                         sb->s_time_gran = NSEC_PER_SEC;
4251                         sb->s_time_max = EXT4_NON_EXTRA_TIMESTAMP_MAX;
4252                 }
4253                 sb->s_time_min = EXT4_TIMESTAMP_MIN;
4254         }
4255         if (sbi->s_inode_size > EXT4_GOOD_OLD_INODE_SIZE) {
4256                 sbi->s_want_extra_isize = sizeof(struct ext4_inode) -
4257                         EXT4_GOOD_OLD_INODE_SIZE;
4258                 if (ext4_has_feature_extra_isize(sb)) {
4259                         unsigned v, max = (sbi->s_inode_size -
4260                                            EXT4_GOOD_OLD_INODE_SIZE);
4261
4262                         v = le16_to_cpu(es->s_want_extra_isize);
4263                         if (v > max) {
4264                                 ext4_msg(sb, KERN_ERR,
4265                                          "bad s_want_extra_isize: %d", v);
4266                                 goto failed_mount;
4267                         }
4268                         if (sbi->s_want_extra_isize < v)
4269                                 sbi->s_want_extra_isize = v;
4270
4271                         v = le16_to_cpu(es->s_min_extra_isize);
4272                         if (v > max) {
4273                                 ext4_msg(sb, KERN_ERR,
4274                                          "bad s_min_extra_isize: %d", v);
4275                                 goto failed_mount;
4276                         }
4277                         if (sbi->s_want_extra_isize < v)
4278                                 sbi->s_want_extra_isize = v;
4279                 }
4280         }
4281
4282         if (sbi->s_es->s_mount_opts[0]) {
4283                 char *s_mount_opts = kstrndup(sbi->s_es->s_mount_opts,
4284                                               sizeof(sbi->s_es->s_mount_opts),
4285                                               GFP_KERNEL);
4286                 if (!s_mount_opts)
4287                         goto failed_mount;
4288                 if (!parse_options(s_mount_opts, sb, &parsed_opts, 0)) {
4289                         ext4_msg(sb, KERN_WARNING,
4290                                  "failed to parse options in superblock: %s",
4291                                  s_mount_opts);
4292                 }
4293                 kfree(s_mount_opts);
4294         }
4295         sbi->s_def_mount_opt = sbi->s_mount_opt;
4296         if (!parse_options((char *) data, sb, &parsed_opts, 0))
4297                 goto failed_mount;
4298
4299 #ifdef CONFIG_UNICODE
4300         if (ext4_has_feature_casefold(sb) && !sb->s_encoding) {
4301                 const struct ext4_sb_encodings *encoding_info;
4302                 struct unicode_map *encoding;
4303                 __u16 encoding_flags;
4304
4305                 if (ext4_sb_read_encoding(es, &encoding_info,
4306                                           &encoding_flags)) {
4307                         ext4_msg(sb, KERN_ERR,
4308                                  "Encoding requested by superblock is unknown");
4309                         goto failed_mount;
4310                 }
4311
4312                 encoding = utf8_load(encoding_info->version);
4313                 if (IS_ERR(encoding)) {
4314                         ext4_msg(sb, KERN_ERR,
4315                                  "can't mount with superblock charset: %s-%s "
4316                                  "not supported by the kernel. flags: 0x%x.",
4317                                  encoding_info->name, encoding_info->version,
4318                                  encoding_flags);
4319                         goto failed_mount;
4320                 }
4321                 ext4_msg(sb, KERN_INFO,"Using encoding defined by superblock: "
4322                          "%s-%s with flags 0x%hx", encoding_info->name,
4323                          encoding_info->version?:"\b", encoding_flags);
4324
4325                 sb->s_encoding = encoding;
4326                 sb->s_encoding_flags = encoding_flags;
4327         }
4328 #endif
4329
4330         if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA) {
4331                 printk_once(KERN_WARNING "EXT4-fs: Warning: mounting with data=journal disables delayed allocation, dioread_nolock, O_DIRECT and fast_commit support!\n");
4332                 /* can't mount with both data=journal and dioread_nolock. */
4333                 clear_opt(sb, DIOREAD_NOLOCK);
4334                 clear_opt2(sb, JOURNAL_FAST_COMMIT);
4335                 if (test_opt2(sb, EXPLICIT_DELALLOC)) {
4336                         ext4_msg(sb, KERN_ERR, "can't mount with "
4337                                  "both data=journal and delalloc");
4338                         goto failed_mount;
4339                 }
4340                 if (test_opt(sb, DAX_ALWAYS)) {
4341                         ext4_msg(sb, KERN_ERR, "can't mount with "
4342                                  "both data=journal and dax");
4343                         goto failed_mount;
4344                 }
4345                 if (ext4_has_feature_encrypt(sb)) {
4346                         ext4_msg(sb, KERN_WARNING,
4347                                  "encrypted files will use data=ordered "
4348                                  "instead of data journaling mode");
4349                 }
4350                 if (test_opt(sb, DELALLOC))
4351                         clear_opt(sb, DELALLOC);
4352         } else {
4353                 sb->s_iflags |= SB_I_CGROUPWB;
4354         }
4355
4356         sb->s_flags = (sb->s_flags & ~SB_POSIXACL) |
4357                 (test_opt(sb, POSIX_ACL) ? SB_POSIXACL : 0);
4358
4359         if (le32_to_cpu(es->s_rev_level) == EXT4_GOOD_OLD_REV &&
4360             (ext4_has_compat_features(sb) ||
4361              ext4_has_ro_compat_features(sb) ||
4362              ext4_has_incompat_features(sb)))
4363                 ext4_msg(sb, KERN_WARNING,
4364                        "feature flags set on rev 0 fs, "
4365                        "running e2fsck is recommended");
4366
4367         if (es->s_creator_os == cpu_to_le32(EXT4_OS_HURD)) {
4368                 set_opt2(sb, HURD_COMPAT);
4369                 if (ext4_has_feature_64bit(sb)) {
4370                         ext4_msg(sb, KERN_ERR,
4371                                  "The Hurd can't support 64-bit file systems");
4372                         goto failed_mount;
4373                 }
4374
4375                 /*
4376                  * ea_inode feature uses l_i_version field which is not
4377                  * available in HURD_COMPAT mode.
4378                  */
4379                 if (ext4_has_feature_ea_inode(sb)) {
4380                         ext4_msg(sb, KERN_ERR,
4381                                  "ea_inode feature is not supported for Hurd");
4382                         goto failed_mount;
4383                 }
4384         }
4385
4386         if (IS_EXT2_SB(sb)) {
4387                 if (ext2_feature_set_ok(sb))
4388                         ext4_msg(sb, KERN_INFO, "mounting ext2 file system "
4389                                  "using the ext4 subsystem");
4390                 else {
4391                         /*
4392                          * If we're probing be silent, if this looks like
4393                          * it's actually an ext[34] filesystem.
4394                          */
4395                         if (silent && ext4_feature_set_ok(sb, sb_rdonly(sb)))
4396                                 goto failed_mount;
4397                         ext4_msg(sb, KERN_ERR, "couldn't mount as ext2 due "
4398                                  "to feature incompatibilities");
4399                         goto failed_mount;
4400                 }
4401         }
4402
4403         if (IS_EXT3_SB(sb)) {
4404                 if (ext3_feature_set_ok(sb))
4405                         ext4_msg(sb, KERN_INFO, "mounting ext3 file system "
4406                                  "using the ext4 subsystem");
4407                 else {
4408                         /*
4409                          * If we're probing be silent, if this looks like
4410                          * it's actually an ext4 filesystem.
4411                          */
4412                         if (silent && ext4_feature_set_ok(sb, sb_rdonly(sb)))
4413                                 goto failed_mount;
4414                         ext4_msg(sb, KERN_ERR, "couldn't mount as ext3 due "
4415                                  "to feature incompatibilities");
4416                         goto failed_mount;
4417                 }
4418         }
4419
4420         /*
4421          * Check feature flags regardless of the revision level, since we
4422          * previously didn't change the revision level when setting the flags,
4423          * so there is a chance incompat flags are set on a rev 0 filesystem.
4424          */
4425         if (!ext4_feature_set_ok(sb, (sb_rdonly(sb))))
4426                 goto failed_mount;
4427
4428         if (le16_to_cpu(sbi->s_es->s_reserved_gdt_blocks) > (blocksize / 4)) {
4429                 ext4_msg(sb, KERN_ERR,
4430                          "Number of reserved GDT blocks insanely large: %d",
4431                          le16_to_cpu(sbi->s_es->s_reserved_gdt_blocks));
4432                 goto failed_mount;
4433         }
4434
4435         if (bdev_dax_supported(sb->s_bdev, blocksize))
4436                 set_bit(EXT4_FLAGS_BDEV_IS_DAX, &sbi->s_ext4_flags);
4437
4438         if (sbi->s_mount_opt & EXT4_MOUNT_DAX_ALWAYS) {
4439                 if (ext4_has_feature_inline_data(sb)) {
4440                         ext4_msg(sb, KERN_ERR, "Cannot use DAX on a filesystem"
4441                                         " that may contain inline data");
4442                         goto failed_mount;
4443                 }
4444                 if (!test_bit(EXT4_FLAGS_BDEV_IS_DAX, &sbi->s_ext4_flags)) {
4445                         ext4_msg(sb, KERN_ERR,
4446                                 "DAX unsupported by block device.");
4447                         goto failed_mount;
4448                 }
4449         }
4450
4451         if (ext4_has_feature_encrypt(sb) && es->s_encryption_level) {
4452                 ext4_msg(sb, KERN_ERR, "Unsupported encryption level %d",
4453                          es->s_encryption_level);
4454                 goto failed_mount;
4455         }
4456
4457         if (sb->s_blocksize != blocksize) {
4458                 /*
4459                  * bh must be released before kill_bdev(), otherwise
4460                  * it won't be freed and its page also. kill_bdev()
4461                  * is called by sb_set_blocksize().
4462                  */
4463                 brelse(bh);
4464                 /* Validate the filesystem blocksize */
4465                 if (!sb_set_blocksize(sb, blocksize)) {
4466                         ext4_msg(sb, KERN_ERR, "bad block size %d",
4467                                         blocksize);
4468                         bh = NULL;
4469                         goto failed_mount;
4470                 }
4471
4472                 logical_sb_block = sb_block * EXT4_MIN_BLOCK_SIZE;
4473                 offset = do_div(logical_sb_block, blocksize);
4474                 bh = ext4_sb_bread_unmovable(sb, logical_sb_block);
4475                 if (IS_ERR(bh)) {
4476                         ext4_msg(sb, KERN_ERR,
4477                                "Can't read superblock on 2nd try");
4478                         ret = PTR_ERR(bh);
4479                         bh = NULL;
4480                         goto failed_mount;
4481                 }
4482                 es = (struct ext4_super_block *)(bh->b_data + offset);
4483                 sbi->s_es = es;
4484                 if (es->s_magic != cpu_to_le16(EXT4_SUPER_MAGIC)) {
4485                         ext4_msg(sb, KERN_ERR,
4486                                "Magic mismatch, very weird!");
4487                         goto failed_mount;
4488                 }
4489         }
4490
4491         has_huge_files = ext4_has_feature_huge_file(sb);
4492         sbi->s_bitmap_maxbytes = ext4_max_bitmap_size(sb->s_blocksize_bits,
4493                                                       has_huge_files);
4494         sb->s_maxbytes = ext4_max_size(sb->s_blocksize_bits, has_huge_files);
4495
4496         sbi->s_desc_size = le16_to_cpu(es->s_desc_size);
4497         if (ext4_has_feature_64bit(sb)) {
4498                 if (sbi->s_desc_size < EXT4_MIN_DESC_SIZE_64BIT ||
4499                     sbi->s_desc_size > EXT4_MAX_DESC_SIZE ||
4500                     !is_power_of_2(sbi->s_desc_size)) {
4501                         ext4_msg(sb, KERN_ERR,
4502                                "unsupported descriptor size %lu",
4503                                sbi->s_desc_size);
4504                         goto failed_mount;
4505                 }
4506         } else
4507                 sbi->s_desc_size = EXT4_MIN_DESC_SIZE;
4508
4509         sbi->s_blocks_per_group = le32_to_cpu(es->s_blocks_per_group);
4510         sbi->s_inodes_per_group = le32_to_cpu(es->s_inodes_per_group);
4511
4512         sbi->s_inodes_per_block = blocksize / EXT4_INODE_SIZE(sb);
4513         if (sbi->s_inodes_per_block == 0)
4514                 goto cantfind_ext4;
4515         if (sbi->s_inodes_per_group < sbi->s_inodes_per_block ||
4516             sbi->s_inodes_per_group > blocksize * 8) {
4517                 ext4_msg(sb, KERN_ERR, "invalid inodes per group: %lu\n",
4518                          sbi->s_inodes_per_group);
4519                 goto failed_mount;
4520         }
4521         sbi->s_itb_per_group = sbi->s_inodes_per_group /
4522                                         sbi->s_inodes_per_block;
4523         sbi->s_desc_per_block = blocksize / EXT4_DESC_SIZE(sb);
4524         sbi->s_sbh = bh;
4525         sbi->s_mount_state = le16_to_cpu(es->s_state);
4526         sbi->s_addr_per_block_bits = ilog2(EXT4_ADDR_PER_BLOCK(sb));
4527         sbi->s_desc_per_block_bits = ilog2(EXT4_DESC_PER_BLOCK(sb));
4528
4529         for (i = 0; i < 4; i++)
4530                 sbi->s_hash_seed[i] = le32_to_cpu(es->s_hash_seed[i]);
4531         sbi->s_def_hash_version = es->s_def_hash_version;
4532         if (ext4_has_feature_dir_index(sb)) {
4533                 i = le32_to_cpu(es->s_flags);
4534                 if (i & EXT2_FLAGS_UNSIGNED_HASH)
4535                         sbi->s_hash_unsigned = 3;
4536                 else if ((i & EXT2_FLAGS_SIGNED_HASH) == 0) {
4537 #ifdef __CHAR_UNSIGNED__
4538                         if (!sb_rdonly(sb))
4539                                 es->s_flags |=
4540                                         cpu_to_le32(EXT2_FLAGS_UNSIGNED_HASH);
4541                         sbi->s_hash_unsigned = 3;
4542 #else
4543                         if (!sb_rdonly(sb))
4544                                 es->s_flags |=
4545                                         cpu_to_le32(EXT2_FLAGS_SIGNED_HASH);
4546 #endif
4547                 }
4548         }
4549
4550         /* Handle clustersize */
4551         clustersize = BLOCK_SIZE << le32_to_cpu(es->s_log_cluster_size);
4552         if (ext4_has_feature_bigalloc(sb)) {
4553                 if (clustersize < blocksize) {
4554                         ext4_msg(sb, KERN_ERR,
4555                                  "cluster size (%d) smaller than "
4556                                  "block size (%d)", clustersize, blocksize);
4557                         goto failed_mount;
4558                 }
4559                 sbi->s_cluster_bits = le32_to_cpu(es->s_log_cluster_size) -
4560                         le32_to_cpu(es->s_log_block_size);
4561                 sbi->s_clusters_per_group =
4562                         le32_to_cpu(es->s_clusters_per_group);
4563                 if (sbi->s_clusters_per_group > blocksize * 8) {
4564                         ext4_msg(sb, KERN_ERR,
4565                                  "#clusters per group too big: %lu",
4566                                  sbi->s_clusters_per_group);
4567                         goto failed_mount;
4568                 }
4569                 if (sbi->s_blocks_per_group !=
4570                     (sbi->s_clusters_per_group * (clustersize / blocksize))) {
4571                         ext4_msg(sb, KERN_ERR, "blocks per group (%lu) and "
4572                                  "clusters per group (%lu) inconsistent",
4573                                  sbi->s_blocks_per_group,
4574                                  sbi->s_clusters_per_group);
4575                         goto failed_mount;
4576                 }
4577         } else {
4578                 if (clustersize != blocksize) {
4579                         ext4_msg(sb, KERN_ERR,
4580                                  "fragment/cluster size (%d) != "
4581                                  "block size (%d)", clustersize, blocksize);
4582                         goto failed_mount;
4583                 }
4584                 if (sbi->s_blocks_per_group > blocksize * 8) {
4585                         ext4_msg(sb, KERN_ERR,
4586                                  "#blocks per group too big: %lu",
4587                                  sbi->s_blocks_per_group);
4588                         goto failed_mount;
4589                 }
4590                 sbi->s_clusters_per_group = sbi->s_blocks_per_group;
4591                 sbi->s_cluster_bits = 0;
4592         }
4593         sbi->s_cluster_ratio = clustersize / blocksize;
4594
4595         /* Do we have standard group size of clustersize * 8 blocks ? */
4596         if (sbi->s_blocks_per_group == clustersize << 3)
4597                 set_opt2(sb, STD_GROUP_SIZE);
4598
4599         /*
4600          * Test whether we have more sectors than will fit in sector_t,
4601          * and whether the max offset is addressable by the page cache.
4602          */
4603         err = generic_check_addressable(sb->s_blocksize_bits,
4604                                         ext4_blocks_count(es));
4605         if (err) {
4606                 ext4_msg(sb, KERN_ERR, "filesystem"
4607                          " too large to mount safely on this system");
4608                 goto failed_mount;
4609         }
4610
4611         if (EXT4_BLOCKS_PER_GROUP(sb) == 0)
4612                 goto cantfind_ext4;
4613
4614         /* check blocks count against device size */
4615         blocks_count = sb->s_bdev->bd_inode->i_size >> sb->s_blocksize_bits;
4616         if (blocks_count && ext4_blocks_count(es) > blocks_count) {
4617                 ext4_msg(sb, KERN_WARNING, "bad geometry: block count %llu "
4618                        "exceeds size of device (%llu blocks)",
4619                        ext4_blocks_count(es), blocks_count);
4620                 goto failed_mount;
4621         }
4622
4623         /*
4624          * It makes no sense for the first data block to be beyond the end
4625          * of the filesystem.
4626          */
4627         if (le32_to_cpu(es->s_first_data_block) >= ext4_blocks_count(es)) {
4628                 ext4_msg(sb, KERN_WARNING, "bad geometry: first data "
4629                          "block %u is beyond end of filesystem (%llu)",
4630                          le32_to_cpu(es->s_first_data_block),
4631                          ext4_blocks_count(es));
4632                 goto failed_mount;
4633         }
4634         if ((es->s_first_data_block == 0) && (es->s_log_block_size == 0) &&
4635             (sbi->s_cluster_ratio == 1)) {
4636                 ext4_msg(sb, KERN_WARNING, "bad geometry: first data "
4637                          "block is 0 with a 1k block and cluster size");
4638                 goto failed_mount;
4639         }
4640
4641         blocks_count = (ext4_blocks_count(es) -
4642                         le32_to_cpu(es->s_first_data_block) +
4643                         EXT4_BLOCKS_PER_GROUP(sb) - 1);
4644         do_div(blocks_count, EXT4_BLOCKS_PER_GROUP(sb));
4645         if (blocks_count > ((uint64_t)1<<32) - EXT4_DESC_PER_BLOCK(sb)) {
4646                 ext4_msg(sb, KERN_WARNING, "groups count too large: %llu "
4647                        "(block count %llu, first data block %u, "
4648                        "blocks per group %lu)", blocks_count,
4649                        ext4_blocks_count(es),
4650                        le32_to_cpu(es->s_first_data_block),
4651                        EXT4_BLOCKS_PER_GROUP(sb));
4652                 goto failed_mount;
4653         }
4654         sbi->s_groups_count = blocks_count;
4655         sbi->s_blockfile_groups = min_t(ext4_group_t, sbi->s_groups_count,
4656                         (EXT4_MAX_BLOCK_FILE_PHYS / EXT4_BLOCKS_PER_GROUP(sb)));
4657         if (((u64)sbi->s_groups_count * sbi->s_inodes_per_group) !=
4658             le32_to_cpu(es->s_inodes_count)) {
4659                 ext4_msg(sb, KERN_ERR, "inodes count not valid: %u vs %llu",
4660                          le32_to_cpu(es->s_inodes_count),
4661                          ((u64)sbi->s_groups_count * sbi->s_inodes_per_group));
4662                 ret = -EINVAL;
4663                 goto failed_mount;
4664         }
4665         db_count = (sbi->s_groups_count + EXT4_DESC_PER_BLOCK(sb) - 1) /
4666                    EXT4_DESC_PER_BLOCK(sb);
4667         if (ext4_has_feature_meta_bg(sb)) {
4668                 if (le32_to_cpu(es->s_first_meta_bg) > db_count) {
4669                         ext4_msg(sb, KERN_WARNING,
4670                                  "first meta block group too large: %u "
4671                                  "(group descriptor block count %u)",
4672                                  le32_to_cpu(es->s_first_meta_bg), db_count);
4673                         goto failed_mount;
4674                 }
4675         }
4676         rcu_assign_pointer(sbi->s_group_desc,
4677                            kvmalloc_array(db_count,
4678                                           sizeof(struct buffer_head *),
4679                                           GFP_KERNEL));
4680         if (sbi->s_group_desc == NULL) {
4681                 ext4_msg(sb, KERN_ERR, "not enough memory");
4682                 ret = -ENOMEM;
4683                 goto failed_mount;
4684         }
4685
4686         bgl_lock_init(sbi->s_blockgroup_lock);
4687
4688         /* Pre-read the descriptors into the buffer cache */
4689         for (i = 0; i < db_count; i++) {
4690                 block = descriptor_loc(sb, logical_sb_block, i);
4691                 ext4_sb_breadahead_unmovable(sb, block);
4692         }
4693
4694         for (i = 0; i < db_count; i++) {
4695                 struct buffer_head *bh;
4696
4697                 block = descriptor_loc(sb, logical_sb_block, i);
4698                 bh = ext4_sb_bread_unmovable(sb, block);
4699                 if (IS_ERR(bh)) {
4700                         ext4_msg(sb, KERN_ERR,
4701                                "can't read group descriptor %d", i);
4702                         db_count = i;
4703                         ret = PTR_ERR(bh);
4704                         goto failed_mount2;
4705                 }
4706                 rcu_read_lock();
4707                 rcu_dereference(sbi->s_group_desc)[i] = bh;
4708                 rcu_read_unlock();
4709         }
4710         sbi->s_gdb_count = db_count;
4711         if (!ext4_check_descriptors(sb, logical_sb_block, &first_not_zeroed)) {
4712                 ext4_msg(sb, KERN_ERR, "group descriptors corrupted!");
4713                 ret = -EFSCORRUPTED;
4714                 goto failed_mount2;
4715         }
4716
4717         timer_setup(&sbi->s_err_report, print_daily_error_info, 0);
4718         spin_lock_init(&sbi->s_error_lock);
4719         INIT_WORK(&sbi->s_error_work, flush_stashed_error_work);
4720
4721         /* Register extent status tree shrinker */
4722         if (ext4_es_register_shrinker(sbi))
4723                 goto failed_mount3;
4724
4725         sbi->s_stripe = ext4_get_stripe_size(sbi);
4726         sbi->s_extent_max_zeroout_kb = 32;
4727
4728         /*
4729          * set up enough so that it can read an inode
4730          */
4731         sb->s_op = &ext4_sops;
4732         sb->s_export_op = &ext4_export_ops;
4733         sb->s_xattr = ext4_xattr_handlers;
4734 #ifdef CONFIG_FS_ENCRYPTION
4735         sb->s_cop = &ext4_cryptops;
4736 #endif
4737 #ifdef CONFIG_FS_VERITY
4738         sb->s_vop = &ext4_verityops;
4739 #endif
4740 #ifdef CONFIG_QUOTA
4741         sb->dq_op = &ext4_quota_operations;
4742         if (ext4_has_feature_quota(sb))
4743                 sb->s_qcop = &dquot_quotactl_sysfile_ops;
4744         else
4745                 sb->s_qcop = &ext4_qctl_operations;
4746         sb->s_quota_types = QTYPE_MASK_USR | QTYPE_MASK_GRP | QTYPE_MASK_PRJ;
4747 #endif
4748         memcpy(&sb->s_uuid, es->s_uuid, sizeof(es->s_uuid));
4749
4750         INIT_LIST_HEAD(&sbi->s_orphan); /* unlinked but open files */
4751         mutex_init(&sbi->s_orphan_lock);
4752
4753         /* Initialize fast commit stuff */
4754         atomic_set(&sbi->s_fc_subtid, 0);
4755         atomic_set(&sbi->s_fc_ineligible_updates, 0);
4756         INIT_LIST_HEAD(&sbi->s_fc_q[FC_Q_MAIN]);
4757         INIT_LIST_HEAD(&sbi->s_fc_q[FC_Q_STAGING]);
4758         INIT_LIST_HEAD(&sbi->s_fc_dentry_q[FC_Q_MAIN]);
4759         INIT_LIST_HEAD(&sbi->s_fc_dentry_q[FC_Q_STAGING]);
4760         sbi->s_fc_bytes = 0;
4761         ext4_clear_mount_flag(sb, EXT4_MF_FC_INELIGIBLE);
4762         ext4_clear_mount_flag(sb, EXT4_MF_FC_COMMITTING);
4763         spin_lock_init(&sbi->s_fc_lock);
4764         memset(&sbi->s_fc_stats, 0, sizeof(sbi->s_fc_stats));
4765         sbi->s_fc_replay_state.fc_regions = NULL;
4766         sbi->s_fc_replay_state.fc_regions_size = 0;
4767         sbi->s_fc_replay_state.fc_regions_used = 0;
4768         sbi->s_fc_replay_state.fc_regions_valid = 0;
4769         sbi->s_fc_replay_state.fc_modified_inodes = NULL;
4770         sbi->s_fc_replay_state.fc_modified_inodes_size = 0;
4771         sbi->s_fc_replay_state.fc_modified_inodes_used = 0;
4772
4773         sb->s_root = NULL;
4774
4775         needs_recovery = (es->s_last_orphan != 0 ||
4776                           ext4_has_feature_journal_needs_recovery(sb));
4777
4778         if (ext4_has_feature_mmp(sb) && !sb_rdonly(sb))
4779                 if (ext4_multi_mount_protect(sb, le64_to_cpu(es->s_mmp_block)))
4780                         goto failed_mount3a;
4781
4782         /*
4783          * The first inode we look at is the journal inode.  Don't try
4784          * root first: it may be modified in the journal!
4785          */
4786         if (!test_opt(sb, NOLOAD) && ext4_has_feature_journal(sb)) {
4787                 err = ext4_load_journal(sb, es, parsed_opts.journal_devnum);
4788                 if (err)
4789                         goto failed_mount3a;
4790         } else if (test_opt(sb, NOLOAD) && !sb_rdonly(sb) &&
4791                    ext4_has_feature_journal_needs_recovery(sb)) {
4792                 ext4_msg(sb, KERN_ERR, "required journal recovery "
4793                        "suppressed and not mounted read-only");
4794                 goto failed_mount_wq;
4795         } else {
4796                 /* Nojournal mode, all journal mount options are illegal */
4797                 if (test_opt2(sb, EXPLICIT_JOURNAL_CHECKSUM)) {
4798                         ext4_msg(sb, KERN_ERR, "can't mount with "
4799                                  "journal_checksum, fs mounted w/o journal");
4800                         goto failed_mount_wq;
4801                 }
4802                 if (test_opt(sb, JOURNAL_ASYNC_COMMIT)) {
4803                         ext4_msg(sb, KERN_ERR, "can't mount with "
4804                                  "journal_async_commit, fs mounted w/o journal");
4805                         goto failed_mount_wq;
4806                 }
4807                 if (sbi->s_commit_interval != JBD2_DEFAULT_MAX_COMMIT_AGE*HZ) {
4808                         ext4_msg(sb, KERN_ERR, "can't mount with "
4809                                  "commit=%lu, fs mounted w/o journal",
4810                                  sbi->s_commit_interval / HZ);
4811                         goto failed_mount_wq;
4812                 }
4813                 if (EXT4_MOUNT_DATA_FLAGS &
4814                     (sbi->s_mount_opt ^ sbi->s_def_mount_opt)) {
4815                         ext4_msg(sb, KERN_ERR, "can't mount with "
4816                                  "data=, fs mounted w/o journal");
4817                         goto failed_mount_wq;
4818                 }
4819                 sbi->s_def_mount_opt &= ~EXT4_MOUNT_JOURNAL_CHECKSUM;
4820                 clear_opt(sb, JOURNAL_CHECKSUM);
4821                 clear_opt(sb, DATA_FLAGS);
4822                 clear_opt2(sb, JOURNAL_FAST_COMMIT);
4823                 sbi->s_journal = NULL;
4824                 needs_recovery = 0;
4825                 goto no_journal;
4826         }
4827
4828         if (ext4_has_feature_64bit(sb) &&
4829             !jbd2_journal_set_features(EXT4_SB(sb)->s_journal, 0, 0,
4830                                        JBD2_FEATURE_INCOMPAT_64BIT)) {
4831                 ext4_msg(sb, KERN_ERR, "Failed to set 64-bit journal feature");
4832                 goto failed_mount_wq;
4833         }
4834
4835         if (!set_journal_csum_feature_set(sb)) {
4836                 ext4_msg(sb, KERN_ERR, "Failed to set journal checksum "
4837                          "feature set");
4838                 goto failed_mount_wq;
4839         }
4840
4841         if (test_opt2(sb, JOURNAL_FAST_COMMIT) &&
4842                 !jbd2_journal_set_features(EXT4_SB(sb)->s_journal, 0, 0,
4843                                           JBD2_FEATURE_INCOMPAT_FAST_COMMIT)) {
4844                 ext4_msg(sb, KERN_ERR,
4845                         "Failed to set fast commit journal feature");
4846                 goto failed_mount_wq;
4847         }
4848
4849         /* We have now updated the journal if required, so we can
4850          * validate the data journaling mode. */
4851         switch (test_opt(sb, DATA_FLAGS)) {
4852         case 0:
4853                 /* No mode set, assume a default based on the journal
4854                  * capabilities: ORDERED_DATA if the journal can
4855                  * cope, else JOURNAL_DATA
4856                  */
4857                 if (jbd2_journal_check_available_features
4858                     (sbi->s_journal, 0, 0, JBD2_FEATURE_INCOMPAT_REVOKE)) {
4859                         set_opt(sb, ORDERED_DATA);
4860                         sbi->s_def_mount_opt |= EXT4_MOUNT_ORDERED_DATA;
4861                 } else {
4862                         set_opt(sb, JOURNAL_DATA);
4863                         sbi->s_def_mount_opt |= EXT4_MOUNT_JOURNAL_DATA;
4864                 }
4865                 break;
4866
4867         case EXT4_MOUNT_ORDERED_DATA:
4868         case EXT4_MOUNT_WRITEBACK_DATA:
4869                 if (!jbd2_journal_check_available_features
4870                     (sbi->s_journal, 0, 0, JBD2_FEATURE_INCOMPAT_REVOKE)) {
4871                         ext4_msg(sb, KERN_ERR, "Journal does not support "
4872                                "requested data journaling mode");
4873                         goto failed_mount_wq;
4874                 }
4875                 break;
4876         default:
4877                 break;
4878         }
4879
4880         if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_ORDERED_DATA &&
4881             test_opt(sb, JOURNAL_ASYNC_COMMIT)) {
4882                 ext4_msg(sb, KERN_ERR, "can't mount with "
4883                         "journal_async_commit in data=ordered mode");
4884                 goto failed_mount_wq;
4885         }
4886
4887         set_task_ioprio(sbi->s_journal->j_task, parsed_opts.journal_ioprio);
4888
4889         sbi->s_journal->j_submit_inode_data_buffers =
4890                 ext4_journal_submit_inode_data_buffers;
4891         sbi->s_journal->j_finish_inode_data_buffers =
4892                 ext4_journal_finish_inode_data_buffers;
4893
4894 no_journal:
4895         if (!test_opt(sb, NO_MBCACHE)) {
4896                 sbi->s_ea_block_cache = ext4_xattr_create_cache();
4897                 if (!sbi->s_ea_block_cache) {
4898                         ext4_msg(sb, KERN_ERR,
4899                                  "Failed to create ea_block_cache");
4900                         goto failed_mount_wq;
4901                 }
4902
4903                 if (ext4_has_feature_ea_inode(sb)) {
4904                         sbi->s_ea_inode_cache = ext4_xattr_create_cache();
4905                         if (!sbi->s_ea_inode_cache) {
4906                                 ext4_msg(sb, KERN_ERR,
4907                                          "Failed to create ea_inode_cache");
4908                                 goto failed_mount_wq;
4909                         }
4910                 }
4911         }
4912
4913         if (ext4_has_feature_verity(sb) && blocksize != PAGE_SIZE) {
4914                 ext4_msg(sb, KERN_ERR, "Unsupported blocksize for fs-verity");
4915                 goto failed_mount_wq;
4916         }
4917
4918         if (DUMMY_ENCRYPTION_ENABLED(sbi) && !sb_rdonly(sb) &&
4919             !ext4_has_feature_encrypt(sb)) {
4920                 ext4_set_feature_encrypt(sb);
4921                 ext4_commit_super(sb);
4922         }
4923
4924         /*
4925          * Get the # of file system overhead blocks from the
4926          * superblock if present.
4927          */
4928         if (es->s_overhead_clusters)
4929                 sbi->s_overhead = le32_to_cpu(es->s_overhead_clusters);
4930         else {
4931                 err = ext4_calculate_overhead(sb);
4932                 if (err)
4933                         goto failed_mount_wq;
4934         }
4935
4936         /*
4937          * The maximum number of concurrent works can be high and
4938          * concurrency isn't really necessary.  Limit it to 1.
4939          */
4940         EXT4_SB(sb)->rsv_conversion_wq =
4941                 alloc_workqueue("ext4-rsv-conversion", WQ_MEM_RECLAIM | WQ_UNBOUND, 1);
4942         if (!EXT4_SB(sb)->rsv_conversion_wq) {
4943                 printk(KERN_ERR "EXT4-fs: failed to create workqueue\n");
4944                 ret = -ENOMEM;
4945                 goto failed_mount4;
4946         }
4947
4948         /*
4949          * The jbd2_journal_load will have done any necessary log recovery,
4950          * so we can safely mount the rest of the filesystem now.
4951          */
4952
4953         root = ext4_iget(sb, EXT4_ROOT_INO, EXT4_IGET_SPECIAL);
4954         if (IS_ERR(root)) {
4955                 ext4_msg(sb, KERN_ERR, "get root inode failed");
4956                 ret = PTR_ERR(root);
4957                 root = NULL;
4958                 goto failed_mount4;
4959         }
4960         if (!S_ISDIR(root->i_mode) || !root->i_blocks || !root->i_size) {
4961                 ext4_msg(sb, KERN_ERR, "corrupt root inode, run e2fsck");
4962                 iput(root);
4963                 goto failed_mount4;
4964         }
4965
4966         sb->s_root = d_make_root(root);
4967         if (!sb->s_root) {
4968                 ext4_msg(sb, KERN_ERR, "get root dentry failed");
4969                 ret = -ENOMEM;
4970                 goto failed_mount4;
4971         }
4972
4973         ret = ext4_setup_super(sb, es, sb_rdonly(sb));
4974         if (ret == -EROFS) {
4975                 sb->s_flags |= SB_RDONLY;
4976                 ret = 0;
4977         } else if (ret)
4978                 goto failed_mount4a;
4979
4980         ext4_set_resv_clusters(sb);
4981
4982         if (test_opt(sb, BLOCK_VALIDITY)) {
4983                 err = ext4_setup_system_zone(sb);
4984                 if (err) {
4985                         ext4_msg(sb, KERN_ERR, "failed to initialize system "
4986                                  "zone (%d)", err);
4987                         goto failed_mount4a;
4988                 }
4989         }
4990         ext4_fc_replay_cleanup(sb);
4991
4992         ext4_ext_init(sb);
4993
4994         /*
4995          * Enable optimize_scan if number of groups is > threshold. This can be
4996          * turned off by passing "mb_optimize_scan=0". This can also be
4997          * turned on forcefully by passing "mb_optimize_scan=1".
4998          */
4999         if (parsed_opts.mb_optimize_scan == 1)
5000                 set_opt2(sb, MB_OPTIMIZE_SCAN);
5001         else if (parsed_opts.mb_optimize_scan == 0)
5002                 clear_opt2(sb, MB_OPTIMIZE_SCAN);
5003         else if (sbi->s_groups_count >= MB_DEFAULT_LINEAR_SCAN_THRESHOLD)
5004                 set_opt2(sb, MB_OPTIMIZE_SCAN);
5005
5006         err = ext4_mb_init(sb);
5007         if (err) {
5008                 ext4_msg(sb, KERN_ERR, "failed to initialize mballoc (%d)",
5009                          err);
5010                 goto failed_mount5;
5011         }
5012
5013         /*
5014          * We can only set up the journal commit callback once
5015          * mballoc is initialized
5016          */
5017         if (sbi->s_journal)
5018                 sbi->s_journal->j_commit_callback =
5019                         ext4_journal_commit_callback;
5020
5021         block = ext4_count_free_clusters(sb);
5022         ext4_free_blocks_count_set(sbi->s_es,
5023                                    EXT4_C2B(sbi, block));
5024         err = percpu_counter_init(&sbi->s_freeclusters_counter, block,
5025                                   GFP_KERNEL);
5026         if (!err) {
5027                 unsigned long freei = ext4_count_free_inodes(sb);
5028                 sbi->s_es->s_free_inodes_count = cpu_to_le32(freei);
5029                 err = percpu_counter_init(&sbi->s_freeinodes_counter, freei,
5030                                           GFP_KERNEL);
5031         }
5032         if (!err)
5033                 err = percpu_counter_init(&sbi->s_dirs_counter,
5034                                           ext4_count_dirs(sb), GFP_KERNEL);
5035         if (!err)
5036                 err = percpu_counter_init(&sbi->s_dirtyclusters_counter, 0,
5037                                           GFP_KERNEL);
5038         if (!err)
5039                 err = percpu_counter_init(&sbi->s_sra_exceeded_retry_limit, 0,
5040                                           GFP_KERNEL);
5041         if (!err)
5042                 err = percpu_init_rwsem(&sbi->s_writepages_rwsem);
5043
5044         if (err) {
5045                 ext4_msg(sb, KERN_ERR, "insufficient memory");
5046                 goto failed_mount6;
5047         }
5048
5049         if (ext4_has_feature_flex_bg(sb))
5050                 if (!ext4_fill_flex_info(sb)) {
5051                         ext4_msg(sb, KERN_ERR,
5052                                "unable to initialize "
5053                                "flex_bg meta info!");
5054                         ret = -ENOMEM;
5055                         goto failed_mount6;
5056                 }
5057
5058         err = ext4_register_li_request(sb, first_not_zeroed);
5059         if (err)
5060                 goto failed_mount6;
5061
5062         err = ext4_register_sysfs(sb);
5063         if (err)
5064                 goto failed_mount7;
5065
5066 #ifdef CONFIG_QUOTA
5067         /* Enable quota usage during mount. */
5068         if (ext4_has_feature_quota(sb) && !sb_rdonly(sb)) {
5069                 err = ext4_enable_quotas(sb);
5070                 if (err)
5071                         goto failed_mount8;
5072         }
5073 #endif  /* CONFIG_QUOTA */
5074
5075         /*
5076          * Save the original bdev mapping's wb_err value which could be
5077          * used to detect the metadata async write error.
5078          */
5079         spin_lock_init(&sbi->s_bdev_wb_lock);
5080         errseq_check_and_advance(&sb->s_bdev->bd_inode->i_mapping->wb_err,
5081                                  &sbi->s_bdev_wb_err);
5082         sb->s_bdev->bd_super = sb;
5083         EXT4_SB(sb)->s_mount_state |= EXT4_ORPHAN_FS;
5084         ext4_orphan_cleanup(sb, es);
5085         EXT4_SB(sb)->s_mount_state &= ~EXT4_ORPHAN_FS;
5086         if (needs_recovery) {
5087                 ext4_msg(sb, KERN_INFO, "recovery complete");
5088                 err = ext4_mark_recovery_complete(sb, es);
5089                 if (err)
5090                         goto failed_mount8;
5091         }
5092         if (EXT4_SB(sb)->s_journal) {
5093                 if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA)
5094                         descr = " journalled data mode";
5095                 else if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_ORDERED_DATA)
5096                         descr = " ordered data mode";
5097                 else
5098                         descr = " writeback data mode";
5099         } else
5100                 descr = "out journal";
5101
5102         if (test_opt(sb, DISCARD)) {
5103                 struct request_queue *q = bdev_get_queue(sb->s_bdev);
5104                 if (!blk_queue_discard(q))
5105                         ext4_msg(sb, KERN_WARNING,
5106                                  "mounting with \"discard\" option, but "
5107                                  "the device does not support discard");
5108         }
5109
5110         if (___ratelimit(&ext4_mount_msg_ratelimit, "EXT4-fs mount"))
5111                 ext4_msg(sb, KERN_INFO, "mounted filesystem with%s. "
5112                          "Opts: %.*s%s%s. Quota mode: %s.", descr,
5113                          (int) sizeof(sbi->s_es->s_mount_opts),
5114                          sbi->s_es->s_mount_opts,
5115                          *sbi->s_es->s_mount_opts ? "; " : "", orig_data,
5116                          ext4_quota_mode(sb));
5117
5118         if (es->s_error_count)
5119                 mod_timer(&sbi->s_err_report, jiffies + 300*HZ); /* 5 minutes */
5120
5121         /* Enable message ratelimiting. Default is 10 messages per 5 secs. */
5122         ratelimit_state_init(&sbi->s_err_ratelimit_state, 5 * HZ, 10);
5123         ratelimit_state_init(&sbi->s_warning_ratelimit_state, 5 * HZ, 10);
5124         ratelimit_state_init(&sbi->s_msg_ratelimit_state, 5 * HZ, 10);
5125         atomic_set(&sbi->s_warning_count, 0);
5126         atomic_set(&sbi->s_msg_count, 0);
5127
5128         kfree(orig_data);
5129         return 0;
5130
5131 cantfind_ext4:
5132         if (!silent)
5133                 ext4_msg(sb, KERN_ERR, "VFS: Can't find ext4 filesystem");
5134         goto failed_mount;
5135
5136 failed_mount8:
5137         ext4_unregister_sysfs(sb);
5138         kobject_put(&sbi->s_kobj);
5139 failed_mount7:
5140         ext4_unregister_li_request(sb);
5141 failed_mount6:
5142         ext4_mb_release(sb);
5143         rcu_read_lock();
5144         flex_groups = rcu_dereference(sbi->s_flex_groups);
5145         if (flex_groups) {
5146                 for (i = 0; i < sbi->s_flex_groups_allocated; i++)
5147                         kvfree(flex_groups[i]);
5148                 kvfree(flex_groups);
5149         }
5150         rcu_read_unlock();
5151         percpu_counter_destroy(&sbi->s_freeclusters_counter);
5152         percpu_counter_destroy(&sbi->s_freeinodes_counter);
5153         percpu_counter_destroy(&sbi->s_dirs_counter);
5154         percpu_counter_destroy(&sbi->s_dirtyclusters_counter);
5155         percpu_counter_destroy(&sbi->s_sra_exceeded_retry_limit);
5156         percpu_free_rwsem(&sbi->s_writepages_rwsem);
5157 failed_mount5:
5158         ext4_ext_release(sb);
5159         ext4_release_system_zone(sb);
5160 failed_mount4a:
5161         dput(sb->s_root);
5162         sb->s_root = NULL;
5163 failed_mount4:
5164         ext4_msg(sb, KERN_ERR, "mount failed");
5165         if (EXT4_SB(sb)->rsv_conversion_wq)
5166                 destroy_workqueue(EXT4_SB(sb)->rsv_conversion_wq);
5167 failed_mount_wq:
5168         ext4_xattr_destroy_cache(sbi->s_ea_inode_cache);
5169         sbi->s_ea_inode_cache = NULL;
5170
5171         ext4_xattr_destroy_cache(sbi->s_ea_block_cache);
5172         sbi->s_ea_block_cache = NULL;
5173
5174         if (sbi->s_journal) {
5175                 jbd2_journal_destroy(sbi->s_journal);
5176                 sbi->s_journal = NULL;
5177         }
5178 failed_mount3a:
5179         ext4_es_unregister_shrinker(sbi);
5180 failed_mount3:
5181         flush_work(&sbi->s_error_work);
5182         del_timer_sync(&sbi->s_err_report);
5183         ext4_stop_mmpd(sbi);
5184 failed_mount2:
5185         rcu_read_lock();
5186         group_desc = rcu_dereference(sbi->s_group_desc);
5187         for (i = 0; i < db_count; i++)
5188                 brelse(group_desc[i]);
5189         kvfree(group_desc);
5190         rcu_read_unlock();
5191 failed_mount:
5192         if (sbi->s_chksum_driver)
5193                 crypto_free_shash(sbi->s_chksum_driver);
5194
5195 #ifdef CONFIG_UNICODE
5196         utf8_unload(sb->s_encoding);
5197 #endif
5198
5199 #ifdef CONFIG_QUOTA
5200         for (i = 0; i < EXT4_MAXQUOTAS; i++)
5201                 kfree(get_qf_name(sb, sbi, i));
5202 #endif
5203         fscrypt_free_dummy_policy(&sbi->s_dummy_enc_policy);
5204         /* ext4_blkdev_remove() calls kill_bdev(), release bh before it. */
5205         brelse(bh);
5206         ext4_blkdev_remove(sbi);
5207 out_fail:
5208         sb->s_fs_info = NULL;
5209         kfree(sbi->s_blockgroup_lock);
5210 out_free_base:
5211         kfree(sbi);
5212         kfree(orig_data);
5213         fs_put_dax(dax_dev);
5214         return err ? err : ret;
5215 }
5216
5217 /*
5218  * Setup any per-fs journal parameters now.  We'll do this both on
5219  * initial mount, once the journal has been initialised but before we've
5220  * done any recovery; and again on any subsequent remount.
5221  */
5222 static void ext4_init_journal_params(struct super_block *sb, journal_t *journal)
5223 {
5224         struct ext4_sb_info *sbi = EXT4_SB(sb);
5225
5226         journal->j_commit_interval = sbi->s_commit_interval;
5227         journal->j_min_batch_time = sbi->s_min_batch_time;
5228         journal->j_max_batch_time = sbi->s_max_batch_time;
5229         ext4_fc_init(sb, journal);
5230
5231         write_lock(&journal->j_state_lock);
5232         if (test_opt(sb, BARRIER))
5233                 journal->j_flags |= JBD2_BARRIER;
5234         else
5235                 journal->j_flags &= ~JBD2_BARRIER;
5236         if (test_opt(sb, DATA_ERR_ABORT))
5237                 journal->j_flags |= JBD2_ABORT_ON_SYNCDATA_ERR;
5238         else
5239                 journal->j_flags &= ~JBD2_ABORT_ON_SYNCDATA_ERR;
5240         write_unlock(&journal->j_state_lock);
5241 }
5242
5243 static struct inode *ext4_get_journal_inode(struct super_block *sb,
5244                                              unsigned int journal_inum)
5245 {
5246         struct inode *journal_inode;
5247
5248         /*
5249          * Test for the existence of a valid inode on disk.  Bad things
5250          * happen if we iget() an unused inode, as the subsequent iput()
5251          * will try to delete it.
5252          */
5253         journal_inode = ext4_iget(sb, journal_inum, EXT4_IGET_SPECIAL);
5254         if (IS_ERR(journal_inode)) {
5255                 ext4_msg(sb, KERN_ERR, "no journal found");
5256                 return NULL;
5257         }
5258         if (!journal_inode->i_nlink) {
5259                 make_bad_inode(journal_inode);
5260                 iput(journal_inode);
5261                 ext4_msg(sb, KERN_ERR, "journal inode is deleted");
5262                 return NULL;
5263         }
5264
5265         jbd_debug(2, "Journal inode found at %p: %lld bytes\n",
5266                   journal_inode, journal_inode->i_size);
5267         if (!S_ISREG(journal_inode->i_mode)) {
5268                 ext4_msg(sb, KERN_ERR, "invalid journal inode");
5269                 iput(journal_inode);
5270                 return NULL;
5271         }
5272         return journal_inode;
5273 }
5274
5275 static journal_t *ext4_get_journal(struct super_block *sb,
5276                                    unsigned int journal_inum)
5277 {
5278         struct inode *journal_inode;
5279         journal_t *journal;
5280
5281         if (WARN_ON_ONCE(!ext4_has_feature_journal(sb)))
5282                 return NULL;
5283
5284         journal_inode = ext4_get_journal_inode(sb, journal_inum);
5285         if (!journal_inode)
5286                 return NULL;
5287
5288         journal = jbd2_journal_init_inode(journal_inode);
5289         if (!journal) {
5290                 ext4_msg(sb, KERN_ERR, "Could not load journal inode");
5291                 iput(journal_inode);
5292                 return NULL;
5293         }
5294         journal->j_private = sb;
5295         ext4_init_journal_params(sb, journal);
5296         return journal;
5297 }
5298
5299 static journal_t *ext4_get_dev_journal(struct super_block *sb,
5300                                        dev_t j_dev)
5301 {
5302         struct buffer_head *bh;
5303         journal_t *journal;
5304         ext4_fsblk_t start;
5305         ext4_fsblk_t len;
5306         int hblock, blocksize;
5307         ext4_fsblk_t sb_block;
5308         unsigned long offset;
5309         struct ext4_super_block *es;
5310         struct block_device *bdev;
5311
5312         if (WARN_ON_ONCE(!ext4_has_feature_journal(sb)))
5313                 return NULL;
5314
5315         bdev = ext4_blkdev_get(j_dev, sb);
5316         if (bdev == NULL)
5317                 return NULL;
5318
5319         blocksize = sb->s_blocksize;
5320         hblock = bdev_logical_block_size(bdev);
5321         if (blocksize < hblock) {
5322                 ext4_msg(sb, KERN_ERR,
5323                         "blocksize too small for journal device");
5324                 goto out_bdev;
5325         }
5326
5327         sb_block = EXT4_MIN_BLOCK_SIZE / blocksize;
5328         offset = EXT4_MIN_BLOCK_SIZE % blocksize;
5329         set_blocksize(bdev, blocksize);
5330         if (!(bh = __bread(bdev, sb_block, blocksize))) {
5331                 ext4_msg(sb, KERN_ERR, "couldn't read superblock of "
5332                        "external journal");
5333                 goto out_bdev;
5334         }
5335
5336         es = (struct ext4_super_block *) (bh->b_data + offset);
5337         if ((le16_to_cpu(es->s_magic) != EXT4_SUPER_MAGIC) ||
5338             !(le32_to_cpu(es->s_feature_incompat) &
5339               EXT4_FEATURE_INCOMPAT_JOURNAL_DEV)) {
5340                 ext4_msg(sb, KERN_ERR, "external journal has "
5341                                         "bad superblock");
5342                 brelse(bh);
5343                 goto out_bdev;
5344         }
5345
5346         if ((le32_to_cpu(es->s_feature_ro_compat) &
5347              EXT4_FEATURE_RO_COMPAT_METADATA_CSUM) &&
5348             es->s_checksum != ext4_superblock_csum(sb, es)) {
5349                 ext4_msg(sb, KERN_ERR, "external journal has "
5350                                        "corrupt superblock");
5351                 brelse(bh);
5352                 goto out_bdev;
5353         }
5354
5355         if (memcmp(EXT4_SB(sb)->s_es->s_journal_uuid, es->s_uuid, 16)) {
5356                 ext4_msg(sb, KERN_ERR, "journal UUID does not match");
5357                 brelse(bh);
5358                 goto out_bdev;
5359         }
5360
5361         len = ext4_blocks_count(es);
5362         start = sb_block + 1;
5363         brelse(bh);     /* we're done with the superblock */
5364
5365         journal = jbd2_journal_init_dev(bdev, sb->s_bdev,
5366                                         start, len, blocksize);
5367         if (!journal) {
5368                 ext4_msg(sb, KERN_ERR, "failed to create device journal");
5369                 goto out_bdev;
5370         }
5371         journal->j_private = sb;
5372         if (ext4_read_bh_lock(journal->j_sb_buffer, REQ_META | REQ_PRIO, true)) {
5373                 ext4_msg(sb, KERN_ERR, "I/O error on journal device");
5374                 goto out_journal;
5375         }
5376         if (be32_to_cpu(journal->j_superblock->s_nr_users) != 1) {
5377                 ext4_msg(sb, KERN_ERR, "External journal has more than one "
5378                                         "user (unsupported) - %d",
5379                         be32_to_cpu(journal->j_superblock->s_nr_users));
5380                 goto out_journal;
5381         }
5382         EXT4_SB(sb)->s_journal_bdev = bdev;
5383         ext4_init_journal_params(sb, journal);
5384         return journal;
5385
5386 out_journal:
5387         jbd2_journal_destroy(journal);
5388 out_bdev:
5389         ext4_blkdev_put(bdev);
5390         return NULL;
5391 }
5392
5393 static int ext4_load_journal(struct super_block *sb,
5394                              struct ext4_super_block *es,
5395                              unsigned long journal_devnum)
5396 {
5397         journal_t *journal;
5398         unsigned int journal_inum = le32_to_cpu(es->s_journal_inum);
5399         dev_t journal_dev;
5400         int err = 0;
5401         int really_read_only;
5402         int journal_dev_ro;
5403
5404         if (WARN_ON_ONCE(!ext4_has_feature_journal(sb)))
5405                 return -EFSCORRUPTED;
5406
5407         if (journal_devnum &&
5408             journal_devnum != le32_to_cpu(es->s_journal_dev)) {
5409                 ext4_msg(sb, KERN_INFO, "external journal device major/minor "
5410                         "numbers have changed");
5411                 journal_dev = new_decode_dev(journal_devnum);
5412         } else
5413                 journal_dev = new_decode_dev(le32_to_cpu(es->s_journal_dev));
5414
5415         if (journal_inum && journal_dev) {
5416                 ext4_msg(sb, KERN_ERR,
5417                          "filesystem has both journal inode and journal device!");
5418                 return -EINVAL;
5419         }
5420
5421         if (journal_inum) {
5422                 journal = ext4_get_journal(sb, journal_inum);
5423                 if (!journal)
5424                         return -EINVAL;
5425         } else {
5426                 journal = ext4_get_dev_journal(sb, journal_dev);
5427                 if (!journal)
5428                         return -EINVAL;
5429         }
5430
5431         journal_dev_ro = bdev_read_only(journal->j_dev);
5432         really_read_only = bdev_read_only(sb->s_bdev) | journal_dev_ro;
5433
5434         if (journal_dev_ro && !sb_rdonly(sb)) {
5435                 ext4_msg(sb, KERN_ERR,
5436                          "journal device read-only, try mounting with '-o ro'");
5437                 err = -EROFS;
5438                 goto err_out;
5439         }
5440
5441         /*
5442          * Are we loading a blank journal or performing recovery after a
5443          * crash?  For recovery, we need to check in advance whether we
5444          * can get read-write access to the device.
5445          */
5446         if (ext4_has_feature_journal_needs_recovery(sb)) {
5447                 if (sb_rdonly(sb)) {
5448                         ext4_msg(sb, KERN_INFO, "INFO: recovery "
5449                                         "required on readonly filesystem");
5450                         if (really_read_only) {
5451                                 ext4_msg(sb, KERN_ERR, "write access "
5452                                         "unavailable, cannot proceed "
5453                                         "(try mounting with noload)");
5454                                 err = -EROFS;
5455                                 goto err_out;
5456                         }
5457                         ext4_msg(sb, KERN_INFO, "write access will "
5458                                "be enabled during recovery");
5459                 }
5460         }
5461
5462         if (!(journal->j_flags & JBD2_BARRIER))
5463                 ext4_msg(sb, KERN_INFO, "barriers disabled");
5464
5465         if (!ext4_has_feature_journal_needs_recovery(sb))
5466                 err = jbd2_journal_wipe(journal, !really_read_only);
5467         if (!err) {
5468                 char *save = kmalloc(EXT4_S_ERR_LEN, GFP_KERNEL);
5469                 if (save)
5470                         memcpy(save, ((char *) es) +
5471                                EXT4_S_ERR_START, EXT4_S_ERR_LEN);
5472                 err = jbd2_journal_load(journal);
5473                 if (save)
5474                         memcpy(((char *) es) + EXT4_S_ERR_START,
5475                                save, EXT4_S_ERR_LEN);
5476                 kfree(save);
5477         }
5478
5479         if (err) {
5480                 ext4_msg(sb, KERN_ERR, "error loading journal");
5481                 goto err_out;
5482         }
5483
5484         EXT4_SB(sb)->s_journal = journal;
5485         err = ext4_clear_journal_err(sb, es);
5486         if (err) {
5487                 EXT4_SB(sb)->s_journal = NULL;
5488                 jbd2_journal_destroy(journal);
5489                 return err;
5490         }
5491
5492         if (!really_read_only && journal_devnum &&
5493             journal_devnum != le32_to_cpu(es->s_journal_dev)) {
5494                 es->s_journal_dev = cpu_to_le32(journal_devnum);
5495
5496                 /* Make sure we flush the recovery flag to disk. */
5497                 ext4_commit_super(sb);
5498         }
5499
5500         return 0;
5501
5502 err_out:
5503         jbd2_journal_destroy(journal);
5504         return err;
5505 }
5506
5507 /* Copy state of EXT4_SB(sb) into buffer for on-disk superblock */
5508 static void ext4_update_super(struct super_block *sb)
5509 {
5510         struct ext4_sb_info *sbi = EXT4_SB(sb);
5511         struct ext4_super_block *es = sbi->s_es;
5512         struct buffer_head *sbh = sbi->s_sbh;
5513
5514         lock_buffer(sbh);
5515         /*
5516          * If the file system is mounted read-only, don't update the
5517          * superblock write time.  This avoids updating the superblock
5518          * write time when we are mounting the root file system
5519          * read/only but we need to replay the journal; at that point,
5520          * for people who are east of GMT and who make their clock
5521          * tick in localtime for Windows bug-for-bug compatibility,
5522          * the clock is set in the future, and this will cause e2fsck
5523          * to complain and force a full file system check.
5524          */
5525         if (!(sb->s_flags & SB_RDONLY))
5526                 ext4_update_tstamp(es, s_wtime);
5527         es->s_kbytes_written =
5528                 cpu_to_le64(sbi->s_kbytes_written +
5529                     ((part_stat_read(sb->s_bdev, sectors[STAT_WRITE]) -
5530                       sbi->s_sectors_written_start) >> 1));
5531         if (percpu_counter_initialized(&sbi->s_freeclusters_counter))
5532                 ext4_free_blocks_count_set(es,
5533                         EXT4_C2B(sbi, percpu_counter_sum_positive(
5534                                 &sbi->s_freeclusters_counter)));
5535         if (percpu_counter_initialized(&sbi->s_freeinodes_counter))
5536                 es->s_free_inodes_count =
5537                         cpu_to_le32(percpu_counter_sum_positive(
5538                                 &sbi->s_freeinodes_counter));
5539         /* Copy error information to the on-disk superblock */
5540         spin_lock(&sbi->s_error_lock);
5541         if (sbi->s_add_error_count > 0) {
5542                 es->s_state |= cpu_to_le16(EXT4_ERROR_FS);
5543                 if (!es->s_first_error_time && !es->s_first_error_time_hi) {
5544                         __ext4_update_tstamp(&es->s_first_error_time,
5545                                              &es->s_first_error_time_hi,
5546                                              sbi->s_first_error_time);
5547                         strncpy(es->s_first_error_func, sbi->s_first_error_func,
5548                                 sizeof(es->s_first_error_func));
5549                         es->s_first_error_line =
5550                                 cpu_to_le32(sbi->s_first_error_line);
5551                         es->s_first_error_ino =
5552                                 cpu_to_le32(sbi->s_first_error_ino);
5553                         es->s_first_error_block =
5554                                 cpu_to_le64(sbi->s_first_error_block);
5555                         es->s_first_error_errcode =
5556                                 ext4_errno_to_code(sbi->s_first_error_code);
5557                 }
5558                 __ext4_update_tstamp(&es->s_last_error_time,
5559                                      &es->s_last_error_time_hi,
5560                                      sbi->s_last_error_time);
5561                 strncpy(es->s_last_error_func, sbi->s_last_error_func,
5562                         sizeof(es->s_last_error_func));
5563                 es->s_last_error_line = cpu_to_le32(sbi->s_last_error_line);
5564                 es->s_last_error_ino = cpu_to_le32(sbi->s_last_error_ino);
5565                 es->s_last_error_block = cpu_to_le64(sbi->s_last_error_block);
5566                 es->s_last_error_errcode =
5567                                 ext4_errno_to_code(sbi->s_last_error_code);
5568                 /*
5569                  * Start the daily error reporting function if it hasn't been
5570                  * started already
5571                  */
5572                 if (!es->s_error_count)
5573                         mod_timer(&sbi->s_err_report, jiffies + 24*60*60*HZ);
5574                 le32_add_cpu(&es->s_error_count, sbi->s_add_error_count);
5575                 sbi->s_add_error_count = 0;
5576         }
5577         spin_unlock(&sbi->s_error_lock);
5578
5579         ext4_superblock_csum_set(sb);
5580         unlock_buffer(sbh);
5581 }
5582
5583 static int ext4_commit_super(struct super_block *sb)
5584 {
5585         struct buffer_head *sbh = EXT4_SB(sb)->s_sbh;
5586         int error = 0;
5587
5588         if (!sbh)
5589                 return -EINVAL;
5590         if (block_device_ejected(sb))
5591                 return -ENODEV;
5592
5593         ext4_update_super(sb);
5594
5595         if (buffer_write_io_error(sbh) || !buffer_uptodate(sbh)) {
5596                 /*
5597                  * Oh, dear.  A previous attempt to write the
5598                  * superblock failed.  This could happen because the
5599                  * USB device was yanked out.  Or it could happen to
5600                  * be a transient write error and maybe the block will
5601                  * be remapped.  Nothing we can do but to retry the
5602                  * write and hope for the best.
5603                  */
5604                 ext4_msg(sb, KERN_ERR, "previous I/O error to "
5605                        "superblock detected");
5606                 clear_buffer_write_io_error(sbh);
5607                 set_buffer_uptodate(sbh);
5608         }
5609         BUFFER_TRACE(sbh, "marking dirty");
5610         mark_buffer_dirty(sbh);
5611         error = __sync_dirty_buffer(sbh,
5612                 REQ_SYNC | (test_opt(sb, BARRIER) ? REQ_FUA : 0));
5613         if (buffer_write_io_error(sbh)) {
5614                 ext4_msg(sb, KERN_ERR, "I/O error while writing "
5615                        "superblock");
5616                 clear_buffer_write_io_error(sbh);
5617                 set_buffer_uptodate(sbh);
5618         }
5619         return error;
5620 }
5621
5622 /*
5623  * Have we just finished recovery?  If so, and if we are mounting (or
5624  * remounting) the filesystem readonly, then we will end up with a
5625  * consistent fs on disk.  Record that fact.
5626  */
5627 static int ext4_mark_recovery_complete(struct super_block *sb,
5628                                        struct ext4_super_block *es)
5629 {
5630         int err;
5631         journal_t *journal = EXT4_SB(sb)->s_journal;
5632
5633         if (!ext4_has_feature_journal(sb)) {
5634                 if (journal != NULL) {
5635                         ext4_error(sb, "Journal got removed while the fs was "
5636                                    "mounted!");
5637                         return -EFSCORRUPTED;
5638                 }
5639                 return 0;
5640         }
5641         jbd2_journal_lock_updates(journal);
5642         err = jbd2_journal_flush(journal, 0);
5643         if (err < 0)
5644                 goto out;
5645
5646         if (ext4_has_feature_journal_needs_recovery(sb) && sb_rdonly(sb)) {
5647                 ext4_clear_feature_journal_needs_recovery(sb);
5648                 ext4_commit_super(sb);
5649         }
5650 out:
5651         jbd2_journal_unlock_updates(journal);
5652         return err;
5653 }
5654
5655 /*
5656  * If we are mounting (or read-write remounting) a filesystem whose journal
5657  * has recorded an error from a previous lifetime, move that error to the
5658  * main filesystem now.
5659  */
5660 static int ext4_clear_journal_err(struct super_block *sb,
5661                                    struct ext4_super_block *es)
5662 {
5663         journal_t *journal;
5664         int j_errno;
5665         const char *errstr;
5666
5667         if (!ext4_has_feature_journal(sb)) {
5668                 ext4_error(sb, "Journal got removed while the fs was mounted!");
5669                 return -EFSCORRUPTED;
5670         }
5671
5672         journal = EXT4_SB(sb)->s_journal;
5673
5674         /*
5675          * Now check for any error status which may have been recorded in the
5676          * journal by a prior ext4_error() or ext4_abort()
5677          */
5678
5679         j_errno = jbd2_journal_errno(journal);
5680         if (j_errno) {
5681                 char nbuf[16];
5682
5683                 errstr = ext4_decode_error(sb, j_errno, nbuf);
5684                 ext4_warning(sb, "Filesystem error recorded "
5685                              "from previous mount: %s", errstr);
5686                 ext4_warning(sb, "Marking fs in need of filesystem check.");
5687
5688                 EXT4_SB(sb)->s_mount_state |= EXT4_ERROR_FS;
5689                 es->s_state |= cpu_to_le16(EXT4_ERROR_FS);
5690                 ext4_commit_super(sb);
5691
5692                 jbd2_journal_clear_err(journal);
5693                 jbd2_journal_update_sb_errno(journal);
5694         }
5695         return 0;
5696 }
5697
5698 /*
5699  * Force the running and committing transactions to commit,
5700  * and wait on the commit.
5701  */
5702 int ext4_force_commit(struct super_block *sb)
5703 {
5704         journal_t *journal;
5705
5706         if (sb_rdonly(sb))
5707                 return 0;
5708
5709         journal = EXT4_SB(sb)->s_journal;
5710         return ext4_journal_force_commit(journal);
5711 }
5712
5713 static int ext4_sync_fs(struct super_block *sb, int wait)
5714 {
5715         int ret = 0;
5716         tid_t target;
5717         bool needs_barrier = false;
5718         struct ext4_sb_info *sbi = EXT4_SB(sb);
5719
5720         if (unlikely(ext4_forced_shutdown(sbi)))
5721                 return 0;
5722
5723         trace_ext4_sync_fs(sb, wait);
5724         flush_workqueue(sbi->rsv_conversion_wq);
5725         /*
5726          * Writeback quota in non-journalled quota case - journalled quota has
5727          * no dirty dquots
5728          */
5729         dquot_writeback_dquots(sb, -1);
5730         /*
5731          * Data writeback is possible w/o journal transaction, so barrier must
5732          * being sent at the end of the function. But we can skip it if
5733          * transaction_commit will do it for us.
5734          */
5735         if (sbi->s_journal) {
5736                 target = jbd2_get_latest_transaction(sbi->s_journal);
5737                 if (wait && sbi->s_journal->j_flags & JBD2_BARRIER &&
5738                     !jbd2_trans_will_send_data_barrier(sbi->s_journal, target))
5739                         needs_barrier = true;
5740
5741                 if (jbd2_journal_start_commit(sbi->s_journal, &target)) {
5742                         if (wait)
5743                                 ret = jbd2_log_wait_commit(sbi->s_journal,
5744                                                            target);
5745                 }
5746         } else if (wait && test_opt(sb, BARRIER))
5747                 needs_barrier = true;
5748         if (needs_barrier) {
5749                 int err;
5750                 err = blkdev_issue_flush(sb->s_bdev);
5751                 if (!ret)
5752                         ret = err;
5753         }
5754
5755         return ret;
5756 }
5757
5758 /*
5759  * LVM calls this function before a (read-only) snapshot is created.  This
5760  * gives us a chance to flush the journal completely and mark the fs clean.
5761  *
5762  * Note that only this function cannot bring a filesystem to be in a clean
5763  * state independently. It relies on upper layer to stop all data & metadata
5764  * modifications.
5765  */
5766 static int ext4_freeze(struct super_block *sb)
5767 {
5768         int error = 0;
5769         journal_t *journal;
5770
5771         if (sb_rdonly(sb))
5772                 return 0;
5773
5774         journal = EXT4_SB(sb)->s_journal;
5775
5776         if (journal) {
5777                 /* Now we set up the journal barrier. */
5778                 jbd2_journal_lock_updates(journal);
5779
5780                 /*
5781                  * Don't clear the needs_recovery flag if we failed to
5782                  * flush the journal.
5783                  */
5784                 error = jbd2_journal_flush(journal, 0);
5785                 if (error < 0)
5786                         goto out;
5787
5788                 /* Journal blocked and flushed, clear needs_recovery flag. */
5789                 ext4_clear_feature_journal_needs_recovery(sb);
5790         }
5791
5792         error = ext4_commit_super(sb);
5793 out:
5794         if (journal)
5795                 /* we rely on upper layer to stop further updates */
5796                 jbd2_journal_unlock_updates(journal);
5797         return error;
5798 }
5799
5800 /*
5801  * Called by LVM after the snapshot is done.  We need to reset the RECOVER
5802  * flag here, even though the filesystem is not technically dirty yet.
5803  */
5804 static int ext4_unfreeze(struct super_block *sb)
5805 {
5806         if (sb_rdonly(sb) || ext4_forced_shutdown(EXT4_SB(sb)))
5807                 return 0;
5808
5809         if (EXT4_SB(sb)->s_journal) {
5810                 /* Reset the needs_recovery flag before the fs is unlocked. */
5811                 ext4_set_feature_journal_needs_recovery(sb);
5812         }
5813
5814         ext4_commit_super(sb);
5815         return 0;
5816 }
5817
5818 /*
5819  * Structure to save mount options for ext4_remount's benefit
5820  */
5821 struct ext4_mount_options {
5822         unsigned long s_mount_opt;
5823         unsigned long s_mount_opt2;
5824         kuid_t s_resuid;
5825         kgid_t s_resgid;
5826         unsigned long s_commit_interval;
5827         u32 s_min_batch_time, s_max_batch_time;
5828 #ifdef CONFIG_QUOTA
5829         int s_jquota_fmt;
5830         char *s_qf_names[EXT4_MAXQUOTAS];
5831 #endif
5832 };
5833
5834 static int ext4_remount(struct super_block *sb, int *flags, char *data)
5835 {
5836         struct ext4_super_block *es;
5837         struct ext4_sb_info *sbi = EXT4_SB(sb);
5838         unsigned long old_sb_flags, vfs_flags;
5839         struct ext4_mount_options old_opts;
5840         int enable_quota = 0;
5841         ext4_group_t g;
5842         int err = 0;
5843 #ifdef CONFIG_QUOTA
5844         int i, j;
5845         char *to_free[EXT4_MAXQUOTAS];
5846 #endif
5847         char *orig_data = kstrdup(data, GFP_KERNEL);
5848         struct ext4_parsed_options parsed_opts;
5849
5850         parsed_opts.journal_ioprio = DEFAULT_JOURNAL_IOPRIO;
5851         parsed_opts.journal_devnum = 0;
5852
5853         if (data && !orig_data)
5854                 return -ENOMEM;
5855
5856         /* Store the original options */
5857         old_sb_flags = sb->s_flags;
5858         old_opts.s_mount_opt = sbi->s_mount_opt;
5859         old_opts.s_mount_opt2 = sbi->s_mount_opt2;
5860         old_opts.s_resuid = sbi->s_resuid;
5861         old_opts.s_resgid = sbi->s_resgid;
5862         old_opts.s_commit_interval = sbi->s_commit_interval;
5863         old_opts.s_min_batch_time = sbi->s_min_batch_time;
5864         old_opts.s_max_batch_time = sbi->s_max_batch_time;
5865 #ifdef CONFIG_QUOTA
5866         old_opts.s_jquota_fmt = sbi->s_jquota_fmt;
5867         for (i = 0; i < EXT4_MAXQUOTAS; i++)
5868                 if (sbi->s_qf_names[i]) {
5869                         char *qf_name = get_qf_name(sb, sbi, i);
5870
5871                         old_opts.s_qf_names[i] = kstrdup(qf_name, GFP_KERNEL);
5872                         if (!old_opts.s_qf_names[i]) {
5873                                 for (j = 0; j < i; j++)
5874                                         kfree(old_opts.s_qf_names[j]);
5875                                 kfree(orig_data);
5876                                 return -ENOMEM;
5877                         }
5878                 } else
5879                         old_opts.s_qf_names[i] = NULL;
5880 #endif
5881         if (sbi->s_journal && sbi->s_journal->j_task->io_context)
5882                 parsed_opts.journal_ioprio =
5883                         sbi->s_journal->j_task->io_context->ioprio;
5884
5885         /*
5886          * Some options can be enabled by ext4 and/or by VFS mount flag
5887          * either way we need to make sure it matches in both *flags and
5888          * s_flags. Copy those selected flags from *flags to s_flags
5889          */
5890         vfs_flags = SB_LAZYTIME | SB_I_VERSION;
5891         sb->s_flags = (sb->s_flags & ~vfs_flags) | (*flags & vfs_flags);
5892
5893         if (!parse_options(data, sb, &parsed_opts, 1)) {
5894                 err = -EINVAL;
5895                 goto restore_opts;
5896         }
5897
5898         if ((old_opts.s_mount_opt & EXT4_MOUNT_JOURNAL_CHECKSUM) ^
5899             test_opt(sb, JOURNAL_CHECKSUM)) {
5900                 ext4_msg(sb, KERN_ERR, "changing journal_checksum "
5901                          "during remount not supported; ignoring");
5902                 sbi->s_mount_opt ^= EXT4_MOUNT_JOURNAL_CHECKSUM;
5903         }
5904
5905         if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA) {
5906                 if (test_opt2(sb, EXPLICIT_DELALLOC)) {
5907                         ext4_msg(sb, KERN_ERR, "can't mount with "
5908                                  "both data=journal and delalloc");
5909                         err = -EINVAL;
5910                         goto restore_opts;
5911                 }
5912                 if (test_opt(sb, DIOREAD_NOLOCK)) {
5913                         ext4_msg(sb, KERN_ERR, "can't mount with "
5914                                  "both data=journal and dioread_nolock");
5915                         err = -EINVAL;
5916                         goto restore_opts;
5917                 }
5918         } else if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_ORDERED_DATA) {
5919                 if (test_opt(sb, JOURNAL_ASYNC_COMMIT)) {
5920                         ext4_msg(sb, KERN_ERR, "can't mount with "
5921                                 "journal_async_commit in data=ordered mode");
5922                         err = -EINVAL;
5923                         goto restore_opts;
5924                 }
5925         }
5926
5927         if ((sbi->s_mount_opt ^ old_opts.s_mount_opt) & EXT4_MOUNT_NO_MBCACHE) {
5928                 ext4_msg(sb, KERN_ERR, "can't enable nombcache during remount");
5929                 err = -EINVAL;
5930                 goto restore_opts;
5931         }
5932
5933         if (ext4_test_mount_flag(sb, EXT4_MF_FS_ABORTED))
5934                 ext4_abort(sb, EXT4_ERR_ESHUTDOWN, "Abort forced by user");
5935
5936         sb->s_flags = (sb->s_flags & ~SB_POSIXACL) |
5937                 (test_opt(sb, POSIX_ACL) ? SB_POSIXACL : 0);
5938
5939         es = sbi->s_es;
5940
5941         if (sbi->s_journal) {
5942                 ext4_init_journal_params(sb, sbi->s_journal);
5943                 set_task_ioprio(sbi->s_journal->j_task, parsed_opts.journal_ioprio);
5944         }
5945
5946         /* Flush outstanding errors before changing fs state */
5947         flush_work(&sbi->s_error_work);
5948
5949         if ((bool)(*flags & SB_RDONLY) != sb_rdonly(sb)) {
5950                 if (ext4_test_mount_flag(sb, EXT4_MF_FS_ABORTED)) {
5951                         err = -EROFS;
5952                         goto restore_opts;
5953                 }
5954
5955                 if (*flags & SB_RDONLY) {
5956                         err = sync_filesystem(sb);
5957                         if (err < 0)
5958                                 goto restore_opts;
5959                         err = dquot_suspend(sb, -1);
5960                         if (err < 0)
5961                                 goto restore_opts;
5962
5963                         /*
5964                          * First of all, the unconditional stuff we have to do
5965                          * to disable replay of the journal when we next remount
5966                          */
5967                         sb->s_flags |= SB_RDONLY;
5968
5969                         /*
5970                          * OK, test if we are remounting a valid rw partition
5971                          * readonly, and if so set the rdonly flag and then
5972                          * mark the partition as valid again.
5973                          */
5974                         if (!(es->s_state & cpu_to_le16(EXT4_VALID_FS)) &&
5975                             (sbi->s_mount_state & EXT4_VALID_FS))
5976                                 es->s_state = cpu_to_le16(sbi->s_mount_state);
5977
5978                         if (sbi->s_journal) {
5979                                 /*
5980                                  * We let remount-ro finish even if marking fs
5981                                  * as clean failed...
5982                                  */
5983                                 ext4_mark_recovery_complete(sb, es);
5984                         }
5985                 } else {
5986                         /* Make sure we can mount this feature set readwrite */
5987                         if (ext4_has_feature_readonly(sb) ||
5988                             !ext4_feature_set_ok(sb, 0)) {
5989                                 err = -EROFS;
5990                                 goto restore_opts;
5991                         }
5992                         /*
5993                          * Make sure the group descriptor checksums
5994                          * are sane.  If they aren't, refuse to remount r/w.
5995                          */
5996                         for (g = 0; g < sbi->s_groups_count; g++) {
5997                                 struct ext4_group_desc *gdp =
5998                                         ext4_get_group_desc(sb, g, NULL);
5999
6000                                 if (!ext4_group_desc_csum_verify(sb, g, gdp)) {
6001                                         ext4_msg(sb, KERN_ERR,
6002                "ext4_remount: Checksum for group %u failed (%u!=%u)",
6003                 g, le16_to_cpu(ext4_group_desc_csum(sb, g, gdp)),
6004                                                le16_to_cpu(gdp->bg_checksum));
6005                                         err = -EFSBADCRC;
6006                                         goto restore_opts;
6007                                 }
6008                         }
6009
6010                         /*
6011                          * If we have an unprocessed orphan list hanging
6012                          * around from a previously readonly bdev mount,
6013                          * require a full umount/remount for now.
6014                          */
6015                         if (es->s_last_orphan) {
6016                                 ext4_msg(sb, KERN_WARNING, "Couldn't "
6017                                        "remount RDWR because of unprocessed "
6018                                        "orphan inode list.  Please "
6019                                        "umount/remount instead");
6020                                 err = -EINVAL;
6021                                 goto restore_opts;
6022                         }
6023
6024                         /*
6025                          * Mounting a RDONLY partition read-write, so reread
6026                          * and store the current valid flag.  (It may have
6027                          * been changed by e2fsck since we originally mounted
6028                          * the partition.)
6029                          */
6030                         if (sbi->s_journal) {
6031                                 err = ext4_clear_journal_err(sb, es);
6032                                 if (err)
6033                                         goto restore_opts;
6034                         }
6035                         sbi->s_mount_state = le16_to_cpu(es->s_state);
6036
6037                         err = ext4_setup_super(sb, es, 0);
6038                         if (err)
6039                                 goto restore_opts;
6040
6041                         sb->s_flags &= ~SB_RDONLY;
6042                         if (ext4_has_feature_mmp(sb))
6043                                 if (ext4_multi_mount_protect(sb,
6044                                                 le64_to_cpu(es->s_mmp_block))) {
6045                                         err = -EROFS;
6046                                         goto restore_opts;
6047                                 }
6048                         enable_quota = 1;
6049                 }
6050         }
6051
6052         /*
6053          * Reinitialize lazy itable initialization thread based on
6054          * current settings
6055          */
6056         if (sb_rdonly(sb) || !test_opt(sb, INIT_INODE_TABLE))
6057                 ext4_unregister_li_request(sb);
6058         else {
6059                 ext4_group_t first_not_zeroed;
6060                 first_not_zeroed = ext4_has_uninit_itable(sb);
6061                 ext4_register_li_request(sb, first_not_zeroed);
6062         }
6063
6064         /*
6065          * Handle creation of system zone data early because it can fail.
6066          * Releasing of existing data is done when we are sure remount will
6067          * succeed.
6068          */
6069         if (test_opt(sb, BLOCK_VALIDITY) && !sbi->s_system_blks) {
6070                 err = ext4_setup_system_zone(sb);
6071                 if (err)
6072                         goto restore_opts;
6073         }
6074
6075         if (sbi->s_journal == NULL && !(old_sb_flags & SB_RDONLY)) {
6076                 err = ext4_commit_super(sb);
6077                 if (err)
6078                         goto restore_opts;
6079         }
6080
6081 #ifdef CONFIG_QUOTA
6082         /* Release old quota file names */
6083         for (i = 0; i < EXT4_MAXQUOTAS; i++)
6084                 kfree(old_opts.s_qf_names[i]);
6085         if (enable_quota) {
6086                 if (sb_any_quota_suspended(sb))
6087                         dquot_resume(sb, -1);
6088                 else if (ext4_has_feature_quota(sb)) {
6089                         err = ext4_enable_quotas(sb);
6090                         if (err)
6091                                 goto restore_opts;
6092                 }
6093         }
6094 #endif
6095         if (!test_opt(sb, BLOCK_VALIDITY) && sbi->s_system_blks)
6096                 ext4_release_system_zone(sb);
6097
6098         if (!ext4_has_feature_mmp(sb) || sb_rdonly(sb))
6099                 ext4_stop_mmpd(sbi);
6100
6101         /*
6102          * Some options can be enabled by ext4 and/or by VFS mount flag
6103          * either way we need to make sure it matches in both *flags and
6104          * s_flags. Copy those selected flags from s_flags to *flags
6105          */
6106         *flags = (*flags & ~vfs_flags) | (sb->s_flags & vfs_flags);
6107
6108         ext4_msg(sb, KERN_INFO, "re-mounted. Opts: %s. Quota mode: %s.",
6109                  orig_data, ext4_quota_mode(sb));
6110         kfree(orig_data);
6111         return 0;
6112
6113 restore_opts:
6114         sb->s_flags = old_sb_flags;
6115         sbi->s_mount_opt = old_opts.s_mount_opt;
6116         sbi->s_mount_opt2 = old_opts.s_mount_opt2;
6117         sbi->s_resuid = old_opts.s_resuid;
6118         sbi->s_resgid = old_opts.s_resgid;
6119         sbi->s_commit_interval = old_opts.s_commit_interval;
6120         sbi->s_min_batch_time = old_opts.s_min_batch_time;
6121         sbi->s_max_batch_time = old_opts.s_max_batch_time;
6122         if (!test_opt(sb, BLOCK_VALIDITY) && sbi->s_system_blks)
6123                 ext4_release_system_zone(sb);
6124 #ifdef CONFIG_QUOTA
6125         sbi->s_jquota_fmt = old_opts.s_jquota_fmt;
6126         for (i = 0; i < EXT4_MAXQUOTAS; i++) {
6127                 to_free[i] = get_qf_name(sb, sbi, i);
6128                 rcu_assign_pointer(sbi->s_qf_names[i], old_opts.s_qf_names[i]);
6129         }
6130         synchronize_rcu();
6131         for (i = 0; i < EXT4_MAXQUOTAS; i++)
6132                 kfree(to_free[i]);
6133 #endif
6134         if (!ext4_has_feature_mmp(sb) || sb_rdonly(sb))
6135                 ext4_stop_mmpd(sbi);
6136         kfree(orig_data);
6137         return err;
6138 }
6139
6140 #ifdef CONFIG_QUOTA
6141 static int ext4_statfs_project(struct super_block *sb,
6142                                kprojid_t projid, struct kstatfs *buf)
6143 {
6144         struct kqid qid;
6145         struct dquot *dquot;
6146         u64 limit;
6147         u64 curblock;
6148
6149         qid = make_kqid_projid(projid);
6150         dquot = dqget(sb, qid);
6151         if (IS_ERR(dquot))
6152                 return PTR_ERR(dquot);
6153         spin_lock(&dquot->dq_dqb_lock);
6154
6155         limit = min_not_zero(dquot->dq_dqb.dqb_bsoftlimit,
6156                              dquot->dq_dqb.dqb_bhardlimit);
6157         limit >>= sb->s_blocksize_bits;
6158
6159         if (limit && buf->f_blocks > limit) {
6160                 curblock = (dquot->dq_dqb.dqb_curspace +
6161                             dquot->dq_dqb.dqb_rsvspace) >> sb->s_blocksize_bits;
6162                 buf->f_blocks = limit;
6163                 buf->f_bfree = buf->f_bavail =
6164                         (buf->f_blocks > curblock) ?
6165                          (buf->f_blocks - curblock) : 0;
6166         }
6167
6168         limit = min_not_zero(dquot->dq_dqb.dqb_isoftlimit,
6169                              dquot->dq_dqb.dqb_ihardlimit);
6170         if (limit && buf->f_files > limit) {
6171                 buf->f_files = limit;
6172                 buf->f_ffree =
6173                         (buf->f_files > dquot->dq_dqb.dqb_curinodes) ?
6174                          (buf->f_files - dquot->dq_dqb.dqb_curinodes) : 0;
6175         }
6176
6177         spin_unlock(&dquot->dq_dqb_lock);
6178         dqput(dquot);
6179         return 0;
6180 }
6181 #endif
6182
6183 static int ext4_statfs(struct dentry *dentry, struct kstatfs *buf)
6184 {
6185         struct super_block *sb = dentry->d_sb;
6186         struct ext4_sb_info *sbi = EXT4_SB(sb);
6187         struct ext4_super_block *es = sbi->s_es;
6188         ext4_fsblk_t overhead = 0, resv_blocks;
6189         s64 bfree;
6190         resv_blocks = EXT4_C2B(sbi, atomic64_read(&sbi->s_resv_clusters));
6191
6192         if (!test_opt(sb, MINIX_DF))
6193                 overhead = sbi->s_overhead;
6194
6195         buf->f_type = EXT4_SUPER_MAGIC;
6196         buf->f_bsize = sb->s_blocksize;
6197         buf->f_blocks = ext4_blocks_count(es) - EXT4_C2B(sbi, overhead);
6198         bfree = percpu_counter_sum_positive(&sbi->s_freeclusters_counter) -
6199                 percpu_counter_sum_positive(&sbi->s_dirtyclusters_counter);
6200         /* prevent underflow in case that few free space is available */
6201         buf->f_bfree = EXT4_C2B(sbi, max_t(s64, bfree, 0));
6202         buf->f_bavail = buf->f_bfree -
6203                         (ext4_r_blocks_count(es) + resv_blocks);
6204         if (buf->f_bfree < (ext4_r_blocks_count(es) + resv_blocks))
6205                 buf->f_bavail = 0;
6206         buf->f_files = le32_to_cpu(es->s_inodes_count);
6207         buf->f_ffree = percpu_counter_sum_positive(&sbi->s_freeinodes_counter);
6208         buf->f_namelen = EXT4_NAME_LEN;
6209         buf->f_fsid = uuid_to_fsid(es->s_uuid);
6210
6211 #ifdef CONFIG_QUOTA
6212         if (ext4_test_inode_flag(dentry->d_inode, EXT4_INODE_PROJINHERIT) &&
6213             sb_has_quota_limits_enabled(sb, PRJQUOTA))
6214                 ext4_statfs_project(sb, EXT4_I(dentry->d_inode)->i_projid, buf);
6215 #endif
6216         return 0;
6217 }
6218
6219
6220 #ifdef CONFIG_QUOTA
6221
6222 /*
6223  * Helper functions so that transaction is started before we acquire dqio_sem
6224  * to keep correct lock ordering of transaction > dqio_sem
6225  */
6226 static inline struct inode *dquot_to_inode(struct dquot *dquot)
6227 {
6228         return sb_dqopt(dquot->dq_sb)->files[dquot->dq_id.type];
6229 }
6230
6231 static int ext4_write_dquot(struct dquot *dquot)
6232 {
6233         int ret, err;
6234         handle_t *handle;
6235         struct inode *inode;
6236
6237         inode = dquot_to_inode(dquot);
6238         handle = ext4_journal_start(inode, EXT4_HT_QUOTA,
6239                                     EXT4_QUOTA_TRANS_BLOCKS(dquot->dq_sb));
6240         if (IS_ERR(handle))
6241                 return PTR_ERR(handle);
6242         ret = dquot_commit(dquot);
6243         err = ext4_journal_stop(handle);
6244         if (!ret)
6245                 ret = err;
6246         return ret;
6247 }
6248
6249 static int ext4_acquire_dquot(struct dquot *dquot)
6250 {
6251         int ret, err;
6252         handle_t *handle;
6253
6254         handle = ext4_journal_start(dquot_to_inode(dquot), EXT4_HT_QUOTA,
6255                                     EXT4_QUOTA_INIT_BLOCKS(dquot->dq_sb));
6256         if (IS_ERR(handle))
6257                 return PTR_ERR(handle);
6258         ret = dquot_acquire(dquot);
6259         err = ext4_journal_stop(handle);
6260         if (!ret)
6261                 ret = err;
6262         return ret;
6263 }
6264
6265 static int ext4_release_dquot(struct dquot *dquot)
6266 {
6267         int ret, err;
6268         handle_t *handle;
6269
6270         handle = ext4_journal_start(dquot_to_inode(dquot), EXT4_HT_QUOTA,
6271                                     EXT4_QUOTA_DEL_BLOCKS(dquot->dq_sb));
6272         if (IS_ERR(handle)) {
6273                 /* Release dquot anyway to avoid endless cycle in dqput() */
6274                 dquot_release(dquot);
6275                 return PTR_ERR(handle);
6276         }
6277         ret = dquot_release(dquot);
6278         err = ext4_journal_stop(handle);
6279         if (!ret)
6280                 ret = err;
6281         return ret;
6282 }
6283
6284 static int ext4_mark_dquot_dirty(struct dquot *dquot)
6285 {
6286         struct super_block *sb = dquot->dq_sb;
6287
6288         if (ext4_is_quota_journalled(sb)) {
6289                 dquot_mark_dquot_dirty(dquot);
6290                 return ext4_write_dquot(dquot);
6291         } else {
6292                 return dquot_mark_dquot_dirty(dquot);
6293         }
6294 }
6295
6296 static int ext4_write_info(struct super_block *sb, int type)
6297 {
6298         int ret, err;
6299         handle_t *handle;
6300
6301         /* Data block + inode block */
6302         handle = ext4_journal_start(d_inode(sb->s_root), EXT4_HT_QUOTA, 2);
6303         if (IS_ERR(handle))
6304                 return PTR_ERR(handle);
6305         ret = dquot_commit_info(sb, type);
6306         err = ext4_journal_stop(handle);
6307         if (!ret)
6308                 ret = err;
6309         return ret;
6310 }
6311
6312 /*
6313  * Turn on quotas during mount time - we need to find
6314  * the quota file and such...
6315  */
6316 static int ext4_quota_on_mount(struct super_block *sb, int type)
6317 {
6318         return dquot_quota_on_mount(sb, get_qf_name(sb, EXT4_SB(sb), type),
6319                                         EXT4_SB(sb)->s_jquota_fmt, type);
6320 }
6321
6322 static void lockdep_set_quota_inode(struct inode *inode, int subclass)
6323 {
6324         struct ext4_inode_info *ei = EXT4_I(inode);
6325
6326         /* The first argument of lockdep_set_subclass has to be
6327          * *exactly* the same as the argument to init_rwsem() --- in
6328          * this case, in init_once() --- or lockdep gets unhappy
6329          * because the name of the lock is set using the
6330          * stringification of the argument to init_rwsem().
6331          */
6332         (void) ei;      /* shut up clang warning if !CONFIG_LOCKDEP */
6333         lockdep_set_subclass(&ei->i_data_sem, subclass);
6334 }
6335
6336 /*
6337  * Standard function to be called on quota_on
6338  */
6339 static int ext4_quota_on(struct super_block *sb, int type, int format_id,
6340                          const struct path *path)
6341 {
6342         int err;
6343
6344         if (!test_opt(sb, QUOTA))
6345                 return -EINVAL;
6346
6347         /* Quotafile not on the same filesystem? */
6348         if (path->dentry->d_sb != sb)
6349                 return -EXDEV;
6350
6351         /* Quota already enabled for this file? */
6352         if (IS_NOQUOTA(d_inode(path->dentry)))
6353                 return -EBUSY;
6354
6355         /* Journaling quota? */
6356         if (EXT4_SB(sb)->s_qf_names[type]) {
6357                 /* Quotafile not in fs root? */
6358                 if (path->dentry->d_parent != sb->s_root)
6359                         ext4_msg(sb, KERN_WARNING,
6360                                 "Quota file not on filesystem root. "
6361                                 "Journaled quota will not work");
6362                 sb_dqopt(sb)->flags |= DQUOT_NOLIST_DIRTY;
6363         } else {
6364                 /*
6365                  * Clear the flag just in case mount options changed since
6366                  * last time.
6367                  */
6368                 sb_dqopt(sb)->flags &= ~DQUOT_NOLIST_DIRTY;
6369         }
6370
6371         /*
6372          * When we journal data on quota file, we have to flush journal to see
6373          * all updates to the file when we bypass pagecache...
6374          */
6375         if (EXT4_SB(sb)->s_journal &&
6376             ext4_should_journal_data(d_inode(path->dentry))) {
6377                 /*
6378                  * We don't need to lock updates but journal_flush() could
6379                  * otherwise be livelocked...
6380                  */
6381                 jbd2_journal_lock_updates(EXT4_SB(sb)->s_journal);
6382                 err = jbd2_journal_flush(EXT4_SB(sb)->s_journal, 0);
6383                 jbd2_journal_unlock_updates(EXT4_SB(sb)->s_journal);
6384                 if (err)
6385                         return err;
6386         }
6387
6388         lockdep_set_quota_inode(path->dentry->d_inode, I_DATA_SEM_QUOTA);
6389         err = dquot_quota_on(sb, type, format_id, path);
6390         if (err) {
6391                 lockdep_set_quota_inode(path->dentry->d_inode,
6392                                              I_DATA_SEM_NORMAL);
6393         } else {
6394                 struct inode *inode = d_inode(path->dentry);
6395                 handle_t *handle;
6396
6397                 /*
6398                  * Set inode flags to prevent userspace from messing with quota
6399                  * files. If this fails, we return success anyway since quotas
6400                  * are already enabled and this is not a hard failure.
6401                  */
6402                 inode_lock(inode);
6403                 handle = ext4_journal_start(inode, EXT4_HT_QUOTA, 1);
6404                 if (IS_ERR(handle))
6405                         goto unlock_inode;
6406                 EXT4_I(inode)->i_flags |= EXT4_NOATIME_FL | EXT4_IMMUTABLE_FL;
6407                 inode_set_flags(inode, S_NOATIME | S_IMMUTABLE,
6408                                 S_NOATIME | S_IMMUTABLE);
6409                 err = ext4_mark_inode_dirty(handle, inode);
6410                 ext4_journal_stop(handle);
6411         unlock_inode:
6412                 inode_unlock(inode);
6413         }
6414         return err;
6415 }
6416
6417 static int ext4_quota_enable(struct super_block *sb, int type, int format_id,
6418                              unsigned int flags)
6419 {
6420         int err;
6421         struct inode *qf_inode;
6422         unsigned long qf_inums[EXT4_MAXQUOTAS] = {
6423                 le32_to_cpu(EXT4_SB(sb)->s_es->s_usr_quota_inum),
6424                 le32_to_cpu(EXT4_SB(sb)->s_es->s_grp_quota_inum),
6425                 le32_to_cpu(EXT4_SB(sb)->s_es->s_prj_quota_inum)
6426         };
6427
6428         BUG_ON(!ext4_has_feature_quota(sb));
6429
6430         if (!qf_inums[type])
6431                 return -EPERM;
6432
6433         qf_inode = ext4_iget(sb, qf_inums[type], EXT4_IGET_SPECIAL);
6434         if (IS_ERR(qf_inode)) {
6435                 ext4_error(sb, "Bad quota inode # %lu", qf_inums[type]);
6436                 return PTR_ERR(qf_inode);
6437         }
6438
6439         /* Don't account quota for quota files to avoid recursion */
6440         qf_inode->i_flags |= S_NOQUOTA;
6441         lockdep_set_quota_inode(qf_inode, I_DATA_SEM_QUOTA);
6442         err = dquot_load_quota_inode(qf_inode, type, format_id, flags);
6443         if (err)
6444                 lockdep_set_quota_inode(qf_inode, I_DATA_SEM_NORMAL);
6445         iput(qf_inode);
6446
6447         return err;
6448 }
6449
6450 /* Enable usage tracking for all quota types. */
6451 static int ext4_enable_quotas(struct super_block *sb)
6452 {
6453         int type, err = 0;
6454         unsigned long qf_inums[EXT4_MAXQUOTAS] = {
6455                 le32_to_cpu(EXT4_SB(sb)->s_es->s_usr_quota_inum),
6456                 le32_to_cpu(EXT4_SB(sb)->s_es->s_grp_quota_inum),
6457                 le32_to_cpu(EXT4_SB(sb)->s_es->s_prj_quota_inum)
6458         };
6459         bool quota_mopt[EXT4_MAXQUOTAS] = {
6460                 test_opt(sb, USRQUOTA),
6461                 test_opt(sb, GRPQUOTA),
6462                 test_opt(sb, PRJQUOTA),
6463         };
6464
6465         sb_dqopt(sb)->flags |= DQUOT_QUOTA_SYS_FILE | DQUOT_NOLIST_DIRTY;
6466         for (type = 0; type < EXT4_MAXQUOTAS; type++) {
6467                 if (qf_inums[type]) {
6468                         err = ext4_quota_enable(sb, type, QFMT_VFS_V1,
6469                                 DQUOT_USAGE_ENABLED |
6470                                 (quota_mopt[type] ? DQUOT_LIMITS_ENABLED : 0));
6471                         if (err) {
6472                                 ext4_warning(sb,
6473                                         "Failed to enable quota tracking "
6474                                         "(type=%d, err=%d). Please run "
6475                                         "e2fsck to fix.", type, err);
6476                                 for (type--; type >= 0; type--)
6477                                         dquot_quota_off(sb, type);
6478
6479                                 return err;
6480                         }
6481                 }
6482         }
6483         return 0;
6484 }
6485
6486 static int ext4_quota_off(struct super_block *sb, int type)
6487 {
6488         struct inode *inode = sb_dqopt(sb)->files[type];
6489         handle_t *handle;
6490         int err;
6491
6492         /* Force all delayed allocation blocks to be allocated.
6493          * Caller already holds s_umount sem */
6494         if (test_opt(sb, DELALLOC))
6495                 sync_filesystem(sb);
6496
6497         if (!inode || !igrab(inode))
6498                 goto out;
6499
6500         err = dquot_quota_off(sb, type);
6501         if (err || ext4_has_feature_quota(sb))
6502                 goto out_put;
6503
6504         inode_lock(inode);
6505         /*
6506          * Update modification times of quota files when userspace can
6507          * start looking at them. If we fail, we return success anyway since
6508          * this is not a hard failure and quotas are already disabled.
6509          */
6510         handle = ext4_journal_start(inode, EXT4_HT_QUOTA, 1);
6511         if (IS_ERR(handle)) {
6512                 err = PTR_ERR(handle);
6513                 goto out_unlock;
6514         }
6515         EXT4_I(inode)->i_flags &= ~(EXT4_NOATIME_FL | EXT4_IMMUTABLE_FL);
6516         inode_set_flags(inode, 0, S_NOATIME | S_IMMUTABLE);
6517         inode->i_mtime = inode->i_ctime = current_time(inode);
6518         err = ext4_mark_inode_dirty(handle, inode);
6519         ext4_journal_stop(handle);
6520 out_unlock:
6521         inode_unlock(inode);
6522 out_put:
6523         lockdep_set_quota_inode(inode, I_DATA_SEM_NORMAL);
6524         iput(inode);
6525         return err;
6526 out:
6527         return dquot_quota_off(sb, type);
6528 }
6529
6530 /* Read data from quotafile - avoid pagecache and such because we cannot afford
6531  * acquiring the locks... As quota files are never truncated and quota code
6532  * itself serializes the operations (and no one else should touch the files)
6533  * we don't have to be afraid of races */
6534 static ssize_t ext4_quota_read(struct super_block *sb, int type, char *data,
6535                                size_t len, loff_t off)
6536 {
6537         struct inode *inode = sb_dqopt(sb)->files[type];
6538         ext4_lblk_t blk = off >> EXT4_BLOCK_SIZE_BITS(sb);
6539         int offset = off & (sb->s_blocksize - 1);
6540         int tocopy;
6541         size_t toread;
6542         struct buffer_head *bh;
6543         loff_t i_size = i_size_read(inode);
6544
6545         if (off > i_size)
6546                 return 0;
6547         if (off+len > i_size)
6548                 len = i_size-off;
6549         toread = len;
6550         while (toread > 0) {
6551                 tocopy = sb->s_blocksize - offset < toread ?
6552                                 sb->s_blocksize - offset : toread;
6553                 bh = ext4_bread(NULL, inode, blk, 0);
6554                 if (IS_ERR(bh))
6555                         return PTR_ERR(bh);
6556                 if (!bh)        /* A hole? */
6557                         memset(data, 0, tocopy);
6558                 else
6559                         memcpy(data, bh->b_data+offset, tocopy);
6560                 brelse(bh);
6561                 offset = 0;
6562                 toread -= tocopy;
6563                 data += tocopy;
6564                 blk++;
6565         }
6566         return len;
6567 }
6568
6569 /* Write to quotafile (we know the transaction is already started and has
6570  * enough credits) */
6571 static ssize_t ext4_quota_write(struct super_block *sb, int type,
6572                                 const char *data, size_t len, loff_t off)
6573 {
6574         struct inode *inode = sb_dqopt(sb)->files[type];
6575         ext4_lblk_t blk = off >> EXT4_BLOCK_SIZE_BITS(sb);
6576         int err = 0, err2 = 0, offset = off & (sb->s_blocksize - 1);
6577         int retries = 0;
6578         struct buffer_head *bh;
6579         handle_t *handle = journal_current_handle();
6580
6581         if (EXT4_SB(sb)->s_journal && !handle) {
6582                 ext4_msg(sb, KERN_WARNING, "Quota write (off=%llu, len=%llu)"
6583                         " cancelled because transaction is not started",
6584                         (unsigned long long)off, (unsigned long long)len);
6585                 return -EIO;
6586         }
6587         /*
6588          * Since we account only one data block in transaction credits,
6589          * then it is impossible to cross a block boundary.
6590          */
6591         if (sb->s_blocksize - offset < len) {
6592                 ext4_msg(sb, KERN_WARNING, "Quota write (off=%llu, len=%llu)"
6593                         " cancelled because not block aligned",
6594                         (unsigned long long)off, (unsigned long long)len);
6595                 return -EIO;
6596         }
6597
6598         do {
6599                 bh = ext4_bread(handle, inode, blk,
6600                                 EXT4_GET_BLOCKS_CREATE |
6601                                 EXT4_GET_BLOCKS_METADATA_NOFAIL);
6602         } while (PTR_ERR(bh) == -ENOSPC &&
6603                  ext4_should_retry_alloc(inode->i_sb, &retries));
6604         if (IS_ERR(bh))
6605                 return PTR_ERR(bh);
6606         if (!bh)
6607                 goto out;
6608         BUFFER_TRACE(bh, "get write access");
6609         err = ext4_journal_get_write_access(handle, bh);
6610         if (err) {
6611                 brelse(bh);
6612                 return err;
6613         }
6614         lock_buffer(bh);
6615         memcpy(bh->b_data+offset, data, len);
6616         flush_dcache_page(bh->b_page);
6617         unlock_buffer(bh);
6618         err = ext4_handle_dirty_metadata(handle, NULL, bh);
6619         brelse(bh);
6620 out:
6621         if (inode->i_size < off + len) {
6622                 i_size_write(inode, off + len);
6623                 EXT4_I(inode)->i_disksize = inode->i_size;
6624                 err2 = ext4_mark_inode_dirty(handle, inode);
6625                 if (unlikely(err2 && !err))
6626                         err = err2;
6627         }
6628         return err ? err : len;
6629 }
6630 #endif
6631
6632 static struct dentry *ext4_mount(struct file_system_type *fs_type, int flags,
6633                        const char *dev_name, void *data)
6634 {
6635         return mount_bdev(fs_type, flags, dev_name, data, ext4_fill_super);
6636 }
6637
6638 #if !defined(CONFIG_EXT2_FS) && !defined(CONFIG_EXT2_FS_MODULE) && defined(CONFIG_EXT4_USE_FOR_EXT2)
6639 static inline void register_as_ext2(void)
6640 {
6641         int err = register_filesystem(&ext2_fs_type);
6642         if (err)
6643                 printk(KERN_WARNING
6644                        "EXT4-fs: Unable to register as ext2 (%d)\n", err);
6645 }
6646
6647 static inline void unregister_as_ext2(void)
6648 {
6649         unregister_filesystem(&ext2_fs_type);
6650 }
6651
6652 static inline int ext2_feature_set_ok(struct super_block *sb)
6653 {
6654         if (ext4_has_unknown_ext2_incompat_features(sb))
6655                 return 0;
6656         if (sb_rdonly(sb))
6657                 return 1;
6658         if (ext4_has_unknown_ext2_ro_compat_features(sb))
6659                 return 0;
6660         return 1;
6661 }
6662 #else
6663 static inline void register_as_ext2(void) { }
6664 static inline void unregister_as_ext2(void) { }
6665 static inline int ext2_feature_set_ok(struct super_block *sb) { return 0; }
6666 #endif
6667
6668 static inline void register_as_ext3(void)
6669 {
6670         int err = register_filesystem(&ext3_fs_type);
6671         if (err)
6672                 printk(KERN_WARNING
6673                        "EXT4-fs: Unable to register as ext3 (%d)\n", err);
6674 }
6675
6676 static inline void unregister_as_ext3(void)
6677 {
6678         unregister_filesystem(&ext3_fs_type);
6679 }
6680
6681 static inline int ext3_feature_set_ok(struct super_block *sb)
6682 {
6683         if (ext4_has_unknown_ext3_incompat_features(sb))
6684                 return 0;
6685         if (!ext4_has_feature_journal(sb))
6686                 return 0;
6687         if (sb_rdonly(sb))
6688                 return 1;
6689         if (ext4_has_unknown_ext3_ro_compat_features(sb))
6690                 return 0;
6691         return 1;
6692 }
6693
6694 static struct file_system_type ext4_fs_type = {
6695         .owner          = THIS_MODULE,
6696         .name           = "ext4",
6697         .mount          = ext4_mount,
6698         .kill_sb        = kill_block_super,
6699         .fs_flags       = FS_REQUIRES_DEV | FS_ALLOW_IDMAP,
6700 };
6701 MODULE_ALIAS_FS("ext4");
6702
6703 /* Shared across all ext4 file systems */
6704 wait_queue_head_t ext4__ioend_wq[EXT4_WQ_HASH_SZ];
6705
6706 static int __init ext4_init_fs(void)
6707 {
6708         int i, err;
6709
6710         ratelimit_state_init(&ext4_mount_msg_ratelimit, 30 * HZ, 64);
6711         ext4_li_info = NULL;
6712
6713         /* Build-time check for flags consistency */
6714         ext4_check_flag_values();
6715
6716         for (i = 0; i < EXT4_WQ_HASH_SZ; i++)
6717                 init_waitqueue_head(&ext4__ioend_wq[i]);
6718
6719         err = ext4_init_es();
6720         if (err)
6721                 return err;
6722
6723         err = ext4_init_pending();
6724         if (err)
6725                 goto out7;
6726
6727         err = ext4_init_post_read_processing();
6728         if (err)
6729                 goto out6;
6730
6731         err = ext4_init_pageio();
6732         if (err)
6733                 goto out5;
6734
6735         err = ext4_init_system_zone();
6736         if (err)
6737                 goto out4;
6738
6739         err = ext4_init_sysfs();
6740         if (err)
6741                 goto out3;
6742
6743         err = ext4_init_mballoc();
6744         if (err)
6745                 goto out2;
6746         err = init_inodecache();
6747         if (err)
6748                 goto out1;
6749
6750         err = ext4_fc_init_dentry_cache();
6751         if (err)
6752                 goto out05;
6753
6754         register_as_ext3();
6755         register_as_ext2();
6756         err = register_filesystem(&ext4_fs_type);
6757         if (err)
6758                 goto out;
6759
6760         return 0;
6761 out:
6762         unregister_as_ext2();
6763         unregister_as_ext3();
6764 out05:
6765         destroy_inodecache();
6766 out1:
6767         ext4_exit_mballoc();
6768 out2:
6769         ext4_exit_sysfs();
6770 out3:
6771         ext4_exit_system_zone();
6772 out4:
6773         ext4_exit_pageio();
6774 out5:
6775         ext4_exit_post_read_processing();
6776 out6:
6777         ext4_exit_pending();
6778 out7:
6779         ext4_exit_es();
6780
6781         return err;
6782 }
6783
6784 static void __exit ext4_exit_fs(void)
6785 {
6786         ext4_destroy_lazyinit_thread();
6787         unregister_as_ext2();
6788         unregister_as_ext3();
6789         unregister_filesystem(&ext4_fs_type);
6790         destroy_inodecache();
6791         ext4_exit_mballoc();
6792         ext4_exit_sysfs();
6793         ext4_exit_system_zone();
6794         ext4_exit_pageio();
6795         ext4_exit_post_read_processing();
6796         ext4_exit_es();
6797         ext4_exit_pending();
6798 }
6799
6800 MODULE_AUTHOR("Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore Ts'o and others");
6801 MODULE_DESCRIPTION("Fourth Extended Filesystem");
6802 MODULE_LICENSE("GPL");
6803 MODULE_SOFTDEP("pre: crc32c");
6804 module_init(ext4_init_fs)
6805 module_exit(ext4_exit_fs)