fuse: readdirplus: fix instantiate

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

Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
CC: stable@vger.kernel.org
This commit is contained in:
Miklos Szeredi 2013-07-17 14:53:53 +02:00
parent a28ef45cbb
commit 2914941e31

View File

@ -1272,10 +1272,19 @@ static int fuse_direntplus_link(struct file *file,
if (!inode) if (!inode)
goto out; goto out;
alias = d_materialise_unique(dentry, inode); if (S_ISDIR(inode->i_mode)) {
err = PTR_ERR(alias); mutex_lock(&fc->inst_mutex);
if (IS_ERR(alias)) alias = fuse_d_add_directory(dentry, inode);
goto out; mutex_unlock(&fc->inst_mutex);
err = PTR_ERR(alias);
if (IS_ERR(alias)) {
iput(inode);
goto out;
}
} else {
alias = d_splice_alias(inode, dentry);
}
if (alias) { if (alias) {
dput(dentry); dput(dentry);
dentry = alias; dentry = alias;