]> git.proxmox.com Git - mirror_ubuntu-zesty-kernel.git/blobdiff - fs/ext4/file.c
Merge tag 'mmc-4.1-rc1' of git://git.linaro.org/people/ulf.hansson/mmc
[mirror_ubuntu-zesty-kernel.git] / fs / ext4 / file.c
index e576d682b35323f324c9cdf698aac6a9f725488a..0613c256c3441a208f51291dbc2691489cf4dd9c 100644 (file)
@@ -20,7 +20,6 @@
 
 #include <linux/time.h>
 #include <linux/fs.h>
-#include <linux/jbd2.h>
 #include <linux/mount.h>
 #include <linux/path.h>
 #include <linux/quotaops.h>
@@ -221,6 +220,13 @@ static const struct vm_operations_struct ext4_file_vm_ops = {
 
 static int ext4_file_mmap(struct file *file, struct vm_area_struct *vma)
 {
+       struct inode *inode = file->f_mapping->host;
+
+       if (ext4_encrypted_inode(inode)) {
+               int err = ext4_generate_encryption_key(inode);
+               if (err)
+                       return 0;
+       }
        file_accessed(file);
        if (IS_DAX(file_inode(file))) {
                vma->vm_ops = &ext4_dax_vm_ops;
@@ -238,6 +244,7 @@ static int ext4_file_open(struct inode * inode, struct file * filp)
        struct vfsmount *mnt = filp->f_path.mnt;
        struct path path;
        char buf[64], *cp;
+       int ret;
 
        if (unlikely(!(sbi->s_mount_flags & EXT4_MF_MNTDIR_SAMPLED) &&
                     !(sb->s_flags & MS_RDONLY))) {
@@ -276,11 +283,17 @@ static int ext4_file_open(struct inode * inode, struct file * filp)
         * writing and the journal is present
         */
        if (filp->f_mode & FMODE_WRITE) {
-               int ret = ext4_inode_attach_jinode(inode);
+               ret = ext4_inode_attach_jinode(inode);
                if (ret < 0)
                        return ret;
        }
-       return dquot_file_open(inode, filp);
+       ret = dquot_file_open(inode, filp);
+       if (!ret && ext4_encrypted_inode(inode)) {
+               ret = ext4_generate_encryption_key(inode);
+               if (ret)
+                       ret = -EACCES;
+       }
+       return ret;
 }
 
 /*