diff options
Diffstat (limited to 'fs/anon_inodes.c')
| -rw-r--r-- | fs/anon_inodes.c | 30 | 
1 files changed, 6 insertions, 24 deletions
| diff --git a/fs/anon_inodes.c b/fs/anon_inodes.c index 3168ee4e77f4..91262c34b797 100644 --- a/fs/anon_inodes.c +++ b/fs/anon_inodes.c @@ -71,8 +71,6 @@ struct file *anon_inode_getfile(const char *name,  				const struct file_operations *fops,  				void *priv, int flags)  { -	struct qstr this; -	struct path path;  	struct file *file;  	if (IS_ERR(anon_inode_inode)) @@ -82,39 +80,23 @@ struct file *anon_inode_getfile(const char *name,  		return ERR_PTR(-ENOENT);  	/* -	 * Link the inode to a directory entry by creating a unique name -	 * using the inode sequence number. -	 */ -	file = ERR_PTR(-ENOMEM); -	this.name = name; -	this.len = strlen(name); -	this.hash = 0; -	path.dentry = d_alloc_pseudo(anon_inode_mnt->mnt_sb, &this); -	if (!path.dentry) -		goto err_module; - -	path.mnt = mntget(anon_inode_mnt); -	/*  	 * We know the anon_inode inode count is always greater than zero,  	 * so ihold() is safe.  	 */  	ihold(anon_inode_inode); - -	d_instantiate(path.dentry, anon_inode_inode); - -	file = alloc_file(&path, OPEN_FMODE(flags), fops); +	file = alloc_file_pseudo(anon_inode_inode, anon_inode_mnt, name, +				 flags & (O_ACCMODE | O_NONBLOCK), fops);  	if (IS_ERR(file)) -		goto err_dput; +		goto err; +  	file->f_mapping = anon_inode_inode->i_mapping; -	file->f_flags = flags & (O_ACCMODE | O_NONBLOCK);  	file->private_data = priv;  	return file; -err_dput: -	path_put(&path); -err_module: +err: +	iput(anon_inode_inode);  	module_put(fops->owner);  	return file;  } |