summaryrefslogtreecommitdiffstats
path: root/fs/ecryptfs/main.c
diff options
context:
space:
mode:
authorTyler Hicks <tyhicks@linux.vnet.ibm.com>2011-05-24 03:49:02 -0500
committerTyler Hicks <tyhicks@linux.vnet.ibm.com>2011-05-29 14:23:39 -0500
commit3b06b3ebf44170c90c893c6c80916db6e922b9f2 (patch)
tree1da70b311ad7ec7615f3d44ae269ca56a458fc2d /fs/ecryptfs/main.c
parent5ccf92037c7c6e6f28175fd245284923f939259f (diff)
downloadlinux-3b06b3ebf44170c90c893c6c80916db6e922b9f2.tar.gz
linux-3b06b3ebf44170c90c893c6c80916db6e922b9f2.tar.bz2
linux-3b06b3ebf44170c90c893c6c80916db6e922b9f2.zip
eCryptfs: Fix new inode race condition
Only unlock and d_add() new inodes after the plaintext inode size has been read from the lower filesystem. This fixes a race condition that was sometimes seen during a multi-job kernel build in an eCryptfs mount. https://bugzilla.kernel.org/show_bug.cgi?id=36002 Signed-off-by: Tyler Hicks <tyhicks@linux.vnet.ibm.com> Reported-by: David <david@unsolicited.net> Tested-by: David <david@unsolicited.net>
Diffstat (limited to 'fs/ecryptfs/main.c')
-rw-r--r--fs/ecryptfs/main.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/fs/ecryptfs/main.c b/fs/ecryptfs/main.c
index 7c697abab396..943a4f55ed6d 100644
--- a/fs/ecryptfs/main.c
+++ b/fs/ecryptfs/main.c
@@ -135,12 +135,12 @@ static int ecryptfs_init_lower_file(struct dentry *dentry,
return rc;
}
-int ecryptfs_get_lower_file(struct dentry *dentry)
+int ecryptfs_get_lower_file(struct dentry *dentry, struct inode *inode)
{
- struct ecryptfs_inode_info *inode_info =
- ecryptfs_inode_to_private(dentry->d_inode);
+ struct ecryptfs_inode_info *inode_info;
int count, rc = 0;
+ inode_info = ecryptfs_inode_to_private(inode);
mutex_lock(&inode_info->lower_file_mutex);
count = atomic_inc_return(&inode_info->lower_file_count);
if (WARN_ON_ONCE(count < 1))