Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 93dec2da authored by Al Viro's avatar Al Viro
Browse files

... and switch shmem_file_setup() to alloc_file_pseudo()

parent dac2d1f6
Loading
Loading
Loading
Loading
+7 −30
Original line number Diff line number Diff line
@@ -3896,18 +3896,11 @@ EXPORT_SYMBOL_GPL(shmem_truncate_range);

/* common code */

static const struct dentry_operations anon_ops = {
	.d_dname = simple_dname
};

static struct file *__shmem_file_setup(struct vfsmount *mnt, const char *name, loff_t size,
				       unsigned long flags, unsigned int i_flags)
{
	struct file *res;
	struct inode *inode;
	struct path path;
	struct super_block *sb;
	struct qstr this;
	struct file *res;

	if (IS_ERR(mnt))
		return ERR_CAST(mnt);
@@ -3918,8 +3911,8 @@ static struct file *__shmem_file_setup(struct vfsmount *mnt, const char *name, l
	if (shmem_acct_size(flags, size))
		return ERR_PTR(-ENOMEM);

	sb = mnt->mnt_sb;
	inode = shmem_get_inode(sb, NULL, S_IFREG | S_IRWXUGO, 0, flags);
	inode = shmem_get_inode(mnt->mnt_sb, NULL, S_IFREG | S_IRWXUGO, 0,
				flags);
	if (unlikely(!inode)) {
		shmem_unacct_size(flags, size);
		return ERR_PTR(-ENOSPC);
@@ -3928,27 +3921,11 @@ static struct file *__shmem_file_setup(struct vfsmount *mnt, const char *name, l
	inode->i_size = size;
	clear_nlink(inode);	/* It is unlinked */
	res = ERR_PTR(ramfs_nommu_expand_for_mapping(inode, size));
	if (IS_ERR(res)) {
		iput(inode);
		return res;
	}

	this.name = name;
	this.len = strlen(name);
	this.hash = 0; /* will go */
	path.mnt = mntget(mnt);
	path.dentry = d_alloc_pseudo(sb, &this);
	if (!path.dentry) {
		iput(inode);
		return ERR_PTR(-ENOMEM);
	}
	d_set_d_op(path.dentry, &anon_ops);

	d_instantiate(path.dentry, inode);

	res = alloc_file(&path, O_RDWR, &shmem_file_operations);
	if (!IS_ERR(res))
		res = alloc_file_pseudo(inode, mnt, name, O_RDWR,
				&shmem_file_operations);
	if (IS_ERR(res))
		path_put(&path);
		iput(inode);
	return res;
}