full_path = build_path_from_dentry(direntry, cifs_sb); 
full_path = build_path_from_dentry(direntry); 
cifs_symlink(struct inode *inode, struct dentry *direntry, const char *symname){	int rc = -EOPNOTSUPP;	int xid;	struct cifs_sb_info *cifs_sb;	struct cifsTconInfo *pTcon;	char *full_path = NULL;	struct inode *newinode = NULL;	xid = GetXid();	cifs_sb = CIFS_SB(inode->i_sb);	pTcon = cifs_sb->tcon;	down(&inode->i_sb->s_vfs_rename_sem);	full_path = build_path_from_dentry(direntry, cifs_sb);	up(&inode->i_sb->s_vfs_rename_sem);	if(full_path == NULL) {		FreeXid(xid);		return -ENOMEM;	}	cFYI(1, ("Full path: %s ", full_path));	cFYI(1, ("symname is %s", symname));	/* BB what if DFS and this volume is on different share? BB */	if (cifs_sb->tcon->ses->capabilities & CAP_UNIX)		rc = CIFSUnixCreateSymLink(xid, pTcon, full_path, symname,					   cifs_sb->local_nls);	/* else	   rc = CIFSCreateReparseSymLink(xid, pTcon, fromName, toName,cifs_sb_target->local_nls); */	if (rc == 0) {		if (pTcon->ses->capabilities & CAP_UNIX)			rc = cifs_get_inode_info_unix(&newinode, full_path,						      inode->i_sb,xid);		else			rc = cifs_get_inode_info(&newinode, full_path, NULL,						 inode->i_sb,xid);		if (rc != 0) {			cFYI(1,			     ("Create symlink worked but get_inode_info failed with rc = %d ",			      rc));		} else {			if (pTcon->nocase)				direntry->d_op = &cifs_ci_dentry_ops;			else				direntry->d_op = &cifs_dentry_ops;			d_instantiate(direntry, newinode);		}	}	if (full_path)		kfree(full_path);	FreeXid(xid);	return rc;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/7f57356b70dda014ef269135942426e4a852023e/link.c/buggy/fs/cifs/link.c