while (follow_down(&fp_mnt, &fp_dentry) && d_mountpoint(fp_dentry)); 
if (!autofs4_follow_mount(&fp_mnt, &fp_dentry)) { dput(fp_dentry); mntput(fp_mnt); return -ENOENT; } 
static int autofs4_dir_open(struct inode *inode, struct file *file){	struct dentry *dentry = file->f_dentry;	struct vfsmount *mnt = file->f_vfsmnt;	struct autofs_sb_info *sbi = autofs4_sbi(dentry->d_sb);	int status;	DPRINTK("file=%p dentry=%p %.*s",		file, dentry, dentry->d_name.len, dentry->d_name.name);	if (autofs4_oz_mode(sbi))		goto out;	if (autofs4_ispending(dentry)) {		DPRINTK("dentry busy");		return -EBUSY;	}	if (!d_mountpoint(dentry) && dentry->d_op && dentry->d_op->d_revalidate) {		struct nameidata nd;		int empty;		/* In case there are stale directory dentrys from a failed mount */		spin_lock(&dcache_lock);		empty = list_empty(&dentry->d_subdirs);		spin_unlock(&dcache_lock);		if (!empty)			d_invalidate(dentry);		nd.flags = LOOKUP_DIRECTORY;		status = (dentry->d_op->d_revalidate)(dentry, &nd);		if (!status)			return -ENOENT;	}	if (d_mountpoint(dentry)) {		struct file *fp = NULL;		struct vfsmount *fp_mnt = mntget(mnt);		struct dentry *fp_dentry = dget(dentry);		while (follow_down(&fp_mnt, &fp_dentry) && d_mountpoint(fp_dentry));		fp = dentry_open(fp_dentry, fp_mnt, file->f_flags);		status = PTR_ERR(fp);		if (IS_ERR(fp)) {			file->private_data = NULL;			return status;		}		file->private_data = fp;	}out:	return 0;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/9b1e3afd6d56937ced3914971621d0f053ea9178/root.c/buggy/fs/autofs4/root.c