diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2012-07-20 04:09:19 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2012-07-29 13:24:17 -0400 |
commit | 0b1d90119a479ca3b70d871da4b2ce6c4ef9eff0 (patch) | |
tree | bfaeb99d55bbe8d36b136dc28c961a6212b269bc /fs/ecryptfs/inode.c | |
parent | bc65a1215eda3e067801e0a8f3eeffb62800f355 (diff) |
ecryptfs_lookup_interpose(): allocate dentry_info first
less work on failure that way
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/ecryptfs/inode.c')
-rw-r--r-- | fs/ecryptfs/inode.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/fs/ecryptfs/inode.c b/fs/ecryptfs/inode.c index eeb734aea5ba..c3ca12c33ca2 100644 --- a/fs/ecryptfs/inode.c +++ b/fs/ecryptfs/inode.c | |||
@@ -318,21 +318,20 @@ static int ecryptfs_lookup_interpose(struct dentry *dentry, | |||
318 | struct vfsmount *lower_mnt; | 318 | struct vfsmount *lower_mnt; |
319 | int rc = 0; | 319 | int rc = 0; |
320 | 320 | ||
321 | lower_mnt = mntget(ecryptfs_dentry_to_lower_mnt(dentry->d_parent)); | ||
322 | fsstack_copy_attr_atime(dir_inode, lower_dentry->d_parent->d_inode); | ||
323 | BUG_ON(!lower_dentry->d_count); | ||
324 | |||
325 | dentry_info = kmem_cache_alloc(ecryptfs_dentry_info_cache, GFP_KERNEL); | 321 | dentry_info = kmem_cache_alloc(ecryptfs_dentry_info_cache, GFP_KERNEL); |
326 | ecryptfs_set_dentry_private(dentry, dentry_info); | ||
327 | if (!dentry_info) { | 322 | if (!dentry_info) { |
328 | printk(KERN_ERR "%s: Out of memory whilst attempting " | 323 | printk(KERN_ERR "%s: Out of memory whilst attempting " |
329 | "to allocate ecryptfs_dentry_info struct\n", | 324 | "to allocate ecryptfs_dentry_info struct\n", |
330 | __func__); | 325 | __func__); |
331 | dput(lower_dentry); | 326 | dput(lower_dentry); |
332 | mntput(lower_mnt); | ||
333 | d_drop(dentry); | ||
334 | return -ENOMEM; | 327 | return -ENOMEM; |
335 | } | 328 | } |
329 | |||
330 | lower_mnt = mntget(ecryptfs_dentry_to_lower_mnt(dentry->d_parent)); | ||
331 | fsstack_copy_attr_atime(dir_inode, lower_dentry->d_parent->d_inode); | ||
332 | BUG_ON(!lower_dentry->d_count); | ||
333 | |||
334 | ecryptfs_set_dentry_private(dentry, dentry_info); | ||
336 | ecryptfs_set_dentry_lower(dentry, lower_dentry); | 335 | ecryptfs_set_dentry_lower(dentry, lower_dentry); |
337 | ecryptfs_set_dentry_lower_mnt(dentry, lower_mnt); | 336 | ecryptfs_set_dentry_lower_mnt(dentry, lower_mnt); |
338 | 337 | ||