Skip to content

Commit

Permalink
fuse: readdirplus: fix instantiate
Browse files Browse the repository at this point in the history
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
  • Loading branch information
Miklos Szeredi committed Jul 17, 2013
1 parent a28ef45 commit 2914941
Showing 1 changed file with 13 additions and 4 deletions.
17 changes: 13 additions & 4 deletions fs/fuse/dir.c
Original file line number Diff line number Diff line change
Expand Up @@ -1272,10 +1272,19 @@ static int fuse_direntplus_link(struct file *file,
if (!inode)
goto out;

alias = d_materialise_unique(dentry, inode);
err = PTR_ERR(alias);
if (IS_ERR(alias))
goto out;
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)) {
iput(inode);
goto out;
}
} else {
alias = d_splice_alias(inode, dentry);
}

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

0 comments on commit 2914941

Please sign in to comment.