diff options
Diffstat (limited to 'fs/ext4/ialloc.c')
-rw-r--r-- | fs/ext4/ialloc.c | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/fs/ext4/ialloc.c b/fs/ext4/ialloc.c index ac644c31ca67..2cf18a2d5c72 100644 --- a/fs/ext4/ialloc.c +++ b/fs/ext4/ialloc.c | |||
@@ -14,7 +14,6 @@ | |||
14 | 14 | ||
15 | #include <linux/time.h> | 15 | #include <linux/time.h> |
16 | #include <linux/fs.h> | 16 | #include <linux/fs.h> |
17 | #include <linux/jbd2.h> | ||
18 | #include <linux/stat.h> | 17 | #include <linux/stat.h> |
19 | #include <linux/string.h> | 18 | #include <linux/string.h> |
20 | #include <linux/quotaops.h> | 19 | #include <linux/quotaops.h> |
@@ -997,6 +996,12 @@ got: | |||
997 | ei->i_block_group = group; | 996 | ei->i_block_group = group; |
998 | ei->i_last_alloc_group = ~0; | 997 | ei->i_last_alloc_group = ~0; |
999 | 998 | ||
999 | /* If the directory encrypted, then we should encrypt the inode. */ | ||
1000 | if ((S_ISDIR(mode) || S_ISREG(mode) || S_ISLNK(mode)) && | ||
1001 | (ext4_encrypted_inode(dir) || | ||
1002 | DUMMY_ENCRYPTION_ENABLED(sbi))) | ||
1003 | ext4_set_inode_flag(inode, EXT4_INODE_ENCRYPT); | ||
1004 | |||
1000 | ext4_set_inode_flags(inode); | 1005 | ext4_set_inode_flags(inode); |
1001 | if (IS_DIRSYNC(inode)) | 1006 | if (IS_DIRSYNC(inode)) |
1002 | ext4_handle_sync(handle); | 1007 | ext4_handle_sync(handle); |
@@ -1029,11 +1034,28 @@ got: | |||
1029 | ext4_set_inode_state(inode, EXT4_STATE_NEW); | 1034 | ext4_set_inode_state(inode, EXT4_STATE_NEW); |
1030 | 1035 | ||
1031 | ei->i_extra_isize = EXT4_SB(sb)->s_want_extra_isize; | 1036 | ei->i_extra_isize = EXT4_SB(sb)->s_want_extra_isize; |
1032 | 1037 | #ifdef CONFIG_EXT4_FS_ENCRYPTION | |
1038 | if ((sbi->s_file_encryption_mode == EXT4_ENCRYPTION_MODE_INVALID) && | ||
1039 | (sbi->s_dir_encryption_mode == EXT4_ENCRYPTION_MODE_INVALID)) { | ||
1040 | ei->i_inline_off = 0; | ||
1041 | if (EXT4_HAS_INCOMPAT_FEATURE(sb, | ||
1042 | EXT4_FEATURE_INCOMPAT_INLINE_DATA)) | ||
1043 | ext4_set_inode_state(inode, | ||
1044 | EXT4_STATE_MAY_INLINE_DATA); | ||
1045 | } else { | ||
1046 | /* Inline data and encryption are incompatible | ||
1047 | * We turn off inline data since encryption is enabled */ | ||
1048 | ei->i_inline_off = 1; | ||
1049 | if (EXT4_HAS_INCOMPAT_FEATURE(sb, | ||
1050 | EXT4_FEATURE_INCOMPAT_INLINE_DATA)) | ||
1051 | ext4_clear_inode_state(inode, | ||
1052 | EXT4_STATE_MAY_INLINE_DATA); | ||
1053 | } | ||
1054 | #else | ||
1033 | ei->i_inline_off = 0; | 1055 | ei->i_inline_off = 0; |
1034 | if (EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_INLINE_DATA)) | 1056 | if (EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_INLINE_DATA)) |
1035 | ext4_set_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA); | 1057 | ext4_set_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA); |
1036 | 1058 | #endif | |
1037 | ret = inode; | 1059 | ret = inode; |
1038 | err = dquot_alloc_inode(inode); | 1060 | err = dquot_alloc_inode(inode); |
1039 | if (err) | 1061 | if (err) |