touch_namespace(current->namespace); 
static int do_move_mount(struct nameidata *nd, char *old_name){	struct nameidata old_nd, parent_nd;	struct vfsmount *p;	int err = 0;	if (!capable(CAP_SYS_ADMIN))		return -EPERM;	if (!old_name || !*old_name)		return -EINVAL;	err = path_lookup(old_name, LOOKUP_FOLLOW, &old_nd);	if (err)		return err;	down_write(&current->namespace->sem);	while(d_mountpoint(nd->dentry) && follow_down(&nd->mnt, &nd->dentry))		;	err = -EINVAL;	if (!check_mnt(nd->mnt) || !check_mnt(old_nd.mnt))		goto out;	err = -ENOENT;	down(&nd->dentry->d_inode->i_sem);	if (IS_DEADDIR(nd->dentry->d_inode))		goto out1;	spin_lock(&vfsmount_lock);	if (!IS_ROOT(nd->dentry) && d_unhashed(nd->dentry))		goto out2;	err = -EINVAL;	if (old_nd.dentry != old_nd.mnt->mnt_root)		goto out2;	if (old_nd.mnt == old_nd.mnt->mnt_parent)		goto out2;	if (S_ISDIR(nd->dentry->d_inode->i_mode) !=	      S_ISDIR(old_nd.dentry->d_inode->i_mode))		goto out2;	err = -ELOOP;	for (p = nd->mnt; p->mnt_parent!=p; p = p->mnt_parent)		if (p == old_nd.mnt)			goto out2;	err = 0;	detach_mnt(old_nd.mnt, &parent_nd);	attach_mnt(old_nd.mnt, nd);	/* if the mount is moved, it should no longer be expire	 * automatically */	list_del_init(&old_nd.mnt->mnt_expire);out2:	spin_unlock(&vfsmount_lock);out1:	up(&nd->dentry->d_inode->i_sem);out:	up_write(&current->namespace->sem);	if (!err)		path_release(&parent_nd);	path_release(&old_nd);	return err;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/5addc5dd8836aa061f6efc4a0d9ba6323726297a/namespace.c/buggy/fs/namespace.c