fsal_status_t tank_remove_extattr_by_id(struct fsal_obj_handle *obj_hdl, unsigned int xattr_id) { char name[MAXNAMLEN]; struct zfs_fsal_obj_handle *obj_handle = NULL; int retval = 0; creden_t cred; obj_handle = container_of(obj_hdl, struct zfs_fsal_obj_handle, obj_handle); cred.uid = op_ctx->creds->caller_uid; cred.gid = op_ctx->creds->caller_gid; retval = xattr_id_to_name(ZFSFSAL_GetVFS(obj_handle->handle), &cred, obj_handle->handle->zfs_handle, xattr_id, name); if (retval) return fsalstat(retval, 0); retval = libzfswrap_removexattr(ZFSFSAL_GetVFS(obj_handle->handle), &cred, obj_handle->handle->zfs_handle, name); if (retval != 0) return fsalstat(posix2fsal_error(retval), retval); return fsalstat(ERR_FSAL_NO_ERROR, 0); }
/** * Removes a xattr by Id * * \param p_objecthandle Handle of the object you want to get attribute for. * \param p_context pointer to the current security context. * \param xattr_id xattr's id */ fsal_status_t ZFSFSAL_RemoveXAttrById(fsal_handle_t * obj_handle, /* IN */ fsal_op_context_t * context, /* IN */ unsigned int xattr_id) /* IN */ { int rc; creden_t cred; char psz_name[FSAL_MAX_NAME_LEN]; zfsfsal_handle_t * p_objecthandle = (zfsfsal_handle_t *)obj_handle; zfsfsal_op_context_t *p_context = (zfsfsal_op_context_t *)context; /* Hook to prevent any modification in the snapshots */ if(p_objecthandle->data.i_snap != 0) Return(ERR_FSAL_ROFS, 0, INDEX_FSAL_SetXAttrValue); if((rc = xattr_id_to_name(p_context->export_context->p_vfs, p_context, p_objecthandle, xattr_id, psz_name))) Return(rc, 0, INDEX_FSAL_SetXAttrValue); cred.uid = p_context->credential.user; cred.gid = p_context->credential.group; TakeTokenFSCall(); rc = libzfswrap_removexattr(p_context->export_context->p_vfs, &cred, p_objecthandle->data.zfs_handle, psz_name); ReleaseTokenFSCall(); if(rc) Return(posix2fsal_error(rc), 0, INDEX_FSAL_SetXAttrValue); Return(ERR_FSAL_NO_ERROR, 0, INDEX_FSAL_SetXAttrValue); }
fsal_status_t tank_remove_extattr_by_name(struct fsal_obj_handle *obj_hdl, const char *xattr_name) { struct zfs_fsal_obj_handle *obj_handle = NULL; int retval = 0; creden_t cred; obj_handle = container_of(obj_hdl, struct zfs_fsal_obj_handle, obj_handle); cred.uid = op_ctx->creds->caller_uid; cred.gid = op_ctx->creds->caller_gid; retval = libzfswrap_removexattr(ZFSFSAL_GetVFS(obj_handle->handle), &cred, obj_handle->handle->zfs_handle, xattr_name); if (retval != 0) return fsalstat(posix2fsal_error(retval), retval); return fsalstat(ERR_FSAL_NO_ERROR, 0); }
/** * Removes a xattr by Name * * \param p_objecthandle Handle of the object you want to get attribute for. * \param p_context pointer to the current security context. * \param xattr_name xattr's name */ fsal_status_t ZFSFSAL_RemoveXAttrByName(fsal_handle_t * obj_handle, /* IN */ fsal_op_context_t * p_context, /* IN */ const fsal_name_t * xattr_name) /* IN */ { int rc; creden_t cred; zfsfsal_handle_t * p_objecthandle = (zfsfsal_handle_t *)obj_handle; /* Hook to prevent any modification in the snapshots */ if(p_objecthandle->data.i_snap != 0) Return(ERR_FSAL_ROFS, 0, INDEX_FSAL_SetXAttrValue); cred.uid = p_context->credential.user; cred.gid = p_context->credential.group; TakeTokenFSCall(); rc = libzfswrap_removexattr(((zfsfsal_op_context_t *)p_context)->export_context->p_vfs, &cred, p_objecthandle->data.zfs_handle, xattr_name->name); ReleaseTokenFSCall(); if(rc) Return(posix2fsal_error(rc), 0, INDEX_FSAL_SetXAttrValue); Return(ERR_FSAL_NO_ERROR, 0, INDEX_FSAL_SetXAttrValue); }