On Fri, Dec 13, 2013 at 09:51:42AM +0900, Tsutomu Itoh wrote: > --- a/fs/btrfs/inode.c > +++ b/fs/btrfs/inode.c > @@ -4974,10 +4974,17 @@ static void btrfs_dentry_release(struct dentry *dentry) > static struct dentry *btrfs_lookup(struct inode *dir, struct dentry *dentry, > unsigned int flags) > { > - struct dentry *ret; > + struct inode *inode; > > - ret = d_splice_alias(btrfs_lookup_dentry(dir, dentry), dentry); > - return ret; > + inode = btrfs_lookup_dentry(dir, dentry); > + if (IS_ERR(inode)) { > + if (PTR_ERR(inode) == -ENOENT) > + inode = NULL; > + else > + return ERR_CAST(inode); > + } > + > + return d_splice_alias(inode, dentry); btrfs_lookup used to be a simple d_splice_alias(btrfs_lookup_dentry ...) and the expanded back and forth with the DCACHE_NEED_LOOKUP flag. a66e7cc626f42de6c745963fe0d807518fa49d39 added 39e3c9553f34381a1b664c27b0c696a266a5735e removed d_splice_alias has been made robust in a9049376ee05bf966bfe2b081b5071326856890a "make d_splice_alias(ERR_PTR(err), dentry) = ERR_PTR(err)" you can drop the error handling from btrfs_lookup completely. The rest looks ok. -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html