fromName = build_path_from_dentry(old_file, cifs_sb_target); toName = build_path_from_dentry(direntry, cifs_sb_target); 
fromName = build_path_from_dentry(old_file); toName = build_path_from_dentry(direntry); 
cifs_hardlink(struct dentry *old_file, struct inode *inode,	      struct dentry *direntry){	int rc = -EACCES;	int xid;	char *fromName = NULL;	char *toName = NULL;	struct cifs_sb_info *cifs_sb_target;	struct cifsTconInfo *pTcon;	struct cifsInodeInfo *cifsInode;	xid = GetXid();	cifs_sb_target = CIFS_SB(inode->i_sb);	pTcon = cifs_sb_target->tcon;/* No need to check for cross device links since server will do that   BB note DFS case in future though (when we may have to check) */	down(&inode->i_sb->s_vfs_rename_sem);	fromName = build_path_from_dentry(old_file, cifs_sb_target);	toName = build_path_from_dentry(direntry, cifs_sb_target);	up(&inode->i_sb->s_vfs_rename_sem);	if((fromName == NULL) || (toName == NULL)) {		rc = -ENOMEM;		goto cifs_hl_exit;	}	if (cifs_sb_target->tcon->ses->capabilities & CAP_UNIX)		rc = CIFSUnixCreateHardLink(xid, pTcon, fromName, toName,					    cifs_sb_target->local_nls, 					    cifs_sb_target->mnt_cifs_flags &						CIFS_MOUNT_MAP_SPECIAL_CHR);	else {		rc = CIFSCreateHardLink(xid, pTcon, fromName, toName,					cifs_sb_target->local_nls, 					cifs_sb_target->mnt_cifs_flags &						CIFS_MOUNT_MAP_SPECIAL_CHR);		if(rc == -EIO)			rc = -EOPNOTSUPP;  	}/* if (!rc)     */	{		/*   renew_parental_timestamps(old_file);		   inode->i_nlink++;		   mark_inode_dirty(inode);		   d_instantiate(direntry, inode); */		/* BB add call to either mark inode dirty or refresh its data and timestamp to current time */	}	d_drop(direntry);	/* force new lookup from server */	cifsInode = CIFS_I(old_file->d_inode);	cifsInode->time = 0;	/* will force revalidate to go get info when needed */cifs_hl_exit:	if (fromName)		kfree(fromName);	if (toName)		kfree(toName);	FreeXid(xid);	return rc;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/7f57356b70dda014ef269135942426e4a852023e/link.c/buggy/fs/cifs/link.c