dentry = lookup_hash(&nd.last, nd.dentry); 
dentry = lookup_hash(&nd); 
asmlinkage long sys_unlink(const char __user * pathname){	int error = 0;	char * name;	struct dentry *dentry;	struct nameidata nd;	struct inode *inode = NULL;	name = getname(pathname);	if(IS_ERR(name))		return PTR_ERR(name);	error = path_lookup(name, LOOKUP_PARENT, &nd);	if (error)		goto exit;	error = -EISDIR;	if (nd.last_type != LAST_NORM)		goto exit1;	down(&nd.dentry->d_inode->i_sem);	dentry = lookup_hash(&nd.last, nd.dentry);	error = PTR_ERR(dentry);	if (!IS_ERR(dentry)) {		/* Why not before? Because we want correct error value */		if (nd.last.name[nd.last.len])			goto slashes;		inode = dentry->d_inode;		if (inode)			atomic_inc(&inode->i_count);		error = vfs_unlink(nd.dentry->d_inode, dentry);	exit2:		dput(dentry);	}	up(&nd.dentry->d_inode->i_sem);	if (inode)		iput(inode);	/* truncate the inode here */exit1:	path_release(&nd);exit:	putname(name);	return error;slashes:	error = !dentry->d_inode ? -ENOENT :		S_ISDIR(dentry->d_inode->i_mode) ? -EISDIR : -ENOTDIR;	goto exit2;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/49705b7743fd8f5632a95ec4c6547d169d27ac1f/namei.c/buggy/fs/namei.c