diff options
-rw-r--r-- | Documentation/filesystems/ext4.txt | 5 | ||||
-rw-r--r-- | fs/ext4/ext4.h | 1 | ||||
-rw-r--r-- | fs/ext4/ext4_jbd2.h | 4 | ||||
-rw-r--r-- | fs/ext4/extents.c | 4 | ||||
-rw-r--r-- | fs/ext4/ialloc.c | 2 | ||||
-rw-r--r-- | fs/ext4/migrate.c | 14 | ||||
-rw-r--r-- | fs/ext4/super.c | 48 |
7 files changed, 14 insertions, 64 deletions
diff --git a/Documentation/filesystems/ext4.txt b/Documentation/filesystems/ext4.txt index 8938949b201e..cec829bc7291 100644 --- a/Documentation/filesystems/ext4.txt +++ b/Documentation/filesystems/ext4.txt | |||
@@ -131,11 +131,6 @@ ro Mount filesystem read only. Note that ext4 will | |||
131 | mount options "ro,noload" can be used to prevent | 131 | mount options "ro,noload" can be used to prevent |
132 | writes to the filesystem. | 132 | writes to the filesystem. |
133 | 133 | ||
134 | extents (*) ext4 will use extents to address file data. The | ||
135 | file system will no longer be mountable by ext3. | ||
136 | |||
137 | noextents ext4 will not use extents for newly created files | ||
138 | |||
139 | journal_checksum Enable checksumming of the journal transactions. | 134 | journal_checksum Enable checksumming of the journal transactions. |
140 | This will allow the recovery code in e2fsck and the | 135 | This will allow the recovery code in e2fsck and the |
141 | kernel to detect corruption in the kernel. It is a | 136 | kernel to detect corruption in the kernel. It is a |
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 | */ |
2273 | void ext4_ext_release(struct super_block *sb) | 2273 | void 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 | ||
3827 | MODULE_AUTHOR("Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore Ts'o and others"); | 3783 | MODULE_AUTHOR("Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore Ts'o and others"); |
3828 | MODULE_DESCRIPTION("Fourth Extended Filesystem with extents"); | 3784 | MODULE_DESCRIPTION("Fourth Extended Filesystem"); |
3829 | MODULE_LICENSE("GPL"); | 3785 | MODULE_LICENSE("GPL"); |
3830 | module_init(init_ext4_fs) | 3786 | module_init(init_ext4_fs) |
3831 | module_exit(exit_ext4_fs) | 3787 | module_exit(exit_ext4_fs) |