您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ FSAL_IS_ERROR函数代码示例

51自学网 2021-06-01 20:43:21
  C++
这篇教程C++ FSAL_IS_ERROR函数代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中FSAL_IS_ERROR函数的典型用法代码示例。如果您正苦于以下问题:C++ FSAL_IS_ERROR函数的具体用法?C++ FSAL_IS_ERROR怎么用?C++ FSAL_IS_ERROR使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。

在下文中一共展示了FSAL_IS_ERROR函数的29个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: makedir

static fsal_status_t makedir(struct fsal_obj_handle *dir_hdl,			     const char *name, struct attrlist *attrib,			     struct fsal_obj_handle **handle){	fsal_errors_t fsal_error = ERR_FSAL_NO_ERROR;	int retval = 0;	struct pt_fsal_obj_handle *hdl;	fsal_status_t status;	ptfsal_handle_t *fh = alloca(sizeof(ptfsal_handle_t));	*handle = NULL;		/* poison it */	if (!dir_hdl->ops->handle_is(dir_hdl, DIRECTORY)) {		LogCrit(COMPONENT_FSAL,			"Parent handle is not a directory. hdl = 0x%p",			dir_hdl);		return fsalstat(ERR_FSAL_NOTDIR, 0);	}	memset(fh, 0, sizeof(ptfsal_handle_t));	fh->data.handle.handle_size = FSI_CCL_PERSISTENT_HANDLE_N_BYTES;	attrib->mask =	    op_ctx->fsal_export->ops->fs_supported_attrs(op_ctx->fsal_export);	status = PTFSAL_mkdir(dir_hdl, name, op_ctx, attrib->mode, fh, attrib);	if (FSAL_IS_ERROR(status))		return status;	/* allocate an obj_handle and fill it up */	hdl = alloc_handle(fh, attrib, NULL, NULL, NULL, op_ctx->fsal_export);	if (hdl == NULL) {		retval = ENOMEM;		goto fileerr;	}	*handle = &hdl->obj_handle;	return fsalstat(ERR_FSAL_NO_ERROR, 0); fileerr:	fsal_error = posix2fsal_error(retval);	return fsalstat(fsal_error, retval);}
开发者ID:JasonZen,项目名称:nfs-ganesha,代码行数:39,


示例2: MFSL_setattrs_check_perms

/** * * MFSL_setattrs_check_perms : Checks authorization to perform an asynchronous setattr. * * Checks authorization to perform an asynchronous setattr. * * @param filehandle        [IN]    mfsl object to be operated on. * @param pspecdata         [INOUT] mfsl object associated specific data * @param p_context         [IN]    associated fsal context * @param p_mfsl_context    [INOUT] associated mfsl context * @param attrib_set        [IN]    attributes to be set  * * @return always FSAL_NO_ERROR (not yet implemented  */fsal_status_t MFSL_setattrs_check_perms(mfsl_object_t * filehandle,     /* IN */                                        mfsl_object_specific_data_t * pspecdata,        /* IN */                                        fsal_op_context_t * p_context,  /* IN */                                        mfsl_context_t * p_mfsl_context,        /* IN */                                        fsal_attrib_list_t * attrib_set /* IN */ ){  fsal_status_t fsal_status;  /* Root is the only one that can chown or chgrp */  if(attrib_set->asked_attributes & (FSAL_ATTR_OWNER | FSAL_ATTR_GROUP))    {      if(p_context->user_credential.user != 0)        MFSL_return(ERR_FSAL_ACCESS, 0);    }  fsal_status = FSAL_setattr_access(p_context, attrib_set, &pspecdata->async_attr);  if(FSAL_IS_ERROR(fsal_status))    return fsal_status;  MFSL_return(ERR_FSAL_NO_ERROR, 0);}                               /* MFSL_setattr_check_perms */
开发者ID:jordan-dlh,项目名称:nfs-ganesha,代码行数:36,


示例3: CEPHFSAL_getattrs

/** * FSAL_getattrs: * Get attributes for the object specified by its filehandle. * * /param filehandle (input): *        The handle of the object to get parameters. * /param context (input): *        Authentication context for the operation (user, export...). * /param object_attributes (mandatory input/output): *        The retrieved attributes for the object. *        As input, it defines the attributes that the caller *        wants to retrieve (by positioning flags into this structure) *        and the output is built considering this input *        (it fills the structure according to the flags it contains). * * /return Major error codes : *        - ERR_FSAL_NO_ERROR     (no error) *        - ERR_FSAL_STALE        (object_handle does not address an existing object) *        - ERR_FSAL_FAULT        (a NULL pointer was passed as mandatory argument)  *        - Another error code if an error occured. */fsal_status_t CEPHFSAL_getattrs(fsal_handle_t * exthandle,                                fsal_op_context_t * extcontext,                                fsal_attrib_list_t * object_attributes){  int rc;  struct stat st;  fsal_status_t status;  cephfsal_handle_t* filehandle = (cephfsal_handle_t*) exthandle;  cephfsal_op_context_t* context = (cephfsal_op_context_t*) extcontext;  int uid = FSAL_OP_CONTEXT_TO_UID(context);  int gid = FSAL_OP_CONTEXT_TO_GID(context);  /* sanity checks.   * note : object_attributes is mandatory in FSAL_getattrs.   */  if(!filehandle || !context || !object_attributes)    Return(ERR_FSAL_FAULT, 0, INDEX_FSAL_getattrs);  TakeTokenFSCall();  rc = ceph_ll_getattr(context->export_context->cmount, VINODE(filehandle),                       &st, uid, gid);  ReleaseTokenFSCall();  if (rc < 0)    Return(posix2fsal_error(rc), 0, INDEX_FSAL_getattrs);  /* convert attributes */  status = posix2fsal_attributes(&st, object_attributes);  if(FSAL_IS_ERROR(status))    {      FSAL_CLEAR_MASK(object_attributes->asked_attributes);      FSAL_SET_MASK(object_attributes->asked_attributes, FSAL_ATTR_RDATTR_ERR);      Return(ERR_FSAL_NO_ERROR, 0, INDEX_FSAL_getattrs);    }  Return(ERR_FSAL_NO_ERROR, 0, INDEX_FSAL_getattrs);}
开发者ID:MeghanaM,项目名称:nfs-ganesha,代码行数:60,


示例4: FUSEFSAL_open_by_name

fsal_status_t FUSEFSAL_open_by_name(fsal_handle_t * dirhandle,      /* IN */                                    fsal_name_t * filename,     /* IN */                                    fsal_op_context_t * p_context,  /* IN */                                    fsal_openflags_t openflags, /* IN */                                    fsal_file_t * file_descriptor,  /* OUT */                                    fsal_attrib_list_t *                                    file_attributes /* [ IN/OUT ] */ ){  fsal_status_t fsal_status;  fsal_handle_t filehandle;  if(!dirhandle || !filename || !p_context || !file_descriptor)    Return(ERR_FSAL_FAULT, 0, INDEX_FSAL_open_by_name);  fsal_status =      FUSEFSAL_lookup(dirhandle, filename, p_context, &filehandle, file_attributes);  if(FSAL_IS_ERROR(fsal_status))    return fsal_status;  return FUSEFSAL_open(&filehandle, p_context, openflags, file_descriptor,                       file_attributes);}
开发者ID:ShyamsundarR,项目名称:nfs-ganesha,代码行数:22,


示例5: VFSFSAL_Init

/** * FSAL_Init : Initializes the FileSystem Abstraction Layer. * * /param init_info (input, fsal_parameter_t *) : *        Pointer to a structure that contains *        all initialization parameters for the FSAL. *        Specifically, it contains settings about *        the filesystem on which the FSAL is based, *        security settings, logging policy and outputs, *        and other general FSAL options. * * /return Major error codes : *         ERR_FSAL_NO_ERROR     (initialisation OK) *         ERR_FSAL_FAULT        (init_info pointer is null) *         ERR_FSAL_SERVERFAULT  (misc FSAL error) *         ERR_FSAL_ALREADY_INIT (The FS is already initialized) *         ERR_FSAL_BAD_INIT     (FS specific init error, *                                minor error code gives the reason *                                for this error.) *         ERR_FSAL_SEC_INIT     (Security context init error). */fsal_status_t VFSFSAL_Init(fsal_parameter_t * init_info /* IN */    ){  fsal_status_t status;  /* sanity check.  */  if(!init_info)    Return(ERR_FSAL_FAULT, 0, INDEX_FSAL_Init);  /* proceeds FSAL internal initialization */  status = fsal_internal_init_global(&(init_info->fsal_info),                                     &(init_info->fs_common_info),                                     & (init_info->fs_specific_info));  if(FSAL_IS_ERROR(status))    Return(status.major, status.minor, INDEX_FSAL_Init);  /* Regular exit */  Return(ERR_FSAL_NO_ERROR, 0, INDEX_FSAL_Init);}
开发者ID:chandra2,项目名称:nfs-ganesha,代码行数:43,


示例6: VFSFSAL_getattrs

