aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ext4/super.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/ext4/super.c')
-rw-r--r--fs/ext4/super.c297
1 files changed, 164 insertions, 133 deletions
diff --git a/fs/ext4/super.c b/fs/ext4/super.c
index c93bd1e651f5..cb10a06775e4 100644
--- a/fs/ext4/super.c
+++ b/fs/ext4/super.c
@@ -388,13 +388,14 @@ static void ext4_handle_error(struct super_block *sb)
388void __ext4_error(struct super_block *sb, const char *function, 388void __ext4_error(struct super_block *sb, const char *function,
389 unsigned int line, const char *fmt, ...) 389 unsigned int line, const char *fmt, ...)
390{ 390{
391 struct va_format vaf;
391 va_list args; 392 va_list args;
392 393
393 va_start(args, fmt); 394 va_start(args, fmt);
394 printk(KERN_CRIT "EXT4-fs error (device %s): %s:%d: comm %s: ", 395 vaf.fmt = fmt;
395 sb->s_id, function, line, current->comm); 396 vaf.va = &args;
396 vprintk(fmt, args); 397 printk(KERN_CRIT "EXT4-fs error (device %s): %s:%d: comm %s: %pV\n",
397 printk("\n"); 398 sb->s_id, function, line, current->comm, &vaf);
398 va_end(args); 399 va_end(args);
399 400
400 ext4_handle_error(sb); 401 ext4_handle_error(sb);
@@ -405,28 +406,31 @@ void ext4_error_inode(struct inode *inode, const char *function,
405 const char *fmt, ...) 406 const char *fmt, ...)
406{ 407{
407 va_list args; 408 va_list args;
409 struct va_format vaf;
408 struct ext4_super_block *es = EXT4_SB(inode->i_sb)->s_es; 410 struct ext4_super_block *es = EXT4_SB(inode->i_sb)->s_es;
409 411
410 es->s_last_error_ino = cpu_to_le32(inode->i_ino); 412 es->s_last_error_ino = cpu_to_le32(inode->i_ino);
411 es->s_last_error_block = cpu_to_le64(block); 413 es->s_last_error_block = cpu_to_le64(block);
412 save_error_info(inode->i_sb, function, line); 414 save_error_info(inode->i_sb, function, line);
413 va_start(args, fmt); 415 va_start(args, fmt);
416 vaf.fmt = fmt;
417 vaf.va = &args;
414 printk(KERN_CRIT "EXT4-fs error (device %s): %s:%d: inode #%lu: ", 418 printk(KERN_CRIT "EXT4-fs error (device %s): %s:%d: inode #%lu: ",
415 inode->i_sb->s_id, function, line, inode->i_ino); 419 inode->i_sb->s_id, function, line, inode->i_ino);
416 if (block) 420 if (block)
417 printk("block %llu: ", block); 421 printk(KERN_CONT "block %llu: ", block);
418 printk("comm %s: ", current->comm); 422 printk(KERN_CONT "comm %s: %pV\n", current->comm, &vaf);
419 vprintk(fmt, args);
420 printk("\n");
421 va_end(args); 423 va_end(args);
422 424
423 ext4_handle_error(inode->i_sb); 425 ext4_handle_error(inode->i_sb);
424} 426}
425 427
426void ext4_error_file(struct file *file, const char *function, 428void ext4_error_file(struct file *file, const char *function,
427 unsigned int line, const char *fmt, ...) 429 unsigned int line, ext4_fsblk_t block,
430 const char *fmt, ...)
428{ 431{
429 va_list args; 432 va_list args;
433 struct va_format vaf;
430 struct ext4_super_block *es; 434 struct ext4_super_block *es;
431 struct inode *inode = file->f_dentry->d_inode; 435 struct inode *inode = file->f_dentry->d_inode;
432 char pathname[80], *path; 436 char pathname[80], *path;
@@ -434,17 +438,18 @@ void ext4_error_file(struct file *file, const char *function,
434 es = EXT4_SB(inode->i_sb)->s_es; 438 es = EXT4_SB(inode->i_sb)->s_es;
435 es->s_last_error_ino = cpu_to_le32(inode->i_ino); 439 es->s_last_error_ino = cpu_to_le32(inode->i_ino);
436 save_error_info(inode->i_sb, function, line); 440 save_error_info(inode->i_sb, function, line);
437 va_start(args, fmt);
438 path = d_path(&(file->f_path), pathname, sizeof(pathname)); 441 path = d_path(&(file->f_path), pathname, sizeof(pathname));
439 if (!path) 442 if (IS_ERR(path))
440 path = "(unknown)"; 443 path = "(unknown)";
441 printk(KERN_CRIT 444 printk(KERN_CRIT
442 "EXT4-fs error (device %s): %s:%d: inode #%lu " 445 "EXT4-fs error (device %s): %s:%d: inode #%lu: ",
443 "(comm %s path %s): ", 446 inode->i_sb->s_id, function, line, inode->i_ino);
444 inode->i_sb->s_id, function, line, inode->i_ino, 447 if (block)
445 current->comm, path); 448 printk(KERN_CONT "block %llu: ", block);
446 vprintk(fmt, args); 449 va_start(args, fmt);
447 printk("\n"); 450 vaf.fmt = fmt;
451 vaf.va = &args;
452 printk(KERN_CONT "comm %s: path %s: %pV\n", current->comm, path, &vaf);
448 va_end(args); 453 va_end(args);
449 454
450 ext4_handle_error(inode->i_sb); 455 ext4_handle_error(inode->i_sb);
@@ -543,28 +548,29 @@ void __ext4_abort(struct super_block *sb, const char *function,
543 panic("EXT4-fs panic from previous error\n"); 548 panic("EXT4-fs panic from previous error\n");
544} 549}
545 550
546void ext4_msg (struct super_block * sb, const char *prefix, 551void ext4_msg(struct super_block *sb, const char *prefix, const char *fmt, ...)
547 const char *fmt, ...)
548{ 552{
553 struct va_format vaf;
549 va_list args; 554 va_list args;
550 555
551 va_start(args, fmt); 556 va_start(args, fmt);
552 printk("%sEXT4-fs (%s): ", prefix, sb->s_id); 557 vaf.fmt = fmt;
553 vprintk(fmt, args); 558 vaf.va = &args;
554 printk("\n"); 559 printk("%sEXT4-fs (%s): %pV\n", prefix, sb->s_id, &vaf);
555 va_end(args); 560 va_end(args);
556} 561}
557 562
558void __ext4_warning(struct super_block *sb, const char *function, 563void __ext4_warning(struct super_block *sb, const char *function,
559 unsigned int line, const char *fmt, ...) 564 unsigned int line, const char *fmt, ...)
560{ 565{
566 struct va_format vaf;
561 va_list args; 567 va_list args;
562 568
563 va_start(args, fmt); 569 va_start(args, fmt);
564 printk(KERN_WARNING "EXT4-fs warning (device %s): %s:%d: ", 570 vaf.fmt = fmt;
565 sb->s_id, function, line); 571 vaf.va = &args;
566 vprintk(fmt, args); 572 printk(KERN_WARNING "EXT4-fs warning (device %s): %s:%d: %pV\n",
567 printk("\n"); 573 sb->s_id, function, line, &vaf);
568 va_end(args); 574 va_end(args);
569} 575}
570 576
@@ -575,21 +581,25 @@ void __ext4_grp_locked_error(const char *function, unsigned int line,
575__releases(bitlock) 581__releases(bitlock)
576__acquires(bitlock) 582__acquires(bitlock)
577{ 583{
584 struct va_format vaf;
578 va_list args; 585 va_list args;
579 struct ext4_super_block *es = EXT4_SB(sb)->s_es; 586 struct ext4_super_block *es = EXT4_SB(sb)->s_es;
580 587
581 es->s_last_error_ino = cpu_to_le32(ino); 588 es->s_last_error_ino = cpu_to_le32(ino);
582 es->s_last_error_block = cpu_to_le64(block); 589 es->s_last_error_block = cpu_to_le64(block);
583 __save_error_info(sb, function, line); 590 __save_error_info(sb, function, line);
591
584 va_start(args, fmt); 592 va_start(args, fmt);
593
594 vaf.fmt = fmt;
595 vaf.va = &args;
585 printk(KERN_CRIT "EXT4-fs error (device %s): %s:%d: group %u", 596 printk(KERN_CRIT "EXT4-fs error (device %s): %s:%d: group %u",
586 sb->s_id, function, line, grp); 597 sb->s_id, function, line, grp);
587 if (ino) 598 if (ino)
588 printk("inode %lu: ", ino); 599 printk(KERN_CONT "inode %lu: ", ino);
589 if (block) 600 if (block)
590 printk("block %llu:", (unsigned long long) block); 601 printk(KERN_CONT "block %llu:", (unsigned long long) block);
591 vprintk(fmt, args); 602 printk(KERN_CONT "%pV\n", &vaf);
592 printk("\n");
593 va_end(args); 603 va_end(args);
594 604
595 if (test_opt(sb, ERRORS_CONT)) { 605 if (test_opt(sb, ERRORS_CONT)) {
@@ -807,21 +817,15 @@ static struct inode *ext4_alloc_inode(struct super_block *sb)
807 memset(&ei->i_cached_extent, 0, sizeof(struct ext4_ext_cache)); 817 memset(&ei->i_cached_extent, 0, sizeof(struct ext4_ext_cache));
808 INIT_LIST_HEAD(&ei->i_prealloc_list); 818 INIT_LIST_HEAD(&ei->i_prealloc_list);
809 spin_lock_init(&ei->i_prealloc_lock); 819 spin_lock_init(&ei->i_prealloc_lock);
810 /*
811 * Note: We can be called before EXT4_SB(sb)->s_journal is set,
812 * therefore it can be null here. Don't check it, just initialize
813 * jinode.
814 */
815 jbd2_journal_init_jbd_inode(&ei->jinode, &ei->vfs_inode);
816 ei->i_reserved_data_blocks = 0; 820 ei->i_reserved_data_blocks = 0;
817 ei->i_reserved_meta_blocks = 0; 821 ei->i_reserved_meta_blocks = 0;
818 ei->i_allocated_meta_blocks = 0; 822 ei->i_allocated_meta_blocks = 0;
819 ei->i_da_metadata_calc_len = 0; 823 ei->i_da_metadata_calc_len = 0;
820 ei->i_delalloc_reserved_flag = 0;
821 spin_lock_init(&(ei->i_block_reservation_lock)); 824 spin_lock_init(&(ei->i_block_reservation_lock));
822#ifdef CONFIG_QUOTA 825#ifdef CONFIG_QUOTA
823 ei->i_reserved_quota = 0; 826 ei->i_reserved_quota = 0;
824#endif 827#endif
828 ei->jinode = NULL;
825 INIT_LIST_HEAD(&ei->i_completed_io_list); 829 INIT_LIST_HEAD(&ei->i_completed_io_list);
826 spin_lock_init(&ei->i_completed_io_lock); 830 spin_lock_init(&ei->i_completed_io_lock);
827 ei->cur_aio_dio = NULL; 831 ei->cur_aio_dio = NULL;
@@ -840,6 +844,13 @@ static int ext4_drop_inode(struct inode *inode)
840 return drop; 844 return drop;
841} 845}
842 846
847static void ext4_i_callback(struct rcu_head *head)
848{
849 struct inode *inode = container_of(head, struct inode, i_rcu);
850 INIT_LIST_HEAD(&inode->i_dentry);
851 kmem_cache_free(ext4_inode_cachep, EXT4_I(inode));
852}
853
843static void ext4_destroy_inode(struct inode *inode) 854static void ext4_destroy_inode(struct inode *inode)
844{ 855{
845 ext4_ioend_wait(inode); 856 ext4_ioend_wait(inode);
@@ -852,7 +863,7 @@ static void ext4_destroy_inode(struct inode *inode)
852 true); 863 true);
853 dump_stack(); 864 dump_stack();
854 } 865 }
855 kmem_cache_free(ext4_inode_cachep, EXT4_I(inode)); 866 call_rcu(&inode->i_rcu, ext4_i_callback);
856} 867}
857 868
858static void init_once(void *foo) 869static void init_once(void *foo)
@@ -890,9 +901,12 @@ void ext4_clear_inode(struct inode *inode)
890 end_writeback(inode); 901 end_writeback(inode);
891 dquot_drop(inode); 902 dquot_drop(inode);
892 ext4_discard_preallocations(inode); 903 ext4_discard_preallocations(inode);
893 if (EXT4_JOURNAL(inode)) 904 if (EXT4_I(inode)->jinode) {
894 jbd2_journal_release_jbd_inode(EXT4_SB(inode->i_sb)->s_journal, 905 jbd2_journal_release_jbd_inode(EXT4_JOURNAL(inode),
895 &EXT4_I(inode)->jinode); 906 EXT4_I(inode)->jinode);
907 jbd2_free_inode(EXT4_I(inode)->jinode);
908 EXT4_I(inode)->jinode = NULL;
909 }
896} 910}
897 911
898static inline void ext4_show_quota_options(struct seq_file *seq, 912static inline void ext4_show_quota_options(struct seq_file *seq,
@@ -1385,7 +1399,7 @@ static int set_qf_name(struct super_block *sb, int qtype, substring_t *args)
1385 sbi->s_qf_names[qtype] = NULL; 1399 sbi->s_qf_names[qtype] = NULL;
1386 return 0; 1400 return 0;
1387 } 1401 }
1388 set_opt(sbi->s_mount_opt, QUOTA); 1402 set_opt(sb, QUOTA);
1389 return 1; 1403 return 1;
1390} 1404}
1391 1405
@@ -1440,21 +1454,21 @@ static int parse_options(char *options, struct super_block *sb,
1440 switch (token) { 1454 switch (token) {
1441 case Opt_bsd_df: 1455 case Opt_bsd_df:
1442 ext4_msg(sb, KERN_WARNING, deprecated_msg, p, "2.6.38"); 1456 ext4_msg(sb, KERN_WARNING, deprecated_msg, p, "2.6.38");
1443 clear_opt(sbi->s_mount_opt, MINIX_DF); 1457 clear_opt(sb, MINIX_DF);
1444 break; 1458 break;
1445 case Opt_minix_df: 1459 case Opt_minix_df:
1446 ext4_msg(sb, KERN_WARNING, deprecated_msg, p, "2.6.38"); 1460 ext4_msg(sb, KERN_WARNING, deprecated_msg, p, "2.6.38");
1447 set_opt(sbi->s_mount_opt, MINIX_DF); 1461 set_opt(sb, MINIX_DF);
1448 1462
1449 break; 1463 break;
1450 case Opt_grpid: 1464 case Opt_grpid:
1451 ext4_msg(sb, KERN_WARNING, deprecated_msg, p, "2.6.38"); 1465 ext4_msg(sb, KERN_WARNING, deprecated_msg, p, "2.6.38");
1452 set_opt(sbi->s_mount_opt, GRPID); 1466 set_opt(sb, GRPID);
1453 1467
1454 break; 1468 break;
1455 case Opt_nogrpid: 1469 case Opt_nogrpid:
1456 ext4_msg(sb, KERN_WARNING, deprecated_msg, p, "2.6.38"); 1470 ext4_msg(sb, KERN_WARNING, deprecated_msg, p, "2.6.38");
1457 clear_opt(sbi->s_mount_opt, GRPID); 1471 clear_opt(sb, GRPID);
1458 1472
1459 break; 1473 break;
1460 case Opt_resuid: 1474 case Opt_resuid:
@@ -1472,38 +1486,38 @@ static int parse_options(char *options, struct super_block *sb,
1472 /* *sb_block = match_int(&args[0]); */ 1486 /* *sb_block = match_int(&args[0]); */
1473 break; 1487 break;
1474 case Opt_err_panic: 1488 case Opt_err_panic:
1475 clear_opt(sbi->s_mount_opt, ERRORS_CONT); 1489 clear_opt(sb, ERRORS_CONT);
1476 clear_opt(sbi->s_mount_opt, ERRORS_RO); 1490 clear_opt(sb, ERRORS_RO);
1477 set_opt(sbi->s_mount_opt, ERRORS_PANIC); 1491 set_opt(sb, ERRORS_PANIC);
1478 break; 1492 break;
1479 case Opt_err_ro: 1493 case Opt_err_ro:
1480 clear_opt(sbi->s_mount_opt, ERRORS_CONT); 1494 clear_opt(sb, ERRORS_CONT);
1481 clear_opt(sbi->s_mount_opt, ERRORS_PANIC); 1495 clear_opt(sb, ERRORS_PANIC);
1482 set_opt(sbi->s_mount_opt, ERRORS_RO); 1496 set_opt(sb, ERRORS_RO);
1483 break; 1497 break;
1484 case Opt_err_cont: 1498 case Opt_err_cont:
1485 clear_opt(sbi->s_mount_opt, ERRORS_RO); 1499 clear_opt(sb, ERRORS_RO);
1486 clear_opt(sbi->s_mount_opt, ERRORS_PANIC); 1500 clear_opt(sb, ERRORS_PANIC);
1487 set_opt(sbi->s_mount_opt, ERRORS_CONT); 1501 set_opt(sb, ERRORS_CONT);
1488 break; 1502 break;
1489 case Opt_nouid32: 1503 case Opt_nouid32:
1490 set_opt(sbi->s_mount_opt, NO_UID32); 1504 set_opt(sb, NO_UID32);
1491 break; 1505 break;
1492 case Opt_debug: 1506 case Opt_debug:
1493 set_opt(sbi->s_mount_opt, DEBUG); 1507 set_opt(sb, DEBUG);
1494 break; 1508 break;
1495 case Opt_oldalloc: 1509 case Opt_oldalloc:
1496 set_opt(sbi->s_mount_opt, OLDALLOC); 1510 set_opt(sb, OLDALLOC);
1497 break; 1511 break;
1498 case Opt_orlov: 1512 case Opt_orlov:
1499 clear_opt(sbi->s_mount_opt, OLDALLOC); 1513 clear_opt(sb, OLDALLOC);
1500 break; 1514 break;
1501#ifdef CONFIG_EXT4_FS_XATTR 1515#ifdef CONFIG_EXT4_FS_XATTR
1502 case Opt_user_xattr: 1516 case Opt_user_xattr:
1503 set_opt(sbi->s_mount_opt, XATTR_USER); 1517 set_opt(sb, XATTR_USER);
1504 break; 1518 break;
1505 case Opt_nouser_xattr: 1519 case Opt_nouser_xattr:
1506 clear_opt(sbi->s_mount_opt, XATTR_USER); 1520 clear_opt(sb, XATTR_USER);
1507 break; 1521 break;
1508#else 1522#else
1509 case Opt_user_xattr: 1523 case Opt_user_xattr:
@@ -1513,10 +1527,10 @@ static int parse_options(char *options, struct super_block *sb,
1513#endif 1527#endif
1514#ifdef CONFIG_EXT4_FS_POSIX_ACL 1528#ifdef CONFIG_EXT4_FS_POSIX_ACL
1515 case Opt_acl: 1529 case Opt_acl:
1516 set_opt(sbi->s_mount_opt, POSIX_ACL); 1530 set_opt(sb, POSIX_ACL);
1517 break; 1531 break;
1518 case Opt_noacl: 1532 case Opt_noacl:
1519 clear_opt(sbi->s_mount_opt, POSIX_ACL); 1533 clear_opt(sb, POSIX_ACL);
1520 break; 1534 break;
1521#else 1535#else
1522 case Opt_acl: 1536 case Opt_acl:
@@ -1535,7 +1549,7 @@ static int parse_options(char *options, struct super_block *sb,
1535 "Cannot specify journal on remount"); 1549 "Cannot specify journal on remount");
1536 return 0; 1550 return 0;
1537 } 1551 }
1538 set_opt(sbi->s_mount_opt, UPDATE_JOURNAL); 1552 set_opt(sb, UPDATE_JOURNAL);
1539 break; 1553 break;
1540 case Opt_journal_dev: 1554 case Opt_journal_dev:
1541 if (is_remount) { 1555 if (is_remount) {
@@ -1548,14 +1562,14 @@ static int parse_options(char *options, struct super_block *sb,
1548 *journal_devnum = option; 1562 *journal_devnum = option;
1549 break; 1563 break;
1550 case Opt_journal_checksum: 1564 case Opt_journal_checksum:
1551 set_opt(sbi->s_mount_opt, JOURNAL_CHECKSUM); 1565 set_opt(sb, JOURNAL_CHECKSUM);
1552 break; 1566 break;
1553 case Opt_journal_async_commit: 1567 case Opt_journal_async_commit:
1554 set_opt(sbi->s_mount_opt, JOURNAL_ASYNC_COMMIT); 1568 set_opt(sb, JOURNAL_ASYNC_COMMIT);
1555 set_opt(sbi->s_mount_opt, JOURNAL_CHECKSUM); 1569 set_opt(sb, JOURNAL_CHECKSUM);
1556 break; 1570 break;
1557 case Opt_noload: 1571 case Opt_noload:
1558 set_opt(sbi->s_mount_opt, NOLOAD); 1572 set_opt(sb, NOLOAD);
1559 break; 1573 break;
1560 case Opt_commit: 1574 case Opt_commit:
1561 if (match_int(&args[0], &option)) 1575 if (match_int(&args[0], &option))
@@ -1598,15 +1612,15 @@ static int parse_options(char *options, struct super_block *sb,
1598 return 0; 1612 return 0;
1599 } 1613 }
1600 } else { 1614 } else {
1601 clear_opt(sbi->s_mount_opt, DATA_FLAGS); 1615 clear_opt(sb, DATA_FLAGS);
1602 sbi->s_mount_opt |= data_opt; 1616 sbi->s_mount_opt |= data_opt;
1603 } 1617 }
1604 break; 1618 break;
1605 case Opt_data_err_abort: 1619 case Opt_data_err_abort:
1606 set_opt(sbi->s_mount_opt, DATA_ERR_ABORT); 1620 set_opt(sb, DATA_ERR_ABORT);
1607 break; 1621 break;
1608 case Opt_data_err_ignore: 1622 case Opt_data_err_ignore:
1609 clear_opt(sbi->s_mount_opt, DATA_ERR_ABORT); 1623 clear_opt(sb, DATA_ERR_ABORT);
1610 break; 1624 break;
1611#ifdef CONFIG_QUOTA 1625#ifdef CONFIG_QUOTA
1612 case Opt_usrjquota: 1626 case Opt_usrjquota:
@@ -1646,12 +1660,12 @@ set_qf_format:
1646 break; 1660 break;
1647 case Opt_quota: 1661 case Opt_quota:
1648 case Opt_usrquota: 1662 case Opt_usrquota:
1649 set_opt(sbi->s_mount_opt, QUOTA); 1663 set_opt(sb, QUOTA);
1650 set_opt(sbi->s_mount_opt, USRQUOTA); 1664 set_opt(sb, USRQUOTA);
1651 break; 1665 break;
1652 case Opt_grpquota: 1666 case Opt_grpquota:
1653 set_opt(sbi->s_mount_opt, QUOTA); 1667 set_opt(sb, QUOTA);
1654 set_opt(sbi->s_mount_opt, GRPQUOTA); 1668 set_opt(sb, GRPQUOTA);
1655 break; 1669 break;
1656 case Opt_noquota: 1670 case Opt_noquota:
1657 if (sb_any_quota_loaded(sb)) { 1671 if (sb_any_quota_loaded(sb)) {
@@ -1659,9 +1673,9 @@ set_qf_format:
1659 "options when quota turned on"); 1673 "options when quota turned on");
1660 return 0; 1674 return 0;
1661 } 1675 }
1662 clear_opt(sbi->s_mount_opt, QUOTA); 1676 clear_opt(sb, QUOTA);
1663 clear_opt(sbi->s_mount_opt, USRQUOTA); 1677 clear_opt(sb, USRQUOTA);
1664 clear_opt(sbi->s_mount_opt, GRPQUOTA); 1678 clear_opt(sb, GRPQUOTA);
1665 break; 1679 break;
1666#else 1680#else
1667 case Opt_quota: 1681 case Opt_quota:
@@ -1687,7 +1701,7 @@ set_qf_format:
1687 sbi->s_mount_flags |= EXT4_MF_FS_ABORTED; 1701 sbi->s_mount_flags |= EXT4_MF_FS_ABORTED;
1688 break; 1702 break;
1689 case Opt_nobarrier: 1703 case Opt_nobarrier:
1690 clear_opt(sbi->s_mount_opt, BARRIER); 1704 clear_opt(sb, BARRIER);
1691 break; 1705 break;
1692 case Opt_barrier: 1706 case Opt_barrier:
1693 if (args[0].from) { 1707 if (args[0].from) {
@@ -1696,9 +1710,9 @@ set_qf_format:
1696 } else 1710 } else
1697 option = 1; /* No argument, default to 1 */ 1711 option = 1; /* No argument, default to 1 */
1698 if (option) 1712 if (option)
1699 set_opt(sbi->s_mount_opt, BARRIER); 1713 set_opt(sb, BARRIER);
1700 else 1714 else
1701 clear_opt(sbi->s_mount_opt, BARRIER); 1715 clear_opt(sb, BARRIER);
1702 break; 1716 break;
1703 case Opt_ignore: 1717 case Opt_ignore:
1704 break; 1718 break;
@@ -1722,17 +1736,17 @@ set_qf_format:
1722 "Ignoring deprecated bh option"); 1736 "Ignoring deprecated bh option");
1723 break; 1737 break;
1724 case Opt_i_version: 1738 case Opt_i_version:
1725 set_opt(sbi->s_mount_opt, I_VERSION); 1739 set_opt(sb, I_VERSION);
1726 sb->s_flags |= MS_I_VERSION; 1740 sb->s_flags |= MS_I_VERSION;
1727 break; 1741 break;
1728 case Opt_nodelalloc: 1742 case Opt_nodelalloc:
1729 clear_opt(sbi->s_mount_opt, DELALLOC); 1743 clear_opt(sb, DELALLOC);
1730 break; 1744 break;
1731 case Opt_mblk_io_submit: 1745 case Opt_mblk_io_submit:
1732 set_opt(sbi->s_mount_opt, MBLK_IO_SUBMIT); 1746 set_opt(sb, MBLK_IO_SUBMIT);
1733 break; 1747 break;
1734 case Opt_nomblk_io_submit: 1748 case Opt_nomblk_io_submit:
1735 clear_opt(sbi->s_mount_opt, MBLK_IO_SUBMIT); 1749 clear_opt(sb, MBLK_IO_SUBMIT);
1736 break; 1750 break;
1737 case Opt_stripe: 1751 case Opt_stripe:
1738 if (match_int(&args[0], &option)) 1752 if (match_int(&args[0], &option))
@@ -1742,13 +1756,13 @@ set_qf_format:
1742 sbi->s_stripe = option; 1756 sbi->s_stripe = option;
1743 break; 1757 break;
1744 case Opt_delalloc: 1758 case Opt_delalloc:
1745 set_opt(sbi->s_mount_opt, DELALLOC); 1759 set_opt(sb, DELALLOC);
1746 break; 1760 break;
1747 case Opt_block_validity: 1761 case Opt_block_validity:
1748 set_opt(sbi->s_mount_opt, BLOCK_VALIDITY); 1762 set_opt(sb, BLOCK_VALIDITY);
1749 break; 1763 break;
1750 case Opt_noblock_validity: 1764 case Opt_noblock_validity:
1751 clear_opt(sbi->s_mount_opt, BLOCK_VALIDITY); 1765 clear_opt(sb, BLOCK_VALIDITY);
1752 break; 1766 break;
1753 case Opt_inode_readahead_blks: 1767 case Opt_inode_readahead_blks:
1754 if (match_int(&args[0], &option)) 1768 if (match_int(&args[0], &option))
@@ -1772,7 +1786,7 @@ set_qf_format:
1772 option); 1786 option);
1773 break; 1787 break;
1774 case Opt_noauto_da_alloc: 1788 case Opt_noauto_da_alloc:
1775 set_opt(sbi->s_mount_opt,NO_AUTO_DA_ALLOC); 1789 set_opt(sb, NO_AUTO_DA_ALLOC);
1776 break; 1790 break;
1777 case Opt_auto_da_alloc: 1791 case Opt_auto_da_alloc:
1778 if (args[0].from) { 1792 if (args[0].from) {
@@ -1781,24 +1795,24 @@ set_qf_format:
1781 } else 1795 } else
1782 option = 1; /* No argument, default to 1 */ 1796 option = 1; /* No argument, default to 1 */
1783 if (option) 1797 if (option)
1784 clear_opt(sbi->s_mount_opt, NO_AUTO_DA_ALLOC); 1798 clear_opt(sb, NO_AUTO_DA_ALLOC);
1785 else 1799 else
1786 set_opt(sbi->s_mount_opt,NO_AUTO_DA_ALLOC); 1800 set_opt(sb,NO_AUTO_DA_ALLOC);
1787 break; 1801 break;
1788 case Opt_discard: 1802 case Opt_discard:
1789 set_opt(sbi->s_mount_opt, DISCARD); 1803 set_opt(sb, DISCARD);
1790 break; 1804 break;
1791 case Opt_nodiscard: 1805 case Opt_nodiscard:
1792 clear_opt(sbi->s_mount_opt, DISCARD); 1806 clear_opt(sb, DISCARD);
1793 break; 1807 break;
1794 case Opt_dioread_nolock: 1808 case Opt_dioread_nolock:
1795 set_opt(sbi->s_mount_opt, DIOREAD_NOLOCK); 1809 set_opt(sb, DIOREAD_NOLOCK);
1796 break; 1810 break;
1797 case Opt_dioread_lock: 1811 case Opt_dioread_lock:
1798 clear_opt(sbi->s_mount_opt, DIOREAD_NOLOCK); 1812 clear_opt(sb, DIOREAD_NOLOCK);
1799 break; 1813 break;
1800 case Opt_init_inode_table: 1814 case Opt_init_inode_table:
1801 set_opt(sbi->s_mount_opt, INIT_INODE_TABLE); 1815 set_opt(sb, INIT_INODE_TABLE);
1802 if (args[0].from) { 1816 if (args[0].from) {
1803 if (match_int(&args[0], &option)) 1817 if (match_int(&args[0], &option))
1804 return 0; 1818 return 0;
@@ -1809,7 +1823,7 @@ set_qf_format:
1809 sbi->s_li_wait_mult = option; 1823 sbi->s_li_wait_mult = option;
1810 break; 1824 break;
1811 case Opt_noinit_inode_table: 1825 case Opt_noinit_inode_table:
1812 clear_opt(sbi->s_mount_opt, INIT_INODE_TABLE); 1826 clear_opt(sb, INIT_INODE_TABLE);
1813 break; 1827 break;
1814 default: 1828 default:
1815 ext4_msg(sb, KERN_ERR, 1829 ext4_msg(sb, KERN_ERR,
@@ -1821,10 +1835,10 @@ set_qf_format:
1821#ifdef CONFIG_QUOTA 1835#ifdef CONFIG_QUOTA
1822 if (sbi->s_qf_names[USRQUOTA] || sbi->s_qf_names[GRPQUOTA]) { 1836 if (sbi->s_qf_names[USRQUOTA] || sbi->s_qf_names[GRPQUOTA]) {
1823 if (test_opt(sb, USRQUOTA) && sbi->s_qf_names[USRQUOTA]) 1837 if (test_opt(sb, USRQUOTA) && sbi->s_qf_names[USRQUOTA])
1824 clear_opt(sbi->s_mount_opt, USRQUOTA); 1838 clear_opt(sb, USRQUOTA);
1825 1839
1826 if (test_opt(sb, GRPQUOTA) && sbi->s_qf_names[GRPQUOTA]) 1840 if (test_opt(sb, GRPQUOTA) && sbi->s_qf_names[GRPQUOTA])
1827 clear_opt(sbi->s_mount_opt, GRPQUOTA); 1841 clear_opt(sb, GRPQUOTA);
1828 1842
1829 if (test_opt(sb, GRPQUOTA) || test_opt(sb, USRQUOTA)) { 1843 if (test_opt(sb, GRPQUOTA) || test_opt(sb, USRQUOTA)) {
1830 ext4_msg(sb, KERN_ERR, "old and new quota " 1844 ext4_msg(sb, KERN_ERR, "old and new quota "
@@ -1894,12 +1908,12 @@ static int ext4_setup_super(struct super_block *sb, struct ext4_super_block *es,
1894 ext4_commit_super(sb, 1); 1908 ext4_commit_super(sb, 1);
1895 if (test_opt(sb, DEBUG)) 1909 if (test_opt(sb, DEBUG))
1896 printk(KERN_INFO "[EXT4 FS bs=%lu, gc=%u, " 1910 printk(KERN_INFO "[EXT4 FS bs=%lu, gc=%u, "
1897 "bpg=%lu, ipg=%lu, mo=%04x]\n", 1911 "bpg=%lu, ipg=%lu, mo=%04x, mo2=%04x]\n",
1898 sb->s_blocksize, 1912 sb->s_blocksize,
1899 sbi->s_groups_count, 1913 sbi->s_groups_count,
1900 EXT4_BLOCKS_PER_GROUP(sb), 1914 EXT4_BLOCKS_PER_GROUP(sb),
1901 EXT4_INODES_PER_GROUP(sb), 1915 EXT4_INODES_PER_GROUP(sb),
1902 sbi->s_mount_opt); 1916 sbi->s_mount_opt, sbi->s_mount_opt2);
1903 1917
1904 return res; 1918 return res;
1905} 1919}
@@ -1929,14 +1943,13 @@ static int ext4_fill_flex_info(struct super_block *sb)
1929 size = flex_group_count * sizeof(struct flex_groups); 1943 size = flex_group_count * sizeof(struct flex_groups);
1930 sbi->s_flex_groups = kzalloc(size, GFP_KERNEL); 1944 sbi->s_flex_groups = kzalloc(size, GFP_KERNEL);
1931 if (sbi->s_flex_groups == NULL) { 1945 if (sbi->s_flex_groups == NULL) {
1932 sbi->s_flex_groups = vmalloc(size); 1946 sbi->s_flex_groups = vzalloc(size);
1933 if (sbi->s_flex_groups) 1947 if (sbi->s_flex_groups == NULL) {
1934 memset(sbi->s_flex_groups, 0, size); 1948 ext4_msg(sb, KERN_ERR,
1935 } 1949 "not enough memory for %u flex groups",
1936 if (sbi->s_flex_groups == NULL) { 1950 flex_group_count);
1937 ext4_msg(sb, KERN_ERR, "not enough memory for " 1951 goto failed;
1938 "%u flex groups", flex_group_count); 1952 }
1939 goto failed;
1940 } 1953 }
1941 1954
1942 for (i = 0; i < sbi->s_groups_count; i++) { 1955 for (i = 0; i < sbi->s_groups_count; i++) {
@@ -2915,7 +2928,7 @@ static int ext4_register_li_request(struct super_block *sb,
2915 struct ext4_sb_info *sbi = EXT4_SB(sb); 2928 struct ext4_sb_info *sbi = EXT4_SB(sb);
2916 struct ext4_li_request *elr; 2929 struct ext4_li_request *elr;
2917 ext4_group_t ngroups = EXT4_SB(sb)->s_groups_count; 2930 ext4_group_t ngroups = EXT4_SB(sb)->s_groups_count;
2918 int ret; 2931 int ret = 0;
2919 2932
2920 if (sbi->s_li_request != NULL) 2933 if (sbi->s_li_request != NULL)
2921 return 0; 2934 return 0;
@@ -3070,41 +3083,41 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
3070 3083
3071 /* Set defaults before we parse the mount options */ 3084 /* Set defaults before we parse the mount options */
3072 def_mount_opts = le32_to_cpu(es->s_default_mount_opts); 3085 def_mount_opts = le32_to_cpu(es->s_default_mount_opts);
3073 set_opt(sbi->s_mount_opt, INIT_INODE_TABLE); 3086 set_opt(sb, INIT_INODE_TABLE);
3074 if (def_mount_opts & EXT4_DEFM_DEBUG) 3087 if (def_mount_opts & EXT4_DEFM_DEBUG)
3075 set_opt(sbi->s_mount_opt, DEBUG); 3088 set_opt(sb, DEBUG);
3076 if (def_mount_opts & EXT4_DEFM_BSDGROUPS) { 3089 if (def_mount_opts & EXT4_DEFM_BSDGROUPS) {
3077 ext4_msg(sb, KERN_WARNING, deprecated_msg, "bsdgroups", 3090 ext4_msg(sb, KERN_WARNING, deprecated_msg, "bsdgroups",
3078 "2.6.38"); 3091 "2.6.38");
3079 set_opt(sbi->s_mount_opt, GRPID); 3092 set_opt(sb, GRPID);
3080 } 3093 }
3081 if (def_mount_opts & EXT4_DEFM_UID16) 3094 if (def_mount_opts & EXT4_DEFM_UID16)
3082 set_opt(sbi->s_mount_opt, NO_UID32); 3095 set_opt(sb, NO_UID32);
3083#ifdef CONFIG_EXT4_FS_XATTR 3096#ifdef CONFIG_EXT4_FS_XATTR
3084 if (def_mount_opts & EXT4_DEFM_XATTR_USER) 3097 if (def_mount_opts & EXT4_DEFM_XATTR_USER)
3085 set_opt(sbi->s_mount_opt, XATTR_USER); 3098 set_opt(sb, XATTR_USER);
3086#endif 3099#endif
3087#ifdef CONFIG_EXT4_FS_POSIX_ACL 3100#ifdef CONFIG_EXT4_FS_POSIX_ACL
3088 if (def_mount_opts & EXT4_DEFM_ACL) 3101 if (def_mount_opts & EXT4_DEFM_ACL)
3089 set_opt(sbi->s_mount_opt, POSIX_ACL); 3102 set_opt(sb, POSIX_ACL);
3090#endif 3103#endif
3091 if ((def_mount_opts & EXT4_DEFM_JMODE) == EXT4_DEFM_JMODE_DATA) 3104 if ((def_mount_opts & EXT4_DEFM_JMODE) == EXT4_DEFM_JMODE_DATA)
3092 set_opt(sbi->s_mount_opt, JOURNAL_DATA); 3105 set_opt(sb, JOURNAL_DATA);
3093 else if ((def_mount_opts & EXT4_DEFM_JMODE) == EXT4_DEFM_JMODE_ORDERED) 3106 else if ((def_mount_opts & EXT4_DEFM_JMODE) == EXT4_DEFM_JMODE_ORDERED)
3094 set_opt(sbi->s_mount_opt, ORDERED_DATA); 3107 set_opt(sb, ORDERED_DATA);
3095 else if ((def_mount_opts & EXT4_DEFM_JMODE) == EXT4_DEFM_JMODE_WBACK) 3108 else if ((def_mount_opts & EXT4_DEFM_JMODE) == EXT4_DEFM_JMODE_WBACK)
3096 set_opt(sbi->s_mount_opt, WRITEBACK_DATA); 3109 set_opt(sb, WRITEBACK_DATA);
3097 3110
3098 if (le16_to_cpu(sbi->s_es->s_errors) == EXT4_ERRORS_PANIC) 3111 if (le16_to_cpu(sbi->s_es->s_errors) == EXT4_ERRORS_PANIC)
3099 set_opt(sbi->s_mount_opt, ERRORS_PANIC); 3112 set_opt(sb, ERRORS_PANIC);
3100 else if (le16_to_cpu(sbi->s_es->s_errors) == EXT4_ERRORS_CONTINUE) 3113 else if (le16_to_cpu(sbi->s_es->s_errors) == EXT4_ERRORS_CONTINUE)
3101 set_opt(sbi->s_mount_opt, ERRORS_CONT); 3114 set_opt(sb, ERRORS_CONT);
3102 else 3115 else
3103 set_opt(sbi->s_mount_opt, ERRORS_RO); 3116 set_opt(sb, ERRORS_RO);
3104 if (def_mount_opts & EXT4_DEFM_BLOCK_VALIDITY) 3117 if (def_mount_opts & EXT4_DEFM_BLOCK_VALIDITY)
3105 set_opt(sbi->s_mount_opt, BLOCK_VALIDITY); 3118 set_opt(sb, BLOCK_VALIDITY);
3106 if (def_mount_opts & EXT4_DEFM_DISCARD) 3119 if (def_mount_opts & EXT4_DEFM_DISCARD)
3107 set_opt(sbi->s_mount_opt, DISCARD); 3120 set_opt(sb, DISCARD);
3108 3121
3109 sbi->s_resuid = le16_to_cpu(es->s_def_resuid); 3122 sbi->s_resuid = le16_to_cpu(es->s_def_resuid);
3110 sbi->s_resgid = le16_to_cpu(es->s_def_resgid); 3123 sbi->s_resgid = le16_to_cpu(es->s_def_resgid);
@@ -3113,7 +3126,7 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
3113 sbi->s_max_batch_time = EXT4_DEF_MAX_BATCH_TIME; 3126 sbi->s_max_batch_time = EXT4_DEF_MAX_BATCH_TIME;
3114 3127
3115 if ((def_mount_opts & EXT4_DEFM_NOBARRIER) == 0) 3128 if ((def_mount_opts & EXT4_DEFM_NOBARRIER) == 0)
3116 set_opt(sbi->s_mount_opt, BARRIER); 3129 set_opt(sb, BARRIER);
3117 3130
3118 /* 3131 /*
3119 * enable delayed allocation by default 3132 * enable delayed allocation by default
@@ -3121,7 +3134,7 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
3121 */ 3134 */
3122 if (!IS_EXT3_SB(sb) && 3135 if (!IS_EXT3_SB(sb) &&
3123 ((def_mount_opts & EXT4_DEFM_NODELALLOC) == 0)) 3136 ((def_mount_opts & EXT4_DEFM_NODELALLOC) == 0))
3124 set_opt(sbi->s_mount_opt, DELALLOC); 3137 set_opt(sb, DELALLOC);
3125 3138
3126 if (!parse_options((char *) sbi->s_es->s_mount_opts, sb, 3139 if (!parse_options((char *) sbi->s_es->s_mount_opts, sb,
3127 &journal_devnum, &journal_ioprio, NULL, 0)) { 3140 &journal_devnum, &journal_ioprio, NULL, 0)) {
@@ -3424,8 +3437,8 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
3424 "suppressed and not mounted read-only"); 3437 "suppressed and not mounted read-only");
3425 goto failed_mount_wq; 3438 goto failed_mount_wq;
3426 } else { 3439 } else {
3427 clear_opt(sbi->s_mount_opt, DATA_FLAGS); 3440 clear_opt(sb, DATA_FLAGS);
3428 set_opt(sbi->s_mount_opt, WRITEBACK_DATA); 3441 set_opt(sb, WRITEBACK_DATA);
3429 sbi->s_journal = NULL; 3442 sbi->s_journal = NULL;
3430 needs_recovery = 0; 3443 needs_recovery = 0;
3431 goto no_journal; 3444 goto no_journal;
@@ -3463,9 +3476,9 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
3463 */ 3476 */
3464 if (jbd2_journal_check_available_features 3477 if (jbd2_journal_check_available_features
3465 (sbi->s_journal, 0, 0, JBD2_FEATURE_INCOMPAT_REVOKE)) 3478 (sbi->s_journal, 0, 0, JBD2_FEATURE_INCOMPAT_REVOKE))
3466 set_opt(sbi->s_mount_opt, ORDERED_DATA); 3479 set_opt(sb, ORDERED_DATA);
3467 else 3480 else
3468 set_opt(sbi->s_mount_opt, JOURNAL_DATA); 3481 set_opt(sb, JOURNAL_DATA);
3469 break; 3482 break;
3470 3483
3471 case EXT4_MOUNT_ORDERED_DATA: 3484 case EXT4_MOUNT_ORDERED_DATA:
@@ -3555,18 +3568,18 @@ no_journal:
3555 (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA)) { 3568 (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA)) {
3556 ext4_msg(sb, KERN_WARNING, "Ignoring delalloc option - " 3569 ext4_msg(sb, KERN_WARNING, "Ignoring delalloc option - "
3557 "requested data journaling mode"); 3570 "requested data journaling mode");
3558 clear_opt(sbi->s_mount_opt, DELALLOC); 3571 clear_opt(sb, DELALLOC);
3559 } 3572 }
3560 if (test_opt(sb, DIOREAD_NOLOCK)) { 3573 if (test_opt(sb, DIOREAD_NOLOCK)) {
3561 if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA) { 3574 if (test_opt(sb, DATA_FLAGS) == EXT4_MOUNT_JOURNAL_DATA) {
3562 ext4_msg(sb, KERN_WARNING, "Ignoring dioread_nolock " 3575 ext4_msg(sb, KERN_WARNING, "Ignoring dioread_nolock "
3563 "option - requested data journaling mode"); 3576 "option - requested data journaling mode");
3564 clear_opt(sbi->s_mount_opt, DIOREAD_NOLOCK); 3577 clear_opt(sb, DIOREAD_NOLOCK);
3565 } 3578 }
3566 if (sb->s_blocksize < PAGE_SIZE) { 3579 if (sb->s_blocksize < PAGE_SIZE) {
3567 ext4_msg(sb, KERN_WARNING, "Ignoring dioread_nolock " 3580 ext4_msg(sb, KERN_WARNING, "Ignoring dioread_nolock "
3568 "option - block size is too small"); 3581 "option - block size is too small");
3569 clear_opt(sbi->s_mount_opt, DIOREAD_NOLOCK); 3582 clear_opt(sb, DIOREAD_NOLOCK);
3570 } 3583 }
3571 } 3584 }
3572 3585
@@ -4158,6 +4171,22 @@ static int ext4_unfreeze(struct super_block *sb)
4158 return 0; 4171 return 0;
4159} 4172}
4160 4173
4174/*
4175 * Structure to save mount options for ext4_remount's benefit
4176 */
4177struct ext4_mount_options {
4178 unsigned long s_mount_opt;
4179 unsigned long s_mount_opt2;
4180 uid_t s_resuid;
4181 gid_t s_resgid;
4182 unsigned long s_commit_interval;
4183 u32 s_min_batch_time, s_max_batch_time;
4184#ifdef CONFIG_QUOTA
4185 int s_jquota_fmt;
4186 char *s_qf_names[MAXQUOTAS];
4187#endif
4188};
4189
4161static int ext4_remount(struct super_block *sb, int *flags, char *data) 4190static int ext4_remount(struct super_block *sb, int *flags, char *data)
4162{ 4191{
4163 struct ext4_super_block *es; 4192 struct ext4_super_block *es;
@@ -4178,6 +4207,7 @@ static int ext4_remount(struct super_block *sb, int *flags, char *data)
4178 lock_super(sb); 4207 lock_super(sb);
4179 old_sb_flags = sb->s_flags; 4208 old_sb_flags = sb->s_flags;
4180 old_opts.s_mount_opt = sbi->s_mount_opt; 4209 old_opts.s_mount_opt = sbi->s_mount_opt;
4210 old_opts.s_mount_opt2 = sbi->s_mount_opt2;
4181 old_opts.s_resuid = sbi->s_resuid; 4211 old_opts.s_resuid = sbi->s_resuid;
4182 old_opts.s_resgid = sbi->s_resgid; 4212 old_opts.s_resgid = sbi->s_resgid;
4183 old_opts.s_commit_interval = sbi->s_commit_interval; 4213 old_opts.s_commit_interval = sbi->s_commit_interval;
@@ -4331,6 +4361,7 @@ static int ext4_remount(struct super_block *sb, int *flags, char *data)
4331restore_opts: 4361restore_opts:
4332 sb->s_flags = old_sb_flags; 4362 sb->s_flags = old_sb_flags;
4333 sbi->s_mount_opt = old_opts.s_mount_opt; 4363 sbi->s_mount_opt = old_opts.s_mount_opt;
4364 sbi->s_mount_opt2 = old_opts.s_mount_opt2;
4334 sbi->s_resuid = old_opts.s_resuid; 4365 sbi->s_resuid = old_opts.s_resuid;
4335 sbi->s_resgid = old_opts.s_resgid; 4366 sbi->s_resgid = old_opts.s_resgid;
4336 sbi->s_commit_interval = old_opts.s_commit_interval; 4367 sbi->s_commit_interval = old_opts.s_commit_interval;