1 diff -wur a/fs/ext4/inode.c b/fs/ext4/inode.c
4 @@ -4766,8 +4766,9 @@ void ext4_set_inode_flags(struct inod
5 if (init && ext4_should_enable_dax(inode))
8 - if (flags & EXT4_ENCRYPT_FL)
9 + if (flags & EXT4_ENCRYPT_FL &&
10 + unlikely(test_opt(inode->i_sb, DIRDATA) != EXT4_MOUNT_DIRDATA))
11 new_fl |= S_ENCRYPTED;
12 inode_set_flags(inode, new_fl,
13 S_SYNC|S_APPEND|S_IMMUTABLE|S_NOATIME|S_DIRSYNC|S_DAX|
15 @@ -5753,8 +5757,9 @@ int ext4_getattr(const struct path *p
16 stat->attributes |= STATX_ATTR_APPEND;
17 if (flags & EXT4_COMPR_FL)
18 stat->attributes |= STATX_ATTR_COMPRESSED;
19 - if (flags & EXT4_ENCRYPT_FL)
20 + if (flags & EXT4_ENCRYPT_FL &&
21 + unlikely(test_opt(inode->i_sb, DIRDATA) != EXT4_MOUNT_DIRDATA))
22 stat->attributes |= STATX_ATTR_ENCRYPTED;
23 if (flags & EXT4_IMMUTABLE_FL)
24 stat->attributes |= STATX_ATTR_IMMUTABLE;
25 if (flags & EXT4_NODUMP_FL)
26 diff -wur a/fs/ext4/xattr.c b/fs/ext4/xattr.c
30 up_read(&EXT4_I(inode)->xattr_sem);
33 +EXPORT_SYMBOL(ext4_xattr_get);
36 ext4_xattr_list_entries(struct dentry *dentry, struct ext4_xattr_entry *entry,
37 @@ -2413,13 +2415,18 @@
38 ext4_handle_sync(handle);
41 + if (!error && name_index == EXT4_XATTR_INDEX_ENCRYPTION &&
42 + strcmp(name, "c") == 0)
43 + EXT4_I(inode)->i_flags |= EXT4_ENCRYPT_FL;
48 ext4_write_unlock_xattr(inode, &no_expand);
51 +EXPORT_SYMBOL(ext4_xattr_set_handle);
53 int ext4_xattr_set_credits(struct inode *inode, size_t value_len,
54 bool is_create, int *credits)