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

Commit 2914941e authored by Miklos Szeredi's avatar Miklos Szeredi
Browse files

fuse: readdirplus: fix instantiate



Fuse does instantiation slightly differently from NFS/CIFS which use
d_materialise_unique().

Signed-off-by: default avatarMiklos Szeredi <mszeredi@suse.cz>
CC: stable@vger.kernel.org
parent a28ef45c
Loading
Loading
Loading
Loading
+13 −4
Original line number Diff line number Diff line
@@ -1272,10 +1272,19 @@ static int fuse_direntplus_link(struct file *file,
	if (!inode)
		goto out;

	alias = d_materialise_unique(dentry, inode);
	if (S_ISDIR(inode->i_mode)) {
		mutex_lock(&fc->inst_mutex);
		alias = fuse_d_add_directory(dentry, inode);
		mutex_unlock(&fc->inst_mutex);
		err = PTR_ERR(alias);
	if (IS_ERR(alias))
		if (IS_ERR(alias)) {
			iput(inode);
			goto out;
		}
	} else {
		alias = d_splice_alias(inode, dentry);
	}

	if (alias) {
		dput(dentry);
		dentry = alias;