[PATCH 10/23] vfs: Teach do_path_lookup to use file_hotplug_lock

Eric W. Biederman
2009-06-01T21:54:20Z

From: Eric W. Biederman <ebiederm@maxwell.aristanetworks.com>

Signed-off-by: Eric W. Biederman <ebiederm@aristanetworks.com>
---
fs/namei.c | 11 +++++++++--
1 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/fs/namei.c b/fs/namei.c
index 5472ed0..c4c6575 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -1049,23 +1049,30 @@ static int path_init(int dfd, const char *name, unsigned int flags, struct namei
if (!file)
goto out_fail;

+ retval = -EIO;
+ if (!file_hotplug_read_trylock(file))
+ goto fput_fail;
+
dentry = file->f_path.dentry;

retval = -ENOTDIR;
if (!S_ISDIR(dentry->d_inode->i_mode))
- goto fput_fail;
+ goto unlock_fail;

retval = file_permission(file, MAY_EXEC);
if (retval)
- goto fput_fail;
+ goto unlock_fail;

nd->path = file->f_path;
path_get(&file->f_path);

+ file_hotplug_read_unlock(file);
fput_light(file, fput_needed);
}
return 0;

+unlock_fail:
+ file_hotplug_read_unlock(file);
fput_fail:
fput_light(file, fput_needed);
out_fail:
--
1.6.3.1.54.g99dd.dirty