/** * VFSFSAL_getattrs: * Get attributes for the object specified by its filehandle. * * /param filehandle (input): *        The handle of the object to get parameters. * /param cred (input): *        Authentication context for the operation (user,...). * /param object_attributes (mandatory input/output): *        The retrieved attributes for the object. *        As input, it defines the attributes that the caller *        wants to retrieve (by positioning flags into this structure) *        and the output is built considering this input *        (it fills the structure according to the flags it contains). * * /return Major error codes : *        - ERR_FSAL_NO_ERROR     (no error) *        - Another error code if an error occured. */fsal_status_t VFSFSAL_getattrs(fsal_handle_t * p_filehandle,       /* IN */                            fsal_op_context_t * p_context,      /* IN */                            fsal_attrib_list_t * p_object_attributes    /* IN/OUT */    ){  fsal_status_t st;  int rc = 0 ;  int errsv;  struct stat buffstat;  /* sanity checks.   * note : object_attributes is mandatory in VFSFSAL_getattrs.   */  if(!p_filehandle || !p_context || !p_object_attributes)    Return(ERR_FSAL_FAULT, 0, INDEX_FSAL_getattrs);  TakeTokenFSCall();  rc = vfs_stat_by_handle( ((vfsfsal_op_context_t *)p_context)->export_context->mount_root_fd,                           &((vfsfsal_handle_t *)p_filehandle)->data.vfs_handle,                           &buffstat ) ;  errsv = errno;  ReleaseTokenFSCall();  if( rc == -1 )    Return(posix2fsal_error(errsv), errsv, INDEX_FSAL_getattrs);  /* convert attributes */  st = posix2fsal_attributes(&buffstat, p_object_attributes);  if(FSAL_IS_ERROR(st))    {      FSAL_CLEAR_MASK(p_object_attributes->asked_attributes);      FSAL_SET_MASK(p_object_attributes->asked_attributes, FSAL_ATTR_RDATTR_ERR);      ReturnStatus(st, INDEX_FSAL_getattrs);    }  Return(ERR_FSAL_NO_ERROR, 0, INDEX_FSAL_getattrs);}
开发者ID:ShyamsundarR,项目名称:nfs-ganesha,代码行数:57,


示例7: FSAL_GetXAttrAttrs

/** * Get the attributes of an extended attribute from its index. * * /param p_objecthandle Handle of the object you want to get attribute for. * /param p_context pointer to the current security context. * /param xattr_cookie xattr's cookie (as returned by listxattrs). * /param p_attrs xattr's attributes. */fsal_status_t FSAL_GetXAttrAttrs(fsal_handle_t * p_objecthandle,        /* IN */                                 fsal_op_context_t * p_context, /* IN */                                 unsigned int xattr_id, /* IN */                                 fsal_attrib_list_t * p_attrs                                          /**< IN/OUT xattr attributes (if supported) */    ){  int rc;  char buff[MAXNAMLEN];  fsal_status_t st;  fsal_attrib_list_t file_attrs;  /* sanity checks */  if(!p_objecthandle || !p_context || !p_attrs)    Return(ERR_FSAL_FAULT, 0, INDEX_FSAL_GetXAttrAttrs);  /* object attributes we want to retrieve from parent */  file_attrs.asked_attributes = FSAL_ATTR_MODE | FSAL_ATTR_FILEID | FSAL_ATTR_OWNER      | FSAL_ATTR_GROUP | FSAL_ATTR_ATIME | FSAL_ATTR_MTIME      | FSAL_ATTR_CTIME | FSAL_ATTR_CREATION | FSAL_ATTR_CHGTIME | FSAL_ATTR_FSID;  /* don't retrieve attributes not asked */  file_attrs.asked_attributes &= p_attrs->asked_attributes;  st = FSAL_getattrs(p_objecthandle, p_context, &file_attrs);  if(FSAL_IS_ERROR(st))    Return(st.major, st.minor, INDEX_FSAL_GetXAttrAttrs);  if((rc = file_attributes_to_xattr_attrs(&file_attrs, p_attrs, xattr_id)))    {      Return(ERR_FSAL_INVAL, rc, INDEX_FSAL_GetXAttrAttrs);    }  Return(ERR_FSAL_NO_ERROR, 0, INDEX_FSAL_GetXAttrAttrs);}                               /* FSAL_GetXAttrAttrs */
开发者ID:alangenfeld,项目名称:cloud-nfs,代码行数:46,


示例8: LUSTREFSAL_dynamic_fsinfo

/** * FSAL_dynamic_fsinfo: * Return dynamic filesystem info such as * used size, free size, number of objects... * * /param filehandle (input): *        Handle of an object in the filesystem *        whom info is to be retrieved. * /param cred (input): *        Authentication context for the operation (user,...). * /param dynamicinfo (output): *        Pointer to the static info of the filesystem. * * /return Major error codes: *      - ERR_FSAL_NO_ERROR: no error. *      - ERR_FSAL_FAULT: NULL pointer passed as input parameter. *      - ERR_FSAL_SERVERFAULT: Unexpected error. */fsal_status_t LUSTREFSAL_dynamic_fsinfo(fsal_handle_t * p_filehandle,     /* IN */                                        fsal_op_context_t * p_context,    /* IN */                                        fsal_dynamicfsinfo_t * p_dynamicinfo    /* OUT */    ){  fsal_path_t pathfsal;  fsal_status_t status;  struct statvfs buffstatvfs;  int rc, errsv;  /* sanity checks. */  if(!p_filehandle || !p_dynamicinfo || !p_context)    Return(ERR_FSAL_FAULT, 0, INDEX_FSAL_dynamic_fsinfo);  status = fsal_internal_Handle2FidPath(p_context, p_filehandle, &pathfsal);  if(FSAL_IS_ERROR(status))    Return(status.major, status.minor, INDEX_FSAL_dynamic_fsinfo);  TakeTokenFSCall();  rc = statvfs(pathfsal.path, &buffstatvfs);  errsv = errno;  ReleaseTokenFSCall();  if(rc)    Return(posix2fsal_error(errsv), errsv, INDEX_FSAL_dynamic_fsinfo);  p_dynamicinfo->total_bytes = buffstatvfs.f_frsize * buffstatvfs.f_blocks;  p_dynamicinfo->free_bytes = buffstatvfs.f_frsize * buffstatvfs.f_bfree;  p_dynamicinfo->avail_bytes = buffstatvfs.f_frsize * buffstatvfs.f_bavail;  p_dynamicinfo->total_files = buffstatvfs.f_files;  p_dynamicinfo->free_files = buffstatvfs.f_ffree;  p_dynamicinfo->avail_files = buffstatvfs.f_favail;  p_dynamicinfo->time_delta.seconds = 1;  p_dynamicinfo->time_delta.nseconds = 0;  Return(ERR_FSAL_NO_ERROR, 0, INDEX_FSAL_dynamic_fsinfo);}
开发者ID:MeghanaM,项目名称:nfs-ganesha,代码行数:56,


示例9: nfs2_FSALToFhandle

/** * *  nfs2_FSALToFhandle: converts a FSAL file handle to a nfs2 file handle. * * Converts a nfs2 file handle to a FSAL file handle. * * @param pfh2 [OUT] pointer to the extracted file handle  * @param pfsalhandle [IN] pointer to the FSAL handle to be converted * @param pfsalhandle [IN] pointer to the FSAL handle to be converted * * @return 1 if successful, 0 otherwise * */int nfs2_FSALToFhandle(fhandle2 * pfh2, fsal_handle_t * pfsalhandle,                       exportlist_t * pexport){  fsal_status_t fsal_status;  file_handle_v2_t file_handle;  print_buff(COMPONENT_FILEHANDLE, (char *)pfsalhandle, sizeof(fsal_handle_t));  /* zero-ification of the buffer to be used as handle */  memset(pfh2, 0, NFS2_FHSIZE);  memset((caddr_t) &file_handle, 0, sizeof(file_handle_v2_t));  /* Fill in the fs opaque part */  fsal_status =      FSAL_DigestHandle(&pexport->FS_export_context, FSAL_DIGEST_NFSV2, pfsalhandle,                        (caddr_t) & file_handle.fsopaque);  if(FSAL_IS_ERROR(fsal_status))   {     if( fsal_status.major == ERR_FSAL_TOOSMALL )      LogCrit( COMPONENT_FILEHANDLE, "NFSv2 file handle is too small to manage this fsal" ) ;     else      LogCrit( COMPONENT_FILEHANDLE, "FSAL_DigestHandle return (%u,%u) when called from %s",                fsal_status.major, fsal_status.minor, __func__ ) ;    return 0;   }  /* keep track of the export id */  file_handle.exportid = pexport->id;  /* Set the last byte */  file_handle.xattr_pos = 0;  /* Set the data */  memcpy((caddr_t) pfh2, &file_handle, sizeof(file_handle_v2_t));  print_fhandle2(COMPONENT_FILEHANDLE, pfh2);  return 1;}                               /* nfs2_FSALToFhandle */
开发者ID:MeghanaM,项目名称:nfs-ganesha,代码行数:51,


示例10: SNMPFSAL_opendir

