full_path = build_path_from_dentry(direntry, cifs_sb);
full_path = build_path_from_dentry(direntry);
int cifs_setxattr(struct dentry * direntry, const char * ea_name,        const void * ea_value, size_t value_size, int flags){	int rc = -EOPNOTSUPP;#ifdef CONFIG_CIFS_XATTR	int xid;	struct cifs_sb_info *cifs_sb;	struct cifsTconInfo *pTcon;	struct super_block * sb;	char * full_path;	if(direntry == NULL)		return -EIO;	if(direntry->d_inode == NULL)		return -EIO;	sb = direntry->d_inode->i_sb;	if(sb == NULL)		return -EIO;	xid = GetXid();	cifs_sb = CIFS_SB(sb);	pTcon = cifs_sb->tcon;	down(&sb->s_vfs_rename_sem);	full_path = build_path_from_dentry(direntry, cifs_sb);	up(&sb->s_vfs_rename_sem);	if(full_path == NULL) {		FreeXid(xid);		return -ENOMEM;	}	/* return dos attributes as pseudo xattr */	/* return alt name if available as pseudo attr */	/* if proc/fs/cifs/streamstoxattr is set then		search server for EAs or streams to 		returns as xattrs */	if(value_size > MAX_EA_VALUE_SIZE) {		cFYI(1,("size of EA value too large"));		if(full_path)			kfree(full_path);		FreeXid(xid);		return -EOPNOTSUPP;	}	if(ea_name == NULL) {		cFYI(1,("Null xattr names not supported"));	} else if(strncmp(ea_name,CIFS_XATTR_USER_PREFIX,5) == 0) {		if(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_XATTR)			goto set_ea_exit;		if(strncmp(ea_name,CIFS_XATTR_DOS_ATTRIB,14) == 0) {			cFYI(1,("attempt to set cifs inode metadata"));		}		ea_name += 5; /* skip past user. prefix */		rc = CIFSSMBSetEA(xid,pTcon,full_path,ea_name,ea_value,			(__u16)value_size, cifs_sb->local_nls,			cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SPECIAL_CHR);	} else if(strncmp(ea_name, CIFS_XATTR_OS2_PREFIX,4) == 0) {		if(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_XATTR)			goto set_ea_exit;		ea_name += 4; /* skip past os2. prefix */		rc = CIFSSMBSetEA(xid,pTcon,full_path,ea_name,ea_value,			(__u16)value_size, cifs_sb->local_nls,			cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MAP_SPECIAL_CHR);	} else {		int temp; 		temp = strncmp(ea_name,POSIX_ACL_XATTR_ACCESS,			strlen(POSIX_ACL_XATTR_ACCESS));		if (temp == 0) {#ifdef CONFIG_CIFS_POSIX			if(sb->s_flags & MS_POSIXACL)				rc = CIFSSMBSetPosixACL(xid, pTcon,full_path,					ea_value, (const int)value_size, 					ACL_TYPE_ACCESS,cifs_sb->local_nls,					cifs_sb->mnt_cifs_flags & 						CIFS_MOUNT_MAP_SPECIAL_CHR);			cFYI(1,("set POSIX ACL rc %d",rc));#else			cFYI(1,("set POSIX ACL not supported"));#endif		} else if(strncmp(ea_name,POSIX_ACL_XATTR_DEFAULT,strlen(POSIX_ACL_XATTR_DEFAULT)) == 0) {#ifdef CONFIG_CIFS_POSIX			if(sb->s_flags & MS_POSIXACL)				rc = CIFSSMBSetPosixACL(xid, pTcon,full_path,					ea_value, (const int)value_size, 					ACL_TYPE_DEFAULT, cifs_sb->local_nls,					cifs_sb->mnt_cifs_flags & 						CIFS_MOUNT_MAP_SPECIAL_CHR);			cFYI(1,("set POSIX default ACL rc %d",rc));#else			cFYI(1,("set default POSIX ACL not supported"));#endif		} else {			cFYI(1,("illegal xattr request %s (only user namespace supported)",ea_name));		  /* BB what if no namespace prefix? */		  /* Should we just pass them to server, except for 		  system and perhaps security prefixes? */		}	}set_ea_exit:	if (full_path)		kfree(full_path);	FreeXid(xid);#endif	return rc;}