build_path_from_dentry(struct dentry *direntry, const struct cifs_sb_info *cifs_sb) 
build_path_from_dentry(struct dentry *direntry) 
build_path_from_dentry(struct dentry *direntry, const struct cifs_sb_info *cifs_sb){	struct dentry *temp;	int namelen = 0;	char *full_path;	if(direntry == NULL)		return NULL;  /* not much we can do if dentry is freed and		we need to reopen the file after it was closed implicitly		when the server crashed */cifs_bp_rename_retry:	for (temp = direntry; !IS_ROOT(temp);) {		namelen += (1 + temp->d_name.len);		temp = temp->d_parent;		if(temp == NULL) {			cERROR(1,("corrupt dentry"));			return NULL;		}	}	full_path = kmalloc(namelen+1, GFP_KERNEL);	if(full_path == NULL)		return full_path;	full_path[namelen] = 0;	/* trailing null */	for (temp = direntry; !IS_ROOT(temp);) {		namelen -= 1 + temp->d_name.len;		if (namelen < 0) {			break;		} else {			full_path[namelen] = CIFS_DIR_SEP(cifs_sb);			strncpy(full_path + namelen + 1, temp->d_name.name,				temp->d_name.len);			cFYI(0, (" name: %s ", full_path + namelen));		}		temp = temp->d_parent;		if(temp == NULL) {			cERROR(1,("corrupt dentry"));			kfree(full_path);			return NULL;		}	}	if (namelen != 0) {		cERROR(1,		       ("We did not end path lookup where we expected namelen is %d",			namelen));		/* presumably this is only possible if we were racing with a rename 		of one of the parent directories  (we can not lock the dentries		above us to prevent this, but retrying should be harmless) */		kfree(full_path);		namelen = 0;		goto cifs_bp_rename_retry;	}	return full_path;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/7f57356b70dda014ef269135942426e4a852023e/dir.c/clean/fs/cifs/dir.c