/* Returns 0 if the revalidation was successful. If the revalidation fails, either return the error returned by d_revalidate or -ESTALE if the revalidation it just returned 0. If d_revalidate returns 0, we attempt to invalidate the dentry. It's up to the caller to handle putting references to the path if necessary.  */
static int force_reval_path(struct path *path, struct nameidata *nd)
/* Returns 0 if the revalidation was successful. If the revalidation fails, either return the error returned by d_revalidate or -ESTALE if the revalidation it just returned 0. If d_revalidate returns 0, we attempt to invalidate the dentry. It's up to the caller to handle putting references to the path if necessary.  */
static int force_reval_path(struct path *path, struct nameidata *nd)
{
	int status;
	struct dentry *dentry = path->dentry;
	if (!(dentry->d_sb->s_type->fs_flags & FS_REVAL_DOT))
		return 0;
	status = dentry->d_op->d_revalidate(dentry, nd);
	if (status > 0)
		return 0;
	if (!status) {
		d_invalidate(dentry);
		status = -ESTALE;
	}
	return status;
}