|
@@ -2253,7 +2253,19 @@ retry:
|
|
|
else
|
|
|
inode->i_fop = &ext4_file_operations;
|
|
|
ext4_set_aops(inode);
|
|
|
- err = ext4_add_nondir(handle, dentry, inode);
|
|
|
+ err = 0;
|
|
|
+#ifdef CONFIG_EXT4_FS_ENCRYPTION
|
|
|
+ if (!err && ext4_encrypted_inode(dir)) {
|
|
|
+ err = ext4_inherit_context(dir, inode);
|
|
|
+ if (err) {
|
|
|
+ clear_nlink(inode);
|
|
|
+ unlock_new_inode(inode);
|
|
|
+ iput(inode);
|
|
|
+ }
|
|
|
+ }
|
|
|
+#endif
|
|
|
+ if (!err)
|
|
|
+ err = ext4_add_nondir(handle, dentry, inode);
|
|
|
if (!err && IS_DIRSYNC(dir))
|
|
|
ext4_handle_sync(handle);
|
|
|
}
|
|
@@ -2437,6 +2449,13 @@ retry:
|
|
|
err = ext4_init_new_dir(handle, dir, inode);
|
|
|
if (err)
|
|
|
goto out_clear_inode;
|
|
|
+#ifdef CONFIG_EXT4_FS_ENCRYPTION
|
|
|
+ if (ext4_encrypted_inode(dir)) {
|
|
|
+ err = ext4_inherit_context(dir, inode);
|
|
|
+ if (err)
|
|
|
+ goto out_clear_inode;
|
|
|
+ }
|
|
|
+#endif
|
|
|
err = ext4_mark_inode_dirty(handle, inode);
|
|
|
if (!err)
|
|
|
err = ext4_add_entry(handle, dentry, inode);
|