while(d_mountpoint(nd->dentry) && follow_down(&nd->mnt, &nd->dentry)) 
while (d_mountpoint(nd->dentry) && follow_down(&nd->mnt, &nd->dentry)) 
int do_add_mount(struct vfsmount *newmnt, struct nameidata *nd,		 int mnt_flags, struct list_head *fslist){	int err;	down_write(&current->namespace->sem);	/* Something was mounted here while we slept */	while(d_mountpoint(nd->dentry) && follow_down(&nd->mnt, &nd->dentry))		;	err = -EINVAL;	if (!check_mnt(nd->mnt))		goto unlock;	/* Refuse the same filesystem on the same mount point */	err = -EBUSY;	if (nd->mnt->mnt_sb == newmnt->mnt_sb &&	    nd->mnt->mnt_root == nd->dentry)		goto unlock;	err = -EINVAL;	if (S_ISLNK(newmnt->mnt_root->d_inode->i_mode))		goto unlock;	newmnt->mnt_flags = mnt_flags;	newmnt->mnt_namespace = current->namespace;	err = graft_tree(newmnt, nd);	if (err == 0 && fslist) {		/* add to the specified expiration list */		spin_lock(&vfsmount_lock);		list_add_tail(&newmnt->mnt_expire, fslist);		spin_unlock(&vfsmount_lock);	}unlock:	up_write(&current->namespace->sem);	mntput(newmnt);	return err;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/b58fed8b1959d6b9e4c951a54adc8960e1401b18/namespace.c/buggy/fs/namespace.c