unsigned long flags;
        struct ext4_crypt_info *ci = EXT4_I(inode)->i_crypt_info;
 
-       BUG_ON(ci == NULL);
+       if (ci == NULL)
+               return ERR_PTR(-ENOKEY);
 
        /*
         * We first try getting the ctx from a free list because in
 
        if (res < 0)
                return res;
        ci = EXT4_I(parent)->i_crypt_info;
-       BUG_ON(ci == NULL);
+       if (ci == NULL)
+               return -ENOKEY;
 
        ctx.format = EXT4_ENCRYPTION_CONTEXT_FORMAT_V1;
        if (DUMMY_ENCRYPTION_ENABLED(EXT4_SB(parent->i_sb))) {
 
                int err = ext4_get_encryption_info(inode);
                if (err)
                        return 0;
+               if (ext4_encryption_info(inode) == NULL)
+                       return -ENOKEY;
        }
        file_accessed(file);
        if (IS_DAX(file_inode(file))) {
                        ext4_journal_stop(handle);
                }
        }
+       if (ext4_encrypted_inode(inode)) {
+               ret = ext4_get_encryption_info(inode);
+               if (ret)
+                       return -EACCES;
+               if (ext4_encryption_info(inode) == NULL)
+                       return -ENOKEY;
+       }
        /*
         * Set up the jbd2_inode if we are opening the inode for
         * writing and the journal is present
                if (ret < 0)
                        return ret;
        }
-       ret = dquot_file_open(inode, filp);
-       if (!ret && ext4_encrypted_inode(inode)) {
-               ret = ext4_get_encryption_info(inode);
-               if (ret)
-                       ret = -EACCES;
-       }
-       return ret;
+       return dquot_file_open(inode, filp);
 }
 
 /*