/** * FSAL_opendir : *     Opens a directory for reading its content. *      * /param dir_handle (input) *         the handle of the directory to be opened. * /param p_context (input) *         Permission context for the operation (user, export context...). * /param dir_descriptor (output) *         pointer to an allocated structure that will receive *         directory stream informations, on successfull completion. * /param dir_attributes (optional output) *         On successfull completion,the structure pointed *         by dir_attributes receives the new directory attributes. *         Can be NULL. *  * /return Major error codes : *        - ERR_FSAL_NO_ERROR     (no error) *        - ERR_FSAL_ACCESS       (user does not have read permission on directory) *        - ERR_FSAL_STALE        (dir_handle does not address an existing object) *        - ERR_FSAL_FAULT        (a NULL pointer was passed as mandatory argument) *        - Other error codes can be returned : *          ERR_FSAL_IO, ... */fsal_status_t SNMPFSAL_opendir(fsal_handle_t * dir_handle,  /* IN */                               fsal_op_context_t * p_context,       /* IN */                               fsal_dir_t * dir_descriptor, /* OUT */                               fsal_attrib_list_t * dir_attributes      /* [ IN/OUT ] */    ){  fsal_status_t st;  /* sanity checks   * note : dir_attributes is optionnal.   */  if(!dir_handle || !p_context || !dir_descriptor)    Return(ERR_FSAL_FAULT, 0, INDEX_FSAL_opendir);  /* check it is a node... */  if(((snmpfsal_handle_t *)dir_handle)->data.object_type_reminder == FSAL_NODETYPE_LEAF)    Return(ERR_FSAL_NOTDIR, 0, INDEX_FSAL_opendir);  /* save request info to the dir_dircriptor */  memcpy(&((snmpfsal_dir_t *)dir_descriptor)->node_handle,	 (snmpfsal_handle_t *)dir_handle, sizeof(snmpfsal_handle_t));  ((snmpfsal_dir_t *)dir_descriptor)->p_context = (snmpfsal_op_context_t *)p_context;  if(dir_attributes && dir_attributes->asked_attributes)    {      st = SNMPFSAL_getattrs(dir_handle, p_context, dir_attributes);      if(FSAL_IS_ERROR(st))        {          FSAL_CLEAR_MASK(dir_attributes->asked_attributes);          FSAL_SET_MASK(dir_attributes->asked_attributes, FSAL_ATTR_RDATTR_ERR);        }    }  Return(ERR_FSAL_NO_ERROR, 0, INDEX_FSAL_opendir);}
开发者ID:eitanb,项目名称:nfs-ganesha,代码行数:61,


示例11: FSAL_get_cookieverf

fsal_status_t FSAL_get_cookieverf(fsal_handle_t * handle,                                  fsal_op_context_t * p_context,                                  uint64_t * verf){  fsal_status_t  rc;  msectimer_t    timer_start, timer_end;  timer_start = timer_get();  if (fsal_functions.fsal_get_cookieverf)    {      rc = fsal_functions.fsal_get_cookieverf(handle,                                                verf);    }  else    {      fsal_attrib_list_t attributes;      memset(&attributes, 0, sizeof(fsal_attrib_list_t));      attributes.asked_attributes = FSAL_ATTR_MTIME;      rc = FSAL_getattrs(handle,                         p_context,                         &attributes);      if (!FSAL_IS_ERROR(rc))        {          memcpy(verf, &attributes.mtime, sizeof(uint64_t));          ReturnCode(ERR_FSAL_NO_ERROR, 0);        }    }  timer_end = timer_get();  p_context->latency += timer_end - timer_start;  p_context->count++;  return rc;}
开发者ID:fmarsch,项目名称:nfs-ganesha-1,代码行数:37,


示例12: make_pseudofs_node

