diff --git a/fs/configfs/dir.c b/fs/configfs/dir.c index eda80c2a2d38..d8e74abe3485 100644 --- a/fs/configfs/dir.c +++ b/fs/configfs/dir.c @@ -65,8 +65,24 @@ static void configfs_d_iput(struct dentry * dentry, iput(inode); } +static int configfs_d_revalidate(struct inode *dir, const struct qstr *name, + struct dentry *dentry, unsigned int flags) +{ + struct inode *inode = d_inode(dentry); + struct configfs_dirent * parent_sd = dentry->d_fsdata; + + if (!inode) + return -ECHILD; + + if (!configfs_dirent_is_ready(parent_sd)) + return -ECHILD; + + return 1; +} + const struct dentry_operations configfs_dentry_ops = { .d_iput = configfs_d_iput, + .d_revalidate = configfs_d_revalidate, }; #ifdef CONFIG_LOCKDEP