static int builtin_posix_module_process_reqs (hio_dataset_t dataset, hio_internal_request_t **reqs, int req_count) { builtin_posix_module_t *posix_module = (builtin_posix_module_t *) dataset->ds_module; hioi_object_lock (&dataset->ds_object); for (int i = 0 ; i < req_count ; ++i) { hio_internal_request_t *req = reqs[i]; if (HIO_REQUEST_TYPE_READ == req->ir_type) { req->ir_status = builtin_posix_module_element_read_strided_internal (posix_module, req->ir_element, req->ir_offset, req->ir_data.r, req->ir_count, req->ir_size, req->ir_stride); } else { req->ir_status = builtin_posix_module_element_write_strided_internal (posix_module, req->ir_element, req->ir_offset, req->ir_data.w, req->ir_count, req->ir_size, req->ir_stride); } if (req->ir_status < 0) { hioi_object_unlock (&dataset->ds_object); return (int) req->ir_status; } } hioi_object_unlock (&dataset->ds_object); return HIO_SUCCESS; }
static int builtin_posix_module_process_reqs (hio_dataset_t dataset, hio_internal_request_t **reqs, int req_count) { builtin_posix_module_dataset_t *posix_dataset = (builtin_posix_module_dataset_t *) dataset; builtin_posix_module_t *posix_module = (builtin_posix_module_t *) dataset->ds_module; hio_context_t context = hioi_object_context (&dataset->ds_object); uint64_t start, stop; int rc = HIO_SUCCESS; start = hioi_gettime (); hioi_object_lock (&dataset->ds_object); for (int i = 0 ; i < req_count ; ++i) { hio_internal_request_t *req = reqs[i]; if (HIO_REQUEST_TYPE_READ == req->ir_type) { POSIX_TRACE_CALL(posix_dataset, req->ir_status = builtin_posix_module_element_read_strided_internal (posix_module, req->ir_element, req->ir_offset, req->ir_data.r, req->ir_count, req->ir_size, req->ir_stride), "element_read", req->ir_offset, req->ir_count * req->ir_size); } else { POSIX_TRACE_CALL(posix_dataset, req->ir_status = builtin_posix_module_element_write_strided_internal (posix_module, req->ir_element, req->ir_offset, req->ir_data.w, req->ir_count, req->ir_size, req->ir_stride), "element_write", req->ir_offset, req->ir_count * req->ir_size); } if (req->ir_urequest && req->ir_status > 0) { hio_request_t new_request = hioi_request_alloc (context); if (NULL == new_request) { rc = HIO_ERR_OUT_OF_RESOURCE; break; } req->ir_urequest[0] = new_request; new_request->req_transferred = req->ir_status; new_request->req_complete = true; new_request->req_status = HIO_SUCCESS; } if (req->ir_status < 0) { rc = (int) req->ir_status; break; } } hioi_object_unlock (&dataset->ds_object); stop = hioi_gettime (); builtin_posix_trace (posix_dataset, "process_requests", req_count, 0, start, stop); return rc; }
static int builtin_posix_module_element_read_strided_nb (hio_element_t element, hio_request_t *request, off_t offset, void *ptr, size_t count, size_t size, size_t stride) { builtin_posix_module_dataset_t *posix_dataset = (builtin_posix_module_dataset_t *) hioi_element_dataset (element); builtin_posix_module_t *posix_module = (builtin_posix_module_t *) posix_dataset->base.ds_module; hio_context_t context = hioi_object_context (&element->e_object); ssize_t bytes_read; hio_request_t new_request; int rc = HIO_SUCCESS; if (!(posix_dataset->base.ds_flags & HIO_FLAG_READ)) { return HIO_ERR_PERM; } if (stride == 0) { size *= count; count = 1; } hioi_object_lock (&posix_dataset->base.ds_object); bytes_read = builtin_posix_module_element_read_strided_internal (posix_module, element, offset, ptr, count, size, stride); hioi_object_unlock (&posix_dataset->base.ds_object); if (0 > bytes_read) { rc = (int) bytes_read; } /* see if a request was requested */ if (request) { new_request = hioi_request_alloc (context); if (NULL == new_request) { return HIO_ERR_OUT_OF_RESOURCE; } *request = new_request; new_request->req_transferred = bytes_read; new_request->req_complete = true; } return rc; }