aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ext4
diff options
context:
space:
mode:
Diffstat (limited to 'fs/ext4')
-rw-r--r--fs/ext4/ext4.h1
-rw-r--r--fs/ext4/ext4_jbd2.h4
-rw-r--r--fs/ext4/extents.c4
-rw-r--r--fs/ext4/ialloc.c2
-rw-r--r--fs/ext4/migrate.c14
-rw-r--r--fs/ext4/super.c48
6 files changed, 14 insertions, 59 deletions
diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
index 695b45cc34e7..db1718833f58 100644
--- a/fs/ext4/ext4.h
+++ b/fs/ext4/ext4.h
@@ -536,7 +536,6 @@ do { \
536#define EXT4_MOUNT_QUOTA 0x80000 /* Some quota option set */ 536#define EXT4_MOUNT_QUOTA 0x80000 /* Some quota option set */
537#define EXT4_MOUNT_USRQUOTA 0x100000 /* "old" user quota */ 537#define EXT4_MOUNT_USRQUOTA 0x100000 /* "old" user quota */
538#define EXT4_MOUNT_GRPQUOTA 0x200000 /* "old" group quota */ 538#define EXT4_MOUNT_GRPQUOTA 0x200000 /* "old" group quota */
539#define EXT4_MOUNT_EXTENTS 0x400000 /* Extents support */
540#define EXT4_MOUNT_JOURNAL_CHECKSUM 0x800000 /* Journal checksums */ 539#define EXT4_MOUNT_JOURNAL_CHECKSUM 0x800000 /* Journal checksums */
541#define EXT4_MOUNT_JOURNAL_ASYNC_COMMIT 0x1000000 /* Journal Async Commit */ 540#define EXT4_MOUNT_JOURNAL_ASYNC_COMMIT 0x1000000 /* Journal Async Commit */
542#define EXT4_MOUNT_I_VERSION 0x2000000 /* i_version support */ 541#define EXT4_MOUNT_I_VERSION 0x2000000 /* i_version support */
diff --git a/fs/ext4/ext4_jbd2.h b/fs/ext4/ext4_jbd2.h
index 663197adae56..be2f426f6805 100644
--- a/fs/ext4/ext4_jbd2.h
+++ b/fs/ext4/ext4_jbd2.h
@@ -32,8 +32,8 @@
32 * 5 levels of tree + root which are stored in the inode. */ 32 * 5 levels of tree + root which are stored in the inode. */
33 33
34#define EXT4_SINGLEDATA_TRANS_BLOCKS(sb) \ 34#define EXT4_SINGLEDATA_TRANS_BLOCKS(sb) \
35 (EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_EXTENTS) \ 35 (EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_EXTENTS) \
36 || test_opt(sb, EXTENTS) ? 27U : 8U) 36 ? 27U : 8U)
37 37
38/* Extended attribute operations touch at most two data buffers, 38/* Extended attribute operations touch at most two data buffers,
39 * two bitmap buffers, and two group summaries, in addition to the inode 39 * two bitmap buffers, and two group summaries, in addition to the inode
diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c
index c64080e49493..240cf0daad4b 100644
--- a/fs/ext4/extents.c
+++ b/fs/ext4/extents.c
@@ -2247,7 +2247,7 @@ void ext4_ext_init(struct super_block *sb)
2247 * possible initialization would be here 2247 * possible initialization would be here
2248 */ 2248 */
2249 2249
2250 if (test_opt(sb, EXTENTS)) { 2250 if (EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_EXTENTS)) {
2251 printk(KERN_INFO "EXT4-fs: file extents enabled"); 2251 printk(KERN_INFO "EXT4-fs: file extents enabled");
2252#ifdef AGGRESSIVE_TEST 2252#ifdef AGGRESSIVE_TEST
2253 printk(", aggressive tests"); 2253 printk(", aggressive tests");
@@ -2272,7 +2272,7 @@ void ext4_ext_init(struct super_block *sb)
2272 */ 2272 */
2273void ext4_ext_release(struct super_block *sb) 2273void ext4_ext_release(struct super_block *sb)
2274{ 2274{
2275 if (!test_opt(sb, EXTENTS)) 2275 if (!EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_EXTENTS))
2276 return; 2276 return;
2277 2277
2278#ifdef EXTENTS_STATS 2278#ifdef EXTENTS_STATS
diff --git a/fs/ext4/ialloc.c b/fs/ext4/ialloc.c
index 369c34c64292..4fb86a0061d0 100644
--- a/fs/ext4/ialloc.c
+++ b/fs/ext4/ialloc.c
@@ -917,7 +917,7 @@ got:
917 if (err) 917 if (err)
918 goto fail_free_drop; 918 goto fail_free_drop;
919 919
920 if (test_opt(sb, EXTENTS)) { 920 if (EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_EXTENTS)) {
921 /* set extent flag only for directory, file and normal symlink*/ 921 /* set extent flag only for directory, file and normal symlink*/
922 if (S_ISDIR(mode) || S_ISREG(mode) || S_ISLNK(mode)) { 922 if (S_ISDIR(mode) || S_ISREG(mode) || S_ISLNK(mode)) {
923 EXT4_I(inode)->i_flags |= EXT4_EXTENTS_FL; 923 EXT4_I(inode)->i_flags |= EXT4_EXTENTS_FL;
diff --git a/fs/ext4/migrate.c b/fs/ext4/migrate.c
index e7cd488da4bb..734abca25e35 100644
--- a/fs/ext4/migrate.c
+++ b/fs/ext4/migrate.c
@@ -459,13 +459,13 @@ int ext4_ext_migrate(struct inode *inode)
459 struct list_blocks_struct lb; 459 struct list_blocks_struct lb;
460 unsigned long max_entries; 460 unsigned long max_entries;
461 461
462 if (!test_opt(inode->i_sb, EXTENTS)) 462 /*
463 /* 463 * If the filesystem does not support extents, or the inode
464 * if mounted with noextents we don't allow the migrate 464 * already is extent-based, error out.
465 */ 465 */
466 return -EINVAL; 466 if (!EXT4_HAS_INCOMPAT_FEATURE(inode->i_sb,
467 467 EXT4_FEATURE_INCOMPAT_EXTENTS) ||
468 if ((EXT4_I(inode)->i_flags & EXT4_EXTENTS_FL)) 468 (EXT4_I(inode)->i_flags & EXT4_EXTENTS_FL))
469 return -EINVAL; 469 return -EINVAL;
470 470
471 if (S_ISLNK(inode->i_mode) && inode->i_blocks == 0) 471 if (S_ISLNK(inode->i_mode) && inode->i_blocks == 0)
diff --git a/fs/ext4/super.c b/fs/ext4/super.c
index b69d09203865..acb69c00fd42 100644
--- a/fs/ext4/super.c
+++ b/fs/ext4/super.c
@@ -829,8 +829,6 @@ static int ext4_show_options(struct seq_file *seq, struct vfsmount *vfs)
829 seq_puts(seq, ",journal_async_commit"); 829 seq_puts(seq, ",journal_async_commit");
830 if (test_opt(sb, NOBH)) 830 if (test_opt(sb, NOBH))
831 seq_puts(seq, ",nobh"); 831 seq_puts(seq, ",nobh");
832 if (!test_opt(sb, EXTENTS))
833 seq_puts(seq, ",noextents");
834 if (test_opt(sb, I_VERSION)) 832 if (test_opt(sb, I_VERSION))
835 seq_puts(seq, ",i_version"); 833 seq_puts(seq, ",i_version");
836 if (!test_opt(sb, DELALLOC)) 834 if (!test_opt(sb, DELALLOC))
@@ -1011,7 +1009,7 @@ enum {
1011 Opt_usrjquota, Opt_grpjquota, Opt_offusrjquota, Opt_offgrpjquota, 1009 Opt_usrjquota, Opt_grpjquota, Opt_offusrjquota, Opt_offgrpjquota,
1012 Opt_jqfmt_vfsold, Opt_jqfmt_vfsv0, Opt_quota, Opt_noquota, 1010 Opt_jqfmt_vfsold, Opt_jqfmt_vfsv0, Opt_quota, Opt_noquota,
1013 Opt_ignore, Opt_barrier, Opt_err, Opt_resize, Opt_usrquota, 1011 Opt_ignore, Opt_barrier, Opt_err, Opt_resize, Opt_usrquota,
1014 Opt_grpquota, Opt_extents, Opt_noextents, Opt_i_version, 1012 Opt_grpquota, Opt_i_version,
1015 Opt_stripe, Opt_delalloc, Opt_nodelalloc, 1013 Opt_stripe, Opt_delalloc, Opt_nodelalloc,
1016 Opt_inode_readahead_blks, Opt_journal_ioprio 1014 Opt_inode_readahead_blks, Opt_journal_ioprio
1017}; 1015};
@@ -1066,8 +1064,6 @@ static const match_table_t tokens = {
1066 {Opt_quota, "quota"}, 1064 {Opt_quota, "quota"},
1067 {Opt_usrquota, "usrquota"}, 1065 {Opt_usrquota, "usrquota"},
1068 {Opt_barrier, "barrier=%u"}, 1066 {Opt_barrier, "barrier=%u"},
1069 {Opt_extents, "extents"},
1070 {Opt_noextents, "noextents"},
1071 {Opt_i_version, "i_version"}, 1067 {Opt_i_version, "i_version"},
1072 {Opt_stripe, "stripe=%u"}, 1068 {Opt_stripe, "stripe=%u"},
1073 {Opt_resize, "resize"}, 1069 {Opt_resize, "resize"},
@@ -1115,7 +1111,6 @@ static int parse_options(char *options, struct super_block *sb,
1115 int qtype, qfmt; 1111 int qtype, qfmt;
1116 char *qname; 1112 char *qname;
1117#endif 1113#endif
1118 ext4_fsblk_t last_block;
1119 1114
1120 if (!options) 1115 if (!options)
1121 return 1; 1116 return 1;
@@ -1445,33 +1440,6 @@ set_qf_format:
1445 case Opt_bh: 1440 case Opt_bh:
1446 clear_opt(sbi->s_mount_opt, NOBH); 1441 clear_opt(sbi->s_mount_opt, NOBH);
1447 break; 1442 break;
1448 case Opt_extents:
1449 if (!EXT4_HAS_INCOMPAT_FEATURE(sb,
1450 EXT4_FEATURE_INCOMPAT_EXTENTS)) {
1451 ext4_warning(sb, __func__,
1452 "extents feature not enabled "
1453 "on this filesystem, use tune2fs");
1454 return 0;
1455 }
1456 set_opt(sbi->s_mount_opt, EXTENTS);
1457 break;
1458 case Opt_noextents:
1459 /*
1460 * When e2fsprogs support resizing an already existing
1461 * ext3 file system to greater than 2**32 we need to
1462 * add support to block allocator to handle growing
1463 * already existing block mapped inode so that blocks
1464 * allocated for them fall within 2**32
1465 */
1466 last_block = ext4_blocks_count(sbi->s_es) - 1;
1467 if (last_block > 0xffffffffULL) {
1468 printk(KERN_ERR "EXT4-fs: Filesystem too "
1469 "large to mount with "
1470 "-o noextents options\n");
1471 return 0;
1472 }
1473 clear_opt(sbi->s_mount_opt, EXTENTS);
1474 break;
1475 case Opt_i_version: 1443 case Opt_i_version:
1476 set_opt(sbi->s_mount_opt, I_VERSION); 1444 set_opt(sbi->s_mount_opt, I_VERSION);
1477 sb->s_flags |= MS_I_VERSION; 1445 sb->s_flags |= MS_I_VERSION;
@@ -2136,18 +2104,6 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
2136 set_opt(sbi->s_mount_opt, BARRIER); 2104 set_opt(sbi->s_mount_opt, BARRIER);
2137 2105
2138 /* 2106 /*
2139 * turn on extents feature by default in ext4 filesystem
2140 * only if feature flag already set by mkfs or tune2fs.
2141 * Use -o noextents to turn it off
2142 */
2143 if (EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_EXTENTS))
2144 set_opt(sbi->s_mount_opt, EXTENTS);
2145 else
2146 ext4_warning(sb, __func__,
2147 "extents feature not enabled on this filesystem, "
2148 "use tune2fs.");
2149
2150 /*
2151 * enable delayed allocation by default 2107 * enable delayed allocation by default
2152 * Use -o nodelalloc to turn it off 2108 * Use -o nodelalloc to turn it off
2153 */ 2109 */
@@ -3825,7 +3781,7 @@ static void __exit exit_ext4_fs(void)
3825} 3781}
3826 3782
3827MODULE_AUTHOR("Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore Ts'o and others"); 3783MODULE_AUTHOR("Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore Ts'o and others");
3828MODULE_DESCRIPTION("Fourth Extended Filesystem with extents"); 3784MODULE_DESCRIPTION("Fourth Extended Filesystem");
3829MODULE_LICENSE("GPL"); 3785MODULE_LICENSE("GPL");
3830module_init(init_ext4_fs) 3786module_init(init_ext4_fs)
3831module_exit(exit_ext4_fs) 3787module_exit(exit_ext4_fs)