bool make_pseudofs_node(char *name, struct pseudofs_state *state){	struct fsal_obj_handle *new_node = NULL;	fsal_status_t fsal_status;	bool retried = false;	struct attrlist sattr;retry:	/* First, try to lookup the entry */	fsal_status = fsal_lookup(state->obj, name, &new_node, NULL);	if (!FSAL_IS_ERROR(fsal_status)) {		/* Make sure new node is a directory */		if (new_node->type != DIRECTORY) {			LogCrit(COMPONENT_EXPORT,				"BUILDING PSEUDOFS: Export_Id %d Path %s Pseudo Path %s LOOKUP %s is not a directory",				state->export->export_id,				state->export->fullpath,				state->export->pseudopath,				name);			/* Release the reference on the new node */			new_node->obj_ops.put_ref(new_node);			return false;		}		LogDebug(COMPONENT_EXPORT,			 "BUILDING PSEUDOFS: Parent %p entry %p %s FSAL %s already exists",			 state->obj, new_node, name,			 new_node->fsal->name);		state->obj->obj_ops.put_ref(state->obj);		/* Make new node the current node */		state->obj = new_node;		return true;	}
开发者ID:srimalik,项目名称:nfs-ganesha,代码行数:36,


示例13: GPFSFSAL_open

/** @fn fsal_status_t *       GPFSFSAL_open(struct fsal_obj_handle *obj_hdl, *                     const struct req_op_context *op_ctx, *                     fsal_openflags_t openflags, int *file_desc, *                     struct attrlist *fsal_attr) * *  @brief Open a regular file for reading/writing its data content. * * @param obj_hdl Handle of the file to be read/modified. * @param op_ctx Authentication context for the operation (user,...). * @param openflags Flags that indicates behavior for file opening and access. *        This is an inclusive OR of the following values *        ( such of them are not compatible) : *        - FSAL_O_RDONLY: opening file for reading only. *        - FSAL_O_RDWR: opening file for reading and writing. *        - FSAL_O_WRONLY: opening file for writting only. *        - FSAL_O_APPEND: always write at the end of the file. *        - FSAL_O_TRUNC: truncate the file to 0 on opening. * @param file_desc The file descriptor to be used for FSAL_read/write ops. * * @return ERR_FSAL_NO_ERROR on success, error otherwise */fsal_status_tGPFSFSAL_open(struct fsal_obj_handle *obj_hdl,	      const struct req_op_context *op_ctx, int posix_flags,	      int *file_desc){	struct gpfs_fsal_obj_handle *myself;	fsal_status_t status;	struct gpfs_fsal_export *exp = container_of(op_ctx->fsal_export,					struct gpfs_fsal_export, export);	int export_fd = exp->export_fd;	/* sanity checks. */	if (!obj_hdl || !file_desc)		return fsalstat(ERR_FSAL_FAULT, 0);	myself = container_of(obj_hdl, struct gpfs_fsal_obj_handle,								obj_handle);	LogFullDebug(COMPONENT_FSAL, "posix_flags 0x%X export_fd %d",						posix_flags, export_fd);	fsal_set_credentials(op_ctx->creds);	status = fsal_internal_handle2fd(export_fd, myself->handle,					 file_desc, posix_flags);	fsal_restore_ganesha_credentials();	if (FSAL_IS_ERROR(status)) {		/** Try open as root access if the above call fails,		 * permission will be checked somewhere else in the code.		 */		status = fsal_internal_handle2fd(export_fd,						 myself->handle,						 file_desc, posix_flags);	}	return status;}
开发者ID:hongjil5,项目名称:nfs-ganesha,代码行数:58,


示例14: VFSFSAL_getattrs_descriptor

/** * VFSFSAL_getattrs_descriptor: * Get attributes for the object specified by its descriptor or by it's filehandle. * * /param p_file_descriptor (input): *        The file descriptor of the object to get parameters. * /param p_filehandle (input): *        The handle of the object to get parameters. * /param p_context (input): *        Authentication context for the operation (user,...). * /param p_object_attributes (mandatory input/output): *        The retrieved attributes for the object. *        As input, it defines the attributes that the caller *        wants to retrieve (by positioning flags into this structure) *        and the output is built considering this input *        (it fills the structure according to the flags it contains). * * /return Major error codes : *        - ERR_FSAL_NO_ERROR     (no error) *        - Another error code if an error occured. */fsal_status_t VFSFSAL_getattrs_descriptor(fsal_file_t * p_file_descriptor,     /* IN */                                           fsal_handle_t * p_filehandle,        /* IN */                                           fsal_op_context_t * p_context,       /* IN */                                           fsal_attrib_list_t * p_object_attributes /* IN/OUT */    ){  fsal_status_t st;  struct stat64 buffstat;  int rc, errsv;  /* sanity checks.   * note : object_attributes is mandatory in VFSFSAL_getattrs.   */  if(!p_file_descriptor || !p_filehandle || !p_context || !p_object_attributes)    Return(ERR_FSAL_FAULT, 0, INDEX_FSAL_getattrs_descriptor);  TakeTokenFSCall();  rc = fstat64(((vfsfsal_file_t *)p_file_descriptor)->fd, &buffstat);  errsv = errno;  ReleaseTokenFSCall();  if(rc == -1)    Return(posix2fsal_error(errsv), errsv, INDEX_FSAL_getattrs_descriptor);  /* convert attributes */  st = posixstat64_2_fsal_attributes(&buffstat, p_object_attributes);  if(FSAL_IS_ERROR(st))    {      FSAL_CLEAR_MASK(p_object_attributes->asked_attributes);      FSAL_SET_MASK(p_object_attributes->asked_attributes, FSAL_ATTR_RDATTR_ERR);      ReturnStatus(st, INDEX_FSAL_getattrs_descriptor);    }  Return(ERR_FSAL_NO_ERROR, 0, INDEX_FSAL_getattrs_descriptor);}
开发者ID:ShyamsundarR,项目名称:nfs-ganesha,代码行数:57,


示例15: GPFSFSAL_mkdir

/** *  @brief Create a directory. * *  @param dir_hdl Handle of the parent directory *  @param dir_name Pointer to the name of the directory to be created. *  @param op_ctx Authentication context for the operation (user,...). *  @param accessmode Mode for the directory to be created. *  @param gpfs_fh Pointer to the handle of the created directory. *  @param fsal_attr Attributes of the created directory. *  @return ERR_FSAL_NO_ERROR on success, error otherwise * */fsal_status_tGPFSFSAL_mkdir(struct fsal_obj_handle *dir_hdl, const char *dir_name,               const struct req_op_context *op_ctx, uint32_t accessmode,               struct gpfs_file_handle *gpfs_fh, struct attrlist *obj_attr){    mode_t unix_mode;    fsal_status_t status;    /* note : obj_attr is optional. */    if (!dir_hdl || !op_ctx || !gpfs_fh || !dir_name)        return fsalstat(ERR_FSAL_FAULT, 0);    /* convert FSAL mode to unix mode. */    unix_mode = fsal2unix_mode(accessmode);    /* Apply umask */    unix_mode = unix_mode &                ~op_ctx->fsal_export->exp_ops.fs_umask(op_ctx->fsal_export);    /* build new entry path */    /* creates the directory and get its handle */    fsal_set_credentials(op_ctx->creds);    status = fsal_internal_create(dir_hdl, dir_name, unix_mode | S_IFDIR,                                  0, gpfs_fh, NULL);    fsal_restore_ganesha_credentials();    if (FSAL_IS_ERROR(status))        return status;    /* retrieve file attributes */    return GPFSFSAL_getattrs(op_ctx->fsal_export,                             dir_hdl->fs->private_data,                             op_ctx, gpfs_fh, obj_attr);}
开发者ID:nfs-ganesha,项目名称:nfs-ganesha,代码行数:48,


示例16: GPFSFSAL_Init

/** * FSAL_Init : Initializes the FileSystem Abstraction Layer. * * /param init_info (input, fsal_parameter_t *) : *        Pointer to a structure that contains *        all initialization parameters for the FSAL. *        Specifically, it contains settings about *        the filesystem on which the FSAL is based, *        security settings, logging policy and outputs, *        and other general FSAL options. * * /return Major error codes : *         ERR_FSAL_NO_ERROR     (initialisation OK) *         ERR_FSAL_FAULT        (init_info pointer is null) *         ERR_FSAL_SERVERFAULT  (misc FSAL error) *         ERR_FSAL_ALREADY_INIT (The FS is already initialized) *         ERR_FSAL_BAD_INIT     (FS specific init error, *                                minor error code gives the reason *                                for this error.) *         ERR_FSAL_SEC_INIT     (Security context init error). */fsal_status_t GPFSFSAL_Init(fsal_parameter_t * init_info    /* IN */    ){  char *fshandle;  size_t fshandlelen = 0;  fsal_status_t status;  int rc = 0;  /* sanity check.  */  if(!init_info)    Return(ERR_FSAL_FAULT, 0, INDEX_FSAL_Init);  /* save open-by-handle char device */  memcpy(open_by_handle_path, init_info->fs_specific_info.open_by_handle_dev_file,         MAXPATHLEN);  open_by_handle_fd = open(init_info->fs_specific_info.open_by_handle_dev_file, O_RDONLY);  if(open_by_handle_fd < 0)    {      LogMajor(COMPONENT_FSAL,               "FSAL INIT: ERROR: Could not open open-by-handle character device file at %s: rc = %d",               init_info->fs_specific_info.open_by_handle_dev_file, errno);      ReturnCode(ERR_FSAL_INVAL, 0);    }  /* proceeds FSAL internal initialization */  status = fsal_internal_init_global(&(init_info->fsal_info),                                     &(init_info->fs_common_info),                                     &(init_info->fs_specific_info));  if(FSAL_IS_ERROR(status))    Return(status.major, status.minor, INDEX_FSAL_Init);  /* Regular exit */  Return(ERR_FSAL_NO_ERROR, 0, INDEX_FSAL_Init);}
开发者ID:alangenfeld,项目名称:cloud-nfs,代码行数:57,


示例17: GPFSFSAL_open

/** @fn fsal_status_t *       GPFSFSAL_open(struct fsal_obj_handle *obj_hdl, *                     const struct req_op_context *op_ctx, *                     fsal_openflags_t openflags, int *file_desc, *                     struct attrlist *fsal_attr, bool reopen) * *  @brief Open a regular file for reading/writing its data content. * * @param obj_hdl Handle of the file to be read/modified. * @param op_ctx Authentication context for the operation (user,...). * @param openflags Flags that indicates behavior for file opening and access. *        This is an inclusive OR of the following values *        ( such of them are not compatible) : *        - FSAL_O_RDONLY: opening file for reading only. *        - FSAL_O_RDWR: opening file for reading and writing. *        - FSAL_O_WRONLY: opening file for writting only. *        - FSAL_O_APPEND: always write at the end of the file. *        - FSAL_O_TRUNC: truncate the file to 0 on opening. * @param file_desc The file descriptor to be used for FSAL_read/write ops. * * @return ERR_FSAL_NO_ERROR on success, error otherwise */fsal_status_tGPFSFSAL_open(struct fsal_obj_handle *obj_hdl,	      const struct req_op_context *op_ctx, int posix_flags,	      int *file_desc, bool reopen){	struct gpfs_fsal_obj_handle *myself;	struct gpfs_filesystem *gpfs_fs;	fsal_status_t status;	/* sanity checks. */	if (!obj_hdl || !file_desc)		return fsalstat(ERR_FSAL_FAULT, 0);	myself = container_of(obj_hdl, struct gpfs_fsal_obj_handle, obj_handle);	gpfs_fs = obj_hdl->fs->private_data;	LogFullDebug(COMPONENT_FSAL, "posix_flags 0x%X", posix_flags);	status = fsal_internal_handle2fd(gpfs_fs->root_fd, myself->handle,					 file_desc, posix_flags, reopen);	if (FSAL_IS_ERROR(status)) {		/** In some environments, "root" is denied write access,		 * so try with the request credentials if the above call		 * fails.		 */		fsal_set_credentials(op_ctx->creds);		status = fsal_internal_handle2fd(gpfs_fs->root_fd,						 myself->handle,						 file_desc, posix_flags,						 reopen);		fsal_restore_ganesha_credentials();	}	return status;}
开发者ID:srimalik,项目名称:nfs-ganesha,代码行数:58,


示例18: FSAL_unlink_access_default

/** * FSAL_unlink_access_default : * test if a client identified by cred can unlink on a directory knowing its attributes * * /param pcontext  user's context. * /param pattrsrc  source directory attributes * /param pattrobj  object attributes * * /return Major error codes : *        - ERR_FSAL_NO_ERROR     (no error) *        - ERR_FSAL_ACCESS       (Permission denied) *        - ERR_FSAL_FAULT        (null pointer parameter) *        - ERR_FSAL_INVAL        (missing attributes : mode, group, user,...) *        - ERR_FSAL_SERVERFAULT  (unexpected error) */fsal_status_t FSAL_unlink_access_default(fsal_op_context_t  * pcontext, /* IN */                                         fsal_attrib_list_t * pattrsrc, /* IN */					 fsal_attrib_list_t * pattrobj) /* IN */{  fsal_status_t fsal_status;  /* Sticky Bit on the parent directory? */  if(pattrsrc->mode & FSAL_MODE_SVTX)  {          /* The user must own the file or the parent directory. */	  if(    ( pattrsrc->owner != FSAL_OP_CONTEXT_TO_UID(pcontext) )              || ( pattrobj->owner != FSAL_OP_CONTEXT_TO_UID(pcontext) ) )		  Return(ERR_FSAL_ACCESS, 0, INDEX_FSAL_unlink_access);  }  /* The user must be able to lookup and write the parent directory */  fsal_status = FSAL_test_access_default(pcontext, ( FSAL_W_OK | FSAL_X_OK ), pattrsrc);  if(FSAL_IS_ERROR(fsal_status))    Return(fsal_status.major, fsal_status.minor, INDEX_FSAL_unlink_access);  /* If this point is reached, then access is granted */  Return(ERR_FSAL_NO_ERROR, 0, INDEX_FSAL_unlink_access);}                               /* FSAL_unlink_access */
开发者ID:jordan-dlh,项目名称:nfs-ganesha,代码行数:39,


示例19: PROXYFSAL_truncate

fsal_status_t PROXYFSAL_truncate(proxyfsal_handle_t * filehandle,       /* IN */                                 proxyfsal_op_context_t * p_context,    /* IN */                                 fsal_size_t length,    /* IN */                                 fsal_file_t * file_descriptor, /* [IN|OUT] */                                 fsal_attrib_list_t * object_attributes /* [ IN/OUT ] */    ){  int rc;  COMPOUND4args argnfs4;  COMPOUND4res resnfs4;  nfs_fh4 nfs4fh;  uint64_t fileid;  fsal_status_t fsal_status;  fsal_attrib_list_t open_attrs;  bitmap4 inbitmap;  bitmap4 convert_bitmap;  uint32_t inbitmap_val[2];  uint32_t bitmap_res[2];  uint32_t bitmap_set[2];  uint32_t bitmap_conv_val[2];#define FSAL_TRUNCATE_NB_OP_ALLOC 3  nfs_argop4 argoparray[FSAL_TRUNCATE_NB_OP_ALLOC];  nfs_resop4 resoparray[FSAL_TRUNCATE_NB_OP_ALLOC];  fsal_attrib_list_t fsal_attr_set;  fattr4 fattr_set;  fsal_proxy_internal_fattr_t fattr_internal;  struct timeval timeout = { 25, 0 };  /* sanity checks.   * note : object_attributes is optional.   */  if(!filehandle || !p_context)    Return(ERR_FSAL_FAULT, 0, INDEX_FSAL_truncate);  if(filehandle->data.object_type_reminder != FSAL_TYPE_FILE)    {      Return(ERR_FSAL_INVAL, 0, INDEX_FSAL_truncate);    }  if(file_descriptor == NULL)    {      /* Use the stateless version */      fsal_status = FSAL_proxy_truncate_stateless(filehandle,                                                  p_context, length, object_attributes);      Return(fsal_status.major, fsal_status.minor, INDEX_FSAL_truncate);    }  /* First, we need to get the fileid on a filehandle base */  fsal_status = FSAL_DigestHandle(p_context->export_context,                                  FSAL_DIGEST_FILEID4, filehandle, (caddr_t) & fileid);  if(FSAL_IS_ERROR(fsal_status))    {      Return(fsal_status.major, fsal_status.minor, INDEX_FSAL_truncate);    }  /* Then we have of open the file by fileid */  open_attrs.asked_attributes = FSAL_ATTRS_POSIX;  fsal_status = FSAL_open_by_fileid(filehandle,                                    fileid,                                    p_context, FSAL_O_RDWR, file_descriptor, &open_attrs);  if(FSAL_IS_ERROR(fsal_status))    {      Return(fsal_status.major, fsal_status.minor, INDEX_FSAL_truncate);    }  /* Setup results structures */  argnfs4.argarray.argarray_val = argoparray;  resnfs4.resarray.resarray_val = resoparray;  fsal_internal_proxy_setup_fattr(&fattr_internal);  argnfs4.minorversion = 0;  /* argnfs4.tag.utf8string_val = "GANESHA NFSv4 Proxy: Truncate" ; */  argnfs4.tag.utf8string_val = NULL;  argnfs4.tag.utf8string_len = 0;  argnfs4.argarray.argarray_len = 0;  /* Get NFSv4 File handle */  if(fsal_internal_proxy_extract_fh(&nfs4fh, filehandle) == FALSE)    Return(ERR_FSAL_FAULT, 0, INDEX_FSAL_truncate);  /* Get prepared for truncate */  fsal_attr_set.asked_attributes = FSAL_ATTR_SIZE;  fsal_attr_set.filesize = length;  convert_bitmap.bitmap4_val = bitmap_conv_val;  convert_bitmap.bitmap4_len = 2;  fsal_interval_proxy_fsalattr2bitmap4(&fsal_attr_set, &convert_bitmap);  if(nfs4_FSALattr_To_Fattr(NULL,       /* no exportlist required here */                            &fsal_attr_set, &fattr_set, NULL,   /* no compound data required here */                            NULL,       /* No fh here, filehandle is not a settable attribute */                            &convert_bitmap) == -1)    Return(ERR_FSAL_INVAL, -1, INDEX_FSAL_truncate);  inbitmap.bitmap4_val = inbitmap_val;  inbitmap.bitmap4_len = 2;//.........这里部分代码省略.........
开发者ID:alangenfeld,项目名称:cloud-nfs,代码行数:101,


示例20: LUSTREFSAL_unlink

fsal_status_t LUSTREFSAL_unlink(fsal_handle_t * p_parent_directory_handle,        /* IN */                                fsal_name_t * p_object_name,    /* IN */                                fsal_op_context_t * p_context,    /* IN */                                fsal_attrib_list_t * p_parent_directory_attributes      /* [IN/OUT ] */    ){  fsal_status_t status;  int rc, errsv;  struct stat buffstat, buffstat_parent;  fsal_path_t fsalpath;  /* sanity checks. */  if(!p_parent_directory_handle || !p_context || !p_object_name)    Return(ERR_FSAL_FAULT, 0, INDEX_FSAL_unlink);  /* build the FID path */  status = fsal_internal_Handle2FidPath(p_context, p_parent_directory_handle, &fsalpath);  if(FSAL_IS_ERROR(status))    ReturnStatus(status, INDEX_FSAL_unlink);  /* get directory metadata */  TakeTokenFSCall();  rc = lstat(fsalpath.path, &buffstat_parent);  errsv = errno;  ReleaseTokenFSCall();  if(rc)    {      if(errsv == ENOENT)        Return(ERR_FSAL_STALE, errsv, INDEX_FSAL_unlink);      else        Return(posix2fsal_error(errsv), errsv, INDEX_FSAL_unlink);    }  /* build the child path */  status = fsal_internal_appendNameToPath(&fsalpath, p_object_name);  if(FSAL_IS_ERROR(status))    ReturnStatus(status, INDEX_FSAL_unlink);  /* get file metadata */  TakeTokenFSCall();  rc = lstat(fsalpath.path, &buffstat);  errsv = errno;  ReleaseTokenFSCall();  if(rc)    Return(posix2fsal_error(errsv), errsv, INDEX_FSAL_unlink);  /* check access rights */  /* Sticky bit on the directory => the user who wants to delete the file must own it or its parent dir */  if((buffstat_parent.st_mode & S_ISVTX)     && buffstat_parent.st_uid != p_context->credential.user     && buffstat.st_uid != p_context->credential.user && p_context->credential.user != 0)    {      Return(ERR_FSAL_ACCESS, 0, INDEX_FSAL_unlink);    }  /* client must be able to lookup the parent directory and modify it */  status =      fsal_internal_testAccess(p_context, FSAL_W_OK | FSAL_X_OK, &buffstat_parent, NULL);  if(FSAL_IS_ERROR(status))    ReturnStatus(status, INDEX_FSAL_unlink);  /******************************   * DELETE FROM THE FILESYSTEM *   ******************************/  TakeTokenFSCall();  /* If the object to delete is a directory, use 'rmdir' to delete the object, else use 'unlink' */  rc = (S_ISDIR(buffstat.st_mode)) ? rmdir(fsalpath.path) : unlink(fsalpath.path);  errsv = errno;  ReleaseTokenFSCall();  if(rc)    Return(posix2fsal_error(errsv), errsv, INDEX_FSAL_unlink);  /***********************   * FILL THE ATTRIBUTES *   ***********************/  if(p_parent_directory_attributes)    {      status =          LUSTREFSAL_getattrs(p_parent_directory_handle, p_context,                              p_parent_directory_attributes);      if(FSAL_IS_ERROR(status))        {          FSAL_CLEAR_MASK(p_parent_directory_attributes->asked_attributes);          FSAL_SET_MASK(p_parent_directory_attributes->asked_attributes,                        FSAL_ATTR_RDATTR_ERR);        }    }  /* OK */  Return(ERR_FSAL_NO_ERROR, 0, INDEX_FSAL_unlink);}
开发者ID:MeghanaM,项目名称:nfs-ganesha,代码行数:94,


示例21: PTFSAL_create

/** * FSAL_create: * Create a regular file. * * /param parent_hdl (input): *        Handle of the parent directory where the file is to be created. * /param p_filename (input): *        Pointer to the name of the file to be created. * /param p_context (input): *        Authentication context for the operation (user,...). * /param accessmode (input): *        Mode for the file to be created. *        (the umask defined into the FSAL configuration file *        will be applied on it). * /param p_object_handle (output): *        Pointer to the handle of the created file. * /param p_object_attributes (optional input/output): *        The attributes of the created file. *        As input, it defines the attributes that the caller *        wants to retrieve (by positioning flags into this structure) *        and the output is built considering this input *        (it fills the structure according to the flags it contains). *        May be NULL. * * /return Major error codes : *        - ERR_FSAL_NO_ERROR     (no error) *        - Another error code if an error occurred. */fsal_status_t PTFSAL_create(struct fsal_obj_handle *dir_hdl,	/* IN */			    const char *p_filename,	/* IN */			    const struct req_op_context *p_context,	/* IN */			    uint32_t accessmode,	/* IN */			    ptfsal_handle_t *p_object_handle,	/* OUT */			    struct attrlist *p_object_attributes){				/* IN/OUT */	int errsv;	fsal_status_t status;	struct pt_fsal_obj_handle *pt_hdl;	mode_t unix_mode;	int open_rc;	ptfsal_handle_t *p_fsi_handle = (ptfsal_handle_t *) p_object_handle;	FSI_TRACE(FSI_DEBUG, "Begin to create file************************/n");	/* sanity checks.	 * note : object_attributes is optional.	 */	if (!dir_hdl || !p_context || !p_object_handle || !p_filename)		return fsalstat(ERR_FSAL_FAULT, 0);	pt_hdl = container_of(dir_hdl, struct pt_fsal_obj_handle, obj_handle);	/* convert fsal mode to unix mode. */	unix_mode = fsal2unix_mode(accessmode);	/* Apply umask */	unix_mode = unix_mode & ~p_context->fsal_export->exp_ops.			fs_umask(p_context->fsal_export);	LogFullDebug(COMPONENT_FSAL, "Creation mode: 0%o", accessmode);	open_rc =	    ptfsal_open(pt_hdl, p_filename, p_context, unix_mode,			p_object_handle);	if (open_rc < 0) {		errsv = errno;		return fsalstat(posix2fsal_error(errsv), errsv);	}	FSI_TRACE(FSI_DEBUG, "New Handle = %s",		  (char *)p_fsi_handle->data.handle.f_handle);	/* retrieve file attributes */	if (p_object_attributes) {		status = PTFSAL_getattrs(p_context->fsal_export, p_context,					 p_object_handle,					 p_object_attributes);		/* on error, we set a special bit in the mask. */		if (FSAL_IS_ERROR(status)) {			FSAL_CLEAR_MASK(p_object_attributes->mask);			FSAL_SET_MASK(p_object_attributes->mask,				      ATTR_RDATTR_ERR);		}	}	FSI_TRACE(FSI_DEBUG, "End to create file************************/n");	/* OK */	return fsalstat(ERR_FSAL_NO_ERROR, 0);}
开发者ID:JevonQ,项目名称:nfs-ganesha,代码行数:94,


示例22: PTFSAL_mkdir

/** * FSAL_mkdir: * Create a directory. * * /param dir_hdl (input): *        Handle of the parent directory where *        the subdirectory is to be created. * /param p_context (input): *        Pointer to the name of the directory to be created. * /param cred (input): *        Authentication context for the operation (user,...). * /param accessmode (input): *        Mode for the directory to be created. *        (the umask defined into the FSAL configuration file *        will be applied on it). * /param p_object_handle (output): *        Pointer to the handle of the created directory. * /param p_object_attributes (optionnal input/output): *        The attributes of the created directory. *        As input, it defines the attributes that the caller *        wants to retrieve (by positioning flags into this structure) *        and the output is built considering this input *        (it fills the structure according to the flags it contains). *        May be NULL. * * /return Major error codes : *        - ERR_FSAL_NO_ERROR     (no error) *        - Another error code if an error occured. */fsal_status_t PTFSAL_mkdir(struct fsal_obj_handle *dir_hdl,	/* IN */			   const char *p_dirname,	/* IN */			   const struct req_op_context *p_context,	/* IN */			   uint32_t accessmode,	/* IN */			   ptfsal_handle_t *p_object_handle,	/* OUT */			   struct attrlist *p_object_attributes){				/* IN/OUT */	int rc, errsv;	int setgid_bit = 0;	mode_t unix_mode;	fsal_status_t status;	struct attrlist parent_dir_attrs;	char newPath[PATH_MAX];	struct pt_fsal_obj_handle *pt_hdl;	FSI_TRACE(FSI_INFO, "MKDIR BEGIN-------------------------/n");	/* sanity checks.	 * note : object_attributes is optional.	 */	if (!dir_hdl || !p_context || !p_object_handle || !p_dirname)		return fsalstat(ERR_FSAL_FAULT, 0);	pt_hdl = container_of(dir_hdl, struct pt_fsal_obj_handle, obj_handle);	/* convert FSAL mode to unix mode. */	unix_mode = fsal2unix_mode(accessmode);	/* Apply umask */	unix_mode = unix_mode & ~p_context->fsal_export->exp_ops.			fs_umask(p_context->fsal_export);	/* get directory metadata */	parent_dir_attrs.mask = p_context->fsal_export->exp_ops.				fs_supported_attrs(p_context->fsal_export);	status =	    PTFSAL_getattrs(p_context->fsal_export, p_context, pt_hdl->handle,			    &parent_dir_attrs);	if (FSAL_IS_ERROR(status))		return status;	/* Check the user can write in the directory, and check the	 * setgid bit on the directory	 */	if (fsal2unix_mode(parent_dir_attrs.mode) & S_ISGID)		setgid_bit = 1;	rc = ptfsal_mkdir(pt_hdl, p_dirname, p_context, unix_mode,			  p_object_handle);	errsv = errno;	if (rc)		return fsalstat(posix2fsal_error(errsv), errsv);	if (FSAL_IS_ERROR(status))		return status;	/* the directory has been created */	/* chown the dir to the current user/group */	if (p_context->creds->caller_uid != geteuid()) {		FSI_TRACE(FSI_DEBUG, "MKDIR %d", __LINE__);		/* if the setgid_bit was set on the parent directory, do not		 * change the group of the created file, because it's already		 * the parentdir's group		 */		if (fsi_get_name_from_handle		    (p_context, p_context->fsal_export, pt_hdl->handle,//.........这里部分代码省略.........
开发者ID:JevonQ,项目名称:nfs-ganesha,代码行数:101,


示例23: cache_inode_kill_entry

//.........这里部分代码省略.........          *pstatus = CACHE_INODE_LRU_ERROR;          return *pstatus;        }    }  fsaldata.handle = *pfsal_handle;  fsaldata.cookie = DIR_START;  /* Use the handle to build the key */  if(cache_inode_fsaldata_2_key(&key, &fsaldata, pclient))    {      free_lock( pentry, lock_how ) ;       LogCrit(COMPONENT_CACHE_INODE,              "cache_inode_kill_entry: could not build hashtable key");      cache_inode_release_fsaldata_key(&key, pclient);      *pstatus = CACHE_INODE_NOT_FOUND;      return *pstatus;    }  /* use the key to delete the entry */  if((rc = HashTable_Del(ht, &key, &old_key, &old_value)) != HASHTABLE_SUCCESS)    {      if( rc != HASHTABLE_ERROR_NO_SUCH_KEY) /* rc=3 => Entry was previously removed */        LogCrit( COMPONENT_CACHE_INODE,                 "cache_inode_kill_entry: entry could not be deleted, status = %d",                 rc);      cache_inode_release_fsaldata_key(&key, pclient);      *pstatus = CACHE_INODE_NOT_FOUND;      return *pstatus;    }  /* Release the hash key data */  cache_inode_release_fsaldata_key(&old_key, pclient);  /* Clean up the associated ressources in the FSAL */  if(FSAL_IS_ERROR(fsal_status = FSAL_CleanObjectResources(pfsal_handle)))    {      LogCrit(COMPONENT_CACHE_INODE,              "cache_inode_kill_entry: Couldn't free FSAL ressources fsal_status.major=%u",              fsal_status.major);    }  /* Sanity check: old_value.pdata is expected to be equal to pentry,   * and is released later in this function */  if((cache_entry_t *) old_value.pdata != pentry)    {      LogCrit(COMPONENT_CACHE_INODE,              "cache_inode_kill_entry: unexpected pdata %p from hash table (pentry=%p)",              old_value.pdata, pentry);    }  /* Release the current key */  cache_inode_release_fsaldata_key(&key, pclient);  /* Recover the parent list entries */  parent_iter = pentry->parent_list;  while(parent_iter != NULL)    {      parent_iter_next = parent_iter->next_parent;      ReleaseToPool(parent_iter, &pclient->pool_parent);      parent_iter = parent_iter_next;    }  /* If entry is datacached, remove it from the cache */  if(pentry->internal_md.type == REGULAR_FILE)    {      cache_content_status_t cache_content_status;      if(pentry->object.file.pentry_content != NULL)        if(cache_content_release_entry           ((cache_content_entry_t *) pentry->object.file.pentry_content,            (cache_content_client_t *) pclient->pcontent_client,            &cache_content_status) != CACHE_CONTENT_SUCCESS)          LogCrit(COMPONENT_CACHE_INODE,                  "Could not removed datacached entry for pentry %p", pentry);    }  /* If entry is a DIRECTORY, invalidate dirents */  if(pentry->internal_md.type == DIRECTORY)    {	cache_inode_invalidate_related_dirents(pentry, pclient);    }  // free_lock( pentry, lock_how ) ; /* Really needed ? The pentry is unaccessible now and will be destroyed */  /* Destroy the mutex associated with the pentry */  cache_inode_mutex_destroy(pentry);  /* Put the pentry back to the pool */  ReleaseToPool(pentry, &pclient->pool_entry);  *pstatus = CACHE_INODE_SUCCESS;  return *pstatus;}                               /* cache_inode_kill_entry */
开发者ID:bwelch,项目名称:nfs-ganesha,代码行数:101,


示例24: GPFSFSAL_create

/** * FSAL_create: * Create a regular file. * * /param parent_directory_handle (input): *        Handle of the parent directory where the file is to be created. * /param p_filename (input): *        Pointer to the name of the file to be created. * /param cred (input): *        Authentication context for the operation (user,...). * /param accessmode (input): *        Mode for the file to be created. *        (the umask defined into the FSAL configuration file *        will be applied on it). * /param object_handle (output): *        Pointer to the handle of the created file. * /param object_attributes (optional input/output):  *        The attributes of the created file. *        As input, it defines the attributes that the caller *        wants to retrieve (by positioning flags into this structure) *        and the output is built considering this input *        (it fills the structure according to the flags it contains). *        May be NULL. * * /return Major error codes : *        - ERR_FSAL_NO_ERROR     (no error) *        - Another error code if an error occurred. */fsal_status_t GPFSFSAL_create(fsal_handle_t * p_parent_directory_handle,    /* IN */                          fsal_name_t * p_filename,     /* IN */                          fsal_op_context_t * p_context,        /* IN */                          fsal_accessmode_t accessmode, /* IN */                          fsal_handle_t * p_object_handle,      /* OUT */                          fsal_attrib_list_t * p_object_attributes      /* [ IN/OUT ] */    ){  int rc = 0, errsv;  int setgid_bit = 0;  fsal_status_t status;  int fd, newfd;  mode_t unix_mode;  fsal_accessflags_t access_mask = 0;  fsal_attrib_list_t parent_dir_attrs;  /* sanity checks.   * note : object_attributes is optional.   */  if(!p_parent_directory_handle || !p_context || !p_object_handle || !p_filename)    Return(ERR_FSAL_FAULT, 0, INDEX_FSAL_create);  /* convert fsal mode to unix mode. */  unix_mode = fsal2unix_mode(accessmode);  /* Apply umask */  unix_mode = unix_mode & ~global_fs_info.umask;  LogFullDebug(COMPONENT_FSAL, "Creation mode: 0%o", accessmode);  TakeTokenFSCall();  status =      fsal_internal_handle2fd(p_context, p_parent_directory_handle, &fd,                              O_RDONLY | O_DIRECTORY);  ReleaseTokenFSCall();  if(FSAL_IS_ERROR(status))    ReturnStatus(status, INDEX_FSAL_create);  /* retrieve directory metadata */  parent_dir_attrs.asked_attributes = GPFS_SUPPORTED_ATTRIBUTES;  status = GPFSFSAL_getattrs(p_parent_directory_handle, p_context, &parent_dir_attrs);  if(FSAL_IS_ERROR(status))    ReturnStatus(status, INDEX_FSAL_create);  /* Check the user can write in the directory, and check the setgid bit on the directory */  if(fsal2unix_mode(parent_dir_attrs.mode) & S_ISGID)    setgid_bit = 1;  /* Set both mode and ace4 mask */  access_mask = FSAL_MODE_MASK_SET(FSAL_W_OK | FSAL_X_OK) |                FSAL_ACE4_MASK_SET(FSAL_ACE_PERM_ADD_FILE);  status = fsal_internal_testAccess(p_context, access_mask, NULL, &parent_dir_attrs);  if(FSAL_IS_ERROR(status))    ReturnStatus(status, INDEX_FSAL_create);  /* call to filesystem */  TakeTokenFSCall();  /* create the file.   * O_EXCL=>  error if the file already exists */  newfd = openat(fd, p_filename->name, O_CREAT | O_WRONLY | O_TRUNC | O_EXCL, unix_mode);  errsv = errno;  if(newfd < 0)    {      close(fd);      ReleaseTokenFSCall();      Return(posix2fsal_error(errsv), errsv, INDEX_FSAL_create);//.........这里部分代码省略.........
开发者ID:bwelch,项目名称:nfs-ganesha,代码行数:101,


示例25: GPFSFSAL_mknode

/** * FSAL_mknode: * Create a special object in the filesystem. * Not supported upon HPSS. * * /return ERR_FSAL_NOTSUPP. */fsal_status_t GPFSFSAL_mknode(fsal_handle_t * parentdir_handle,     /* IN */                          fsal_name_t * p_node_name,    /* IN */                          fsal_op_context_t * p_context,        /* IN */                          fsal_accessmode_t accessmode, /* IN */                          fsal_nodetype_t nodetype,     /* IN */                          fsal_dev_t * dev,     /* IN */                          fsal_handle_t * p_object_handle,      /* OUT (handle to the created node) */                          fsal_attrib_list_t * node_attributes  /* [ IN/OUT ] */    ){  int rc, errsv;  int setgid_bit = 0;  fsal_status_t status;  int fd, newfd;  mode_t unix_mode = 0;  dev_t unix_dev = 0;  fsal_accessflags_t access_mask = 0;  fsal_attrib_list_t parent_dir_attrs;  /* sanity checks.   * note : link_attributes is optional.   */  if(!parentdir_handle || !p_context || !p_node_name)    Return(ERR_FSAL_FAULT, 0, INDEX_FSAL_mknode);  unix_mode = fsal2unix_mode(accessmode);  /* Apply umask */  unix_mode = unix_mode & ~global_fs_info.umask;  switch (nodetype)    {    case FSAL_TYPE_BLK:      if(!dev)        Return(ERR_FSAL_FAULT, 0, INDEX_FSAL_mknode);      unix_mode |= S_IFBLK;      unix_dev = (dev->major << 8) | (dev->minor & 0xFF);      break;    case FSAL_TYPE_CHR:      if(!dev)        Return(ERR_FSAL_FAULT, 0, INDEX_FSAL_mknode);      unix_mode |= S_IFCHR;      unix_dev = (dev->major << 8) | (dev->minor & 0xFF);      break;    case FSAL_TYPE_SOCK:      unix_mode |= S_IFSOCK;      break;    case FSAL_TYPE_FIFO:      unix_mode |= S_IFIFO;      break;    default:      LogMajor(COMPONENT_FSAL,               "Invalid node type in FSAL_mknode: %d", nodetype);      Return(ERR_FSAL_INVAL, 0, INDEX_FSAL_mknode);    }  /* build the directory path */  status =      fsal_internal_handle2fd(p_context, parentdir_handle, &fd, O_RDONLY | O_DIRECTORY);  if(FSAL_IS_ERROR(status))    ReturnStatus(status, INDEX_FSAL_mknode);  /* retrieve directory attributes */  parent_dir_attrs.asked_attributes = GPFS_SUPPORTED_ATTRIBUTES;  status = GPFSFSAL_getattrs(parentdir_handle, p_context, &parent_dir_attrs);  if(FSAL_IS_ERROR(status))    ReturnStatus(status, INDEX_FSAL_mknode);  /* Check the user can write in the directory, and check weither the setgid bit on the directory */  if(fsal2unix_mode(parent_dir_attrs.mode) & S_ISGID)    setgid_bit = 1;  /* Set both mode and ace4 mask */  access_mask = FSAL_MODE_MASK_SET(FSAL_W_OK | FSAL_X_OK) |                FSAL_ACE4_MASK_SET(FSAL_ACE_PERM_ADD_FILE);  status = fsal_internal_testAccess(p_context, access_mask, NULL, &parent_dir_attrs);  if(FSAL_IS_ERROR(status))    ReturnStatus(status, INDEX_FSAL_mknode);  /* creates the node, then stats it */  rc = mknodat(fd, p_node_name->name, unix_mode, unix_dev);  errsv = errno;  if(rc)    {      close(fd);//.........这里部分代码省略.........
开发者ID:bwelch,项目名称:nfs-ganesha,代码行数:101,


示例26: GPFSFSAL_link

/** * FSAL_link: * Create a hardlink. * * /param target_handle (input): *        Handle of the target object. * /param dir_handle (input): *        Pointer to the directory handle where *        the hardlink is to be created. * /param p_link_name (input): *        Pointer to the name of the hardlink to be created. * /param cred (input): *        Authentication context for the operation (user,...). * /param accessmode (input): *        Mode for the directory to be created. *        (the umask defined into the FSAL configuration file *        will be applied on it). * /param attributes (optionnal input/output):  *        The post_operation attributes of the linked object. *        As input, it defines the attributes that the caller *        wants to retrieve (by positioning flags into this structure) *        and the output is built considering this input *        (it fills the structure according to the flags it contains). *        May be NULL. * * /return Major error codes : *        - ERR_FSAL_NO_ERROR     (no error) *        - Another error code if an error occured. */fsal_status_t GPFSFSAL_link(fsal_handle_t * p_target_handle,        /* IN */                        fsal_handle_t * p_dir_handle,   /* IN */                        fsal_name_t * p_link_name,      /* IN */                        fsal_op_context_t * p_context,  /* IN */                        fsal_attrib_list_t * p_attributes       /* [ IN/OUT ] */    ){  fsal_status_t status;  int srcfd, dstfd;  fsal_accessflags_t access_mask = 0;  fsal_attrib_list_t parent_dir_attrs;  /* sanity checks.   * note : attributes is optional.   */  if(!p_target_handle || !p_dir_handle || !p_context || !p_context->export_context     || !p_link_name || !p_link_name->name)    Return(ERR_FSAL_FAULT, 0, INDEX_FSAL_link);  /* Tests if hardlinking is allowed by configuration. */  if(!global_fs_info.link_support)    Return(ERR_FSAL_NOTSUPP, 0, INDEX_FSAL_link);  /* get the target handle access by fid */  TakeTokenFSCall();  status = fsal_internal_handle2fd(p_context, p_target_handle, &srcfd, O_RDONLY);  ReleaseTokenFSCall();  if(FSAL_IS_ERROR(status))    ReturnStatus(status, INDEX_FSAL_link);  /* build the destination path and check permissions on the directory */  TakeTokenFSCall();  status =      fsal_internal_handle2fd(p_context, p_dir_handle, &dstfd, O_RDONLY | O_DIRECTORY);  ReleaseTokenFSCall();  if(FSAL_IS_ERROR(status))    {      close(srcfd);      ReturnStatus(status, INDEX_FSAL_link);    }  /* retrieve target directory metadata */  parent_dir_attrs.asked_attributes = GPFS_SUPPORTED_ATTRIBUTES;  status = GPFSFSAL_getattrs(p_dir_handle, p_context, &parent_dir_attrs);  if(FSAL_IS_ERROR(status))    ReturnStatus(status, INDEX_FSAL_link);  /* check permission on target directory */  /* Set both mode and ace4 mask */  access_mask = FSAL_MODE_MASK_SET(FSAL_W_OK | FSAL_X_OK) |                FSAL_ACE4_MASK_SET(FSAL_ACE_PERM_ADD_FILE);  status = fsal_internal_testAccess(p_context, access_mask, NULL, &parent_dir_attrs);  if(FSAL_IS_ERROR(status))    ReturnStatus(status, INDEX_FSAL_link);  /* Create the link on the filesystem */  TakeTokenFSCall();  status = fsal_internal_link_at(srcfd, dstfd, p_link_name->name);  ReleaseTokenFSCall();  if(FSAL_IS_ERROR(status))    {      close(srcfd);      close(dstfd);      ReturnStatus(status, INDEX_FSAL_link);    }//.........这里部分代码省略.........
开发者ID:bwelch,项目名称:nfs-ganesha,代码行数:101,


示例27: GPFSFSAL_unlink

fsal_status_t GPFSFSAL_unlink(struct fsal_obj_handle *dir_hdl,	/* IN */			      const char *p_object_name,	/* IN */			      const struct req_op_context *p_context,	/* IN */			      struct attrlist *p_parent_attributes){				/* IN/OUT */	fsal_status_t status;	gpfsfsal_xstat_t buffxstat;	int mount_fd;	struct gpfs_fsal_obj_handle *gpfs_hdl;	/* sanity checks. */	if (!dir_hdl || !p_context || !p_object_name)		return fsalstat(ERR_FSAL_FAULT, 0);	gpfs_hdl =	    container_of(dir_hdl, struct gpfs_fsal_obj_handle, obj_handle);	mount_fd = gpfs_get_root_fd(dir_hdl->export);	/* build the child path */	/* get file metadata */	status =	    fsal_internal_stat_name(mount_fd, gpfs_hdl->handle, p_object_name,				    &buffxstat.buffstat);	if (FSAL_IS_ERROR(status))		return status;  /******************************   * DELETE FROM THE FILESYSTEM *   ******************************/	fsal_set_credentials(p_context->creds);	status =	    fsal_internal_unlink(mount_fd, gpfs_hdl->handle, p_object_name,				 &buffxstat.buffstat);	fsal_restore_ganesha_credentials();	if (FSAL_IS_ERROR(status))		return status;  /***********************   * FILL THE ATTRIBUTES *   ***********************/	if (p_parent_attributes) {		buffxstat.attr_valid = XATTR_STAT;		status =		    gpfsfsal_xstat_2_fsal_attributes(&buffxstat,						     p_parent_attributes);		if (FSAL_IS_ERROR(status)) {			FSAL_CLEAR_MASK(p_parent_attributes->mask);			FSAL_SET_MASK(p_parent_attributes->mask,				      ATTR_RDATTR_ERR);		}	}	/* OK */	return fsalstat(ERR_FSAL_NO_ERROR, 0);}
开发者ID:asias,项目名称:nfs-ganesha,代码行数:61,


示例28: rquota_getquota

/** * @brief The Rquota getquota function, for all versions. * * The RQUOTA getquota function, for all versions. * * @param[in]  parg     Ignored * @param[in]  pexport  Ignored * @param[in]  pcontext Ignored * @param[in]  pworker  Ignored * @param[in]  preq     Ignored * @param[out] pres     Ignored * */int rquota_getquota(nfs_arg_t  *parg,                    exportlist_t  *pexport,                    fsal_op_context_t *pcontext,                    nfs_worker_data_t *pworker,                    struct svc_req *preq,                    nfs_res_t * pres){  fsal_status_t fsal_status;  fsal_quota_t fsal_quota;  fsal_path_t fsal_path;  int quota_type = USRQUOTA;  int quota_id;  char work[MAXPATHLEN];  LogFullDebug(COMPONENT_NFSPROTO,               "REQUEST PROCESSING: Calling rquota_getquota");  if(preq->rq_vers == EXT_RQUOTAVERS)    {      quota_type = parg->arg_ext_rquota_getquota.gqa_type;      quota_id = parg->arg_ext_rquota_getquota.gqa_id;    }  else    {      quota_type = USRQUOTA;      quota_id = parg->arg_rquota_getquota.gqa_uid;    }  if(parg->arg_rquota_getquota.gqa_pathp[0] == '/')    strncpy(work, parg->arg_rquota_getquota.gqa_pathp, MAXPATHLEN);  else    {      if(nfs_export_tag2path(nfs_param.pexportlist,                             parg->arg_rquota_getquota.gqa_pathp,                             strnlen(parg->arg_rquota_getquota.gqa_pathp, MAXPATHLEN),                             work, MAXPATHLEN) == -1)        {          pres->res_rquota_getquota.status = Q_EPERM;          return NFS_REQ_OK;        }    }  if(FSAL_IS_ERROR((fsal_status = FSAL_str2path(work, MAXPATHLEN, &fsal_path))))    {      pres->res_rquota_getquota.status = Q_EPERM;      return NFS_REQ_OK;    }  fsal_status = FSAL_get_quota(&fsal_path, quota_type, quota_id, &fsal_quota);  if(FSAL_IS_ERROR(fsal_status))    {      if(fsal_status.major == ERR_FSAL_NO_QUOTA)        pres->res_rquota_getquota.status = Q_NOQUOTA;      else        pres->res_rquota_getquota.status = Q_EPERM;      return NFS_REQ_OK;    }  /* success */  pres->res_rquota_getquota.status = Q_OK;  pres->res_rquota_getquota.getquota_rslt_u.gqr_rquota.rq_active = TRUE;  pres->res_rquota_getquota.getquota_rslt_u.gqr_rquota.rq_bsize = fsal_quota.bsize;  pres->res_rquota_getquota.getquota_rslt_u.gqr_rquota.rq_bhardlimit =      fsal_quota.bhardlimit;  pres->res_rquota_getquota.getquota_rslt_u.gqr_rquota.rq_bsoftlimit =      fsal_quota.bsoftlimit;  pres->res_rquota_getquota.getquota_rslt_u.gqr_rquota.rq_curblocks =      fsal_quota.curblocks;  pres->res_rquota_getquota.getquota_rslt_u.gqr_rquota.rq_curfiles = fsal_quota.curfiles;  pres->res_rquota_getquota.getquota_rslt_u.gqr_rquota.rq_fhardlimit =      fsal_quota.fhardlimit;  pres->res_rquota_getquota.getquota_rslt_u.gqr_rquota.rq_fsoftlimit =      fsal_quota.fsoftlimit;  pres->res_rquota_getquota.getquota_rslt_u.gqr_rquota.rq_btimeleft =      fsal_quota.btimeleft;  pres->res_rquota_getquota.getquota_rslt_u.gqr_rquota.rq_ftimeleft =      fsal_quota.ftimeleft;  return NFS_REQ_OK;}                               /* rquota_getquota */
开发者ID:ShyamsundarR,项目名称:nfs-ganesha,代码行数:95,


示例29: GPFSFSAL_mkdir

/** * FSAL_mkdir: * Create a directory. * * /param parent_directory_handle (input): *        Handle of the parent directory where *        the subdirectory is to be created. * /param p_dirname (input): *        Pointer to the name of the directory to be created. * /param cred (input): *        Authentication context for the operation (user,...). * /param accessmode (input): *        Mode for the directory to be created. *        (the umask defined into the FSAL configuration file *        will be applied on it). * /param object_handle (output): *        Pointer to the handle of the created directory. * /param object_attributes (optionnal input/output):  *        The attributes of the created directory. *        As input, it defines the attributes that the caller *        wants to retrieve (by positioning flags into this structure) *        and the output is built considering this input *        (it fills the structure according to the flags it contains). *        May be NULL. * * /return Major error codes : *        - ERR_FSAL_NO_ERROR     (no error) *        - Another error code if an error occured. */fsal_status_t GPFSFSAL_mkdir(fsal_handle_t * p_parent_directory_handle,     /* IN */                         fsal_name_t * p_dirname,       /* IN */                         fsal_op_context_t * p_context, /* IN */                         fsal_accessmode_t accessmode,  /* IN */                         fsal_handle_t * p_object_handle,       /* OUT */                         fsal_attrib_list_t * p_object_attributes       /* [ IN/OUT ] */    ){  int rc, errsv;  int setgid_bit = 0;  mode_t unix_mode;  fsal_status_t status;  int fd, newfd;  fsal_accessflags_t access_mask = 0;  fsal_attrib_list_t parent_dir_attrs;  /* sanity checks.   * note : object_attributes is optional.   */  if(!p_parent_directory_handle || !p_context || !p_object_handle || !p_dirname)    Return(ERR_FSAL_FAULT, 0, INDEX_FSAL_mkdir);  /* convert FSAL mode to unix mode. */  unix_mode = fsal2unix_mode(accessmode);  /* Apply umask */  unix_mode = unix_mode & ~global_fs_info.umask;  TakeTokenFSCall();  status = fsal_internal_handle2fd(p_context, p_parent_directory_handle, &fd, O_RDONLY);  ReleaseTokenFSCall();  if(FSAL_IS_ERROR(status))    ReturnStatus(status, INDEX_FSAL_mkdir);  /* get directory metadata */  parent_dir_attrs.asked_attributes = GPFS_SUPPORTED_ATTRIBUTES;  status = GPFSFSAL_getattrs(p_parent_directory_handle, p_context, &parent_dir_attrs);  if(FSAL_IS_ERROR(status))    ReturnStatus(status, INDEX_FSAL_create);  /* Check the user can write in the directory, and check the setgid bit on the directory */  if(fsal2unix_mode(parent_dir_attrs.mode) & S_ISGID)    setgid_bit = 1;  /* Set both mode and ace4 mask */  access_mask = FSAL_MODE_MASK_SET(FSAL_W_OK | FSAL_X_OK) |                FSAL_ACE4_MASK_SET(FSAL_ACE_PERM_ADD_SUBDIRECTORY);  status = fsal_internal_testAccess(p_context, access_mask, NULL, &parent_dir_attrs);  if(FSAL_IS_ERROR(status))    ReturnStatus(status, INDEX_FSAL_mkdir);  /* build new entry path */  /* creates the directory and get its handle */  TakeTokenFSCall();  rc = mkdirat(fd, p_dirname->name, unix_mode);  errsv = errno;  if(rc)    {      close(fd);      ReleaseTokenFSCall();      Return(posix2fsal_error(errsv), errsv, INDEX_FSAL_mkdir);    }  ReleaseTokenFSCall();//.........这里部分代码省略.........
开发者ID:bwelch,项目名称:nfs-ganesha,代码行数:101,



注:本文中的FSAL_IS_ERROR函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


C++ FSFindFolder函数代码示例
C++ FSAL_CLEAR_MASK函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。