open-style analog of vfs_path_lookup()
new function: file_open_root(dentry, mnt, name, flags) opens the file vfs_path_lookup would arrive to. Note that name can be empty; in that case the usual requirement that dentry should be a directory is lifted. open-coded equivalents switched to it, may_open() got down exactly one caller and became static. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
21
fs/nfsctl.c
21
fs/nfsctl.c
@@ -22,30 +22,17 @@
|
||||
|
||||
static struct file *do_open(char *name, int flags)
|
||||
{
|
||||
struct nameidata nd;
|
||||
struct vfsmount *mnt;
|
||||
int error;
|
||||
struct file *file;
|
||||
|
||||
mnt = do_kern_mount("nfsd", 0, "nfsd", NULL);
|
||||
if (IS_ERR(mnt))
|
||||
return (struct file *)mnt;
|
||||
|
||||
error = vfs_path_lookup(mnt->mnt_root, mnt, name, 0, &nd);
|
||||
file = file_open_root(mnt->mnt_root, mnt, name, flags);
|
||||
|
||||
mntput(mnt); /* drop do_kern_mount reference */
|
||||
if (error)
|
||||
return ERR_PTR(error);
|
||||
|
||||
if (flags == O_RDWR)
|
||||
error = may_open(&nd.path, MAY_READ|MAY_WRITE, flags);
|
||||
else
|
||||
error = may_open(&nd.path, MAY_WRITE, flags);
|
||||
|
||||
if (!error)
|
||||
return dentry_open(nd.path.dentry, nd.path.mnt, flags,
|
||||
current_cred());
|
||||
|
||||
path_put(&nd.path);
|
||||
return ERR_PTR(error);
|
||||
return file;
|
||||
}
|
||||
|
||||
static struct {
|
||||
|
Reference in New Issue
Block a user