summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2008-08-02 00:49:18 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2008-10-23 03:34:19 -0400
commitd181146572c4fa9af2a068b967cb53dcac7da944 (patch)
tree35919e1675740059cf9336c7dbff0ef35032351c
parent2515ddc6db8eb49a79f0fe5e67ff09ac7c81eab4 (diff)
[PATCH] new helper - kern_path()
Analog of lookup_path(), takes struct path *. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
-rw-r--r--fs/namei.c10
-rw-r--r--include/linux/namei.h2
2 files changed, 12 insertions, 0 deletions
diff --git a/fs/namei.c b/fs/namei.c
index 4ea63ed5e791..4a56f9b59e8c 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -1106,6 +1106,15 @@ int path_lookup(const char *name, unsigned int flags,
return do_path_lookup(AT_FDCWD, name, flags, nd);
}
+int kern_path(const char *name, unsigned int flags, struct path *path)
+{
+ struct nameidata nd;
+ int res = do_path_lookup(AT_FDCWD, name, flags, &nd);
+ if (!res)
+ *path = nd.path;
+ return res;
+}
+
/**
* vfs_path_lookup - lookup a file path relative to a dentry-vfsmount pair
* @dentry: pointer to dentry of the base directory
@@ -2855,6 +2864,7 @@ EXPORT_SYMBOL(__page_symlink);
EXPORT_SYMBOL(page_symlink);
EXPORT_SYMBOL(page_symlink_inode_operations);
EXPORT_SYMBOL(path_lookup);
+EXPORT_SYMBOL(kern_path);
EXPORT_SYMBOL(vfs_path_lookup);
EXPORT_SYMBOL(inode_permission);
EXPORT_SYMBOL(vfs_permission);
diff --git a/include/linux/namei.h b/include/linux/namei.h
index 68f8c3203c89..221e8bc894ba 100644
--- a/include/linux/namei.h
+++ b/include/linux/namei.h
@@ -61,6 +61,8 @@ extern int user_path_at(int, const char __user *, unsigned, struct path *);
#define user_path_dir(name, path) \
user_path_at(AT_FDCWD, name, LOOKUP_FOLLOW | LOOKUP_DIRECTORY, path)
+extern int kern_path(const char *, unsigned, struct path *);
+
extern int path_lookup(const char *, unsigned, struct nameidata *);
extern int vfs_path_lookup(struct dentry *, struct vfsmount *,
const char *, unsigned int, struct nameidata *);