new_dentry = lookup_hash(&newnd.last, new_dir); 
new_dentry = lookup_hash(&newnd); 
static inline int do_rename(const char * oldname, const char * newname){	int error = 0;	struct dentry * old_dir, * new_dir;	struct dentry * old_dentry, *new_dentry;	struct dentry * trap;	struct nameidata oldnd, newnd;	error = path_lookup(oldname, LOOKUP_PARENT, &oldnd);	if (error)		goto exit;	error = path_lookup(newname, LOOKUP_PARENT, &newnd);	if (error)		goto exit1;	error = -EXDEV;	if (oldnd.mnt != newnd.mnt)		goto exit2;	old_dir = oldnd.dentry;	error = -EBUSY;	if (oldnd.last_type != LAST_NORM)		goto exit2;	new_dir = newnd.dentry;	if (newnd.last_type != LAST_NORM)		goto exit2;	trap = lock_rename(new_dir, old_dir);	old_dentry = lookup_hash(&oldnd.last, old_dir);	error = PTR_ERR(old_dentry);	if (IS_ERR(old_dentry))		goto exit3;	/* source must exist */	error = -ENOENT;	if (!old_dentry->d_inode)		goto exit4;	/* unless the source is a directory trailing slashes give -ENOTDIR */	if (!S_ISDIR(old_dentry->d_inode->i_mode)) {		error = -ENOTDIR;		if (oldnd.last.name[oldnd.last.len])			goto exit4;		if (newnd.last.name[newnd.last.len])			goto exit4;	}	/* source should not be ancestor of target */	error = -EINVAL;	if (old_dentry == trap)		goto exit4;	new_dentry = lookup_hash(&newnd.last, new_dir);	error = PTR_ERR(new_dentry);	if (IS_ERR(new_dentry))		goto exit4;	/* target should not be an ancestor of source */	error = -ENOTEMPTY;	if (new_dentry == trap)		goto exit5;	error = vfs_rename(old_dir->d_inode, old_dentry,				   new_dir->d_inode, new_dentry);exit5:	dput(new_dentry);exit4:	dput(old_dentry);exit3:	unlock_rename(new_dir, old_dir);exit2:	path_release(&newnd);exit1:	path_release(&oldnd);exit:	return error;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/49705b7743fd8f5632a95ec4c6547d169d27ac1f/namei.c/buggy/fs/namei.c