On Wed, Jan 19, 2011 at 7:45 AM, J. Bruce Fields <bfields@xxxxxxxxxxxx> wrote: > Nick Piggin suggested fixing this by allowing d_obtain_alias to return > the unhashed dentry that is referenced by the filp, instead of making it > create a new dentry. > > Leave __d_find_alias() alone to avoid changing behavior of other > callers. > > Also nfsd doesn't need all the checks of __d_find_alias(); any dentry, > hashed or unhashed, disconnected or not, should work. > > Signed-off-by: J. Bruce Fields <bfields@xxxxxxxxxx> > --- > fs/dcache.c | 26 ++++++++++++++++++++++++-- > 1 files changed, 24 insertions(+), 2 deletions(-) > > diff --git a/fs/dcache.c b/fs/dcache.c > index 9f493ee..2849258 100644 > --- a/fs/dcache.c > +++ b/fs/dcache.c > @@ -1521,6 +1521,28 @@ struct dentry * d_alloc_root(struct inode * root_inode) > } > EXPORT_SYMBOL(d_alloc_root); > > +static struct dentry * __d_find_any_alias(struct inode *inode) > +{ > + struct dentry *alias; > + > + if (list_empty(&inode->i_dentry)) > + return NULL; > + alias = list_first_entry(&inode->i_dentry, struct dentry, d_alias); > + __dget(alias); > + return alias; > +} > + > +static struct dentry * d_find_any_alias(struct inode *inode) > +{ > + struct dentry *de; > + > + spin_lock(&inode->i_lock); Yes, i_dentry/d_alias is protected by i_lock, so it looks fine. -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html