diff options
Diffstat (limited to 'fs/open.c')
| -rw-r--r-- | fs/open.c | 17 | 
1 files changed, 5 insertions, 12 deletions
diff --git a/fs/open.c b/fs/open.c index 75bea868ef8..1e914b397e1 100644 --- a/fs/open.c +++ b/fs/open.c @@ -766,11 +766,7 @@ int finish_no_open(struct file *file, struct dentry *dentry)  }  EXPORT_SYMBOL(finish_no_open); -/* - * dentry_open() will have done dput(dentry) and mntput(mnt) if it returns an - * error. - */ -struct file *dentry_open(struct dentry *dentry, struct vfsmount *mnt, int flags, +struct file *dentry_open(const struct path *path, int flags,  			 const struct cred *cred)  {  	int error; @@ -779,19 +775,16 @@ struct file *dentry_open(struct dentry *dentry, struct vfsmount *mnt, int flags,  	validate_creds(cred);  	/* We must always pass in a valid mount pointer. */ -	BUG_ON(!mnt); +	BUG_ON(!path->mnt);  	error = -ENFILE;  	f = get_empty_filp(); -	if (f == NULL) { -		dput(dentry); -		mntput(mnt); +	if (f == NULL)  		return ERR_PTR(error); -	}  	f->f_flags = flags; -	f->f_path.mnt = mnt; -	f->f_path.dentry = dentry; +	f->f_path = *path; +	path_get(&f->f_path);  	error = do_dentry_open(f, NULL, cred);  	if (!error) {  		error = open_check_o_direct(f);  |