diff options
Diffstat (limited to 'fs/ecryptfs/file.c')
-rw-r--r-- | fs/ecryptfs/file.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/fs/ecryptfs/file.c b/fs/ecryptfs/file.c index f0be29051528..2c2d60df3f60 100644 --- a/fs/ecryptfs/file.c +++ b/fs/ecryptfs/file.c | |||
@@ -199,6 +199,20 @@ static int ecryptfs_open(struct inode *inode, struct file *file) | |||
199 | "file must hence be opened RO\n", __func__); | 199 | "file must hence be opened RO\n", __func__); |
200 | goto out; | 200 | goto out; |
201 | } | 201 | } |
202 | if (!ecryptfs_inode_to_private(inode)->lower_file) { | ||
203 | BUG_ON(!(crypt_stat->flags & ECRYPTFS_DELAY_PERSISTENT)); | ||
204 | mutex_lock(&crypt_stat->cs_mutex); | ||
205 | crypt_stat->flags &= ~(ECRYPTFS_ENCRYPTED); | ||
206 | mutex_unlock(&crypt_stat->cs_mutex); | ||
207 | rc = ecryptfs_init_persistent_file(ecryptfs_dentry); | ||
208 | if (rc) { | ||
209 | printk(KERN_ERR "%s: Error attempting to initialize " | ||
210 | "the persistent file for the dentry with name " | ||
211 | "[%s]; rc = [%d]\n", __func__, | ||
212 | ecryptfs_dentry->d_name.name, rc); | ||
213 | goto out; | ||
214 | } | ||
215 | } | ||
202 | ecryptfs_set_file_lower( | 216 | ecryptfs_set_file_lower( |
203 | file, ecryptfs_inode_to_private(inode)->lower_file); | 217 | file, ecryptfs_inode_to_private(inode)->lower_file); |
204 | if (S_ISDIR(ecryptfs_dentry->d_inode->i_mode)) { | 218 | if (S_ISDIR(ecryptfs_dentry->d_inode->i_mode)) { |