Merge pull request #854 from robertbaldyga/request-cleanup
A little cleanup between ocf_request and ocf_io
This commit is contained in:
commit
08eb00665c
@ -45,15 +45,6 @@ typedef void (*ocf_handle_io_t)(ocf_io_t io, void *opaque);
|
|||||||
*/
|
*/
|
||||||
typedef void (*ocf_end_io_t)(ocf_io_t io, void *priv1, void *priv2, int error);
|
typedef void (*ocf_end_io_t)(ocf_io_t io, void *priv1, void *priv2, int error);
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Increase reference counter in OCF IO
|
|
||||||
*
|
|
||||||
* @note Wrapper for get IO operation
|
|
||||||
*
|
|
||||||
* @param[in] io OCF IO
|
|
||||||
*/
|
|
||||||
void ocf_io_get(ocf_io_t io);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Decrease reference counter in OCF IO
|
* @brief Decrease reference counter in OCF IO
|
||||||
*
|
*
|
||||||
|
@ -213,8 +213,7 @@ static void ocf_req_complete(struct ocf_request *req, int error)
|
|||||||
|
|
||||||
dec_counter_if_req_was_dirty(req);
|
dec_counter_if_req_was_dirty(req);
|
||||||
|
|
||||||
/* Invalidate OCF IO, it is not valid after completion */
|
ocf_req_put(req);
|
||||||
ocf_io_put(req);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline ocf_req_cache_mode_t _ocf_core_req_resolve_fast_mode(
|
static inline ocf_req_cache_mode_t _ocf_core_req_resolve_fast_mode(
|
||||||
@ -261,7 +260,7 @@ static void ocf_core_volume_submit_io(ocf_io_t io)
|
|||||||
struct ocf_request *req = ocf_io_to_req(io);
|
struct ocf_request *req = ocf_io_to_req(io);
|
||||||
ocf_core_t core;
|
ocf_core_t core;
|
||||||
ocf_cache_t cache;
|
ocf_cache_t cache;
|
||||||
int ret;
|
int ret, fastpath;
|
||||||
|
|
||||||
OCF_CHECK_NULL(io);
|
OCF_CHECK_NULL(io);
|
||||||
|
|
||||||
@ -281,7 +280,7 @@ static void ocf_core_volume_submit_io(ocf_io_t io)
|
|||||||
|
|
||||||
req->complete = ocf_req_complete;
|
req->complete = ocf_req_complete;
|
||||||
|
|
||||||
ocf_io_get(io);
|
ocf_req_get(req);
|
||||||
|
|
||||||
if (unlikely(req->d2c)) {
|
if (unlikely(req->d2c)) {
|
||||||
ocf_core_update_stats(core, io);
|
ocf_core_update_stats(core, io);
|
||||||
@ -303,15 +302,15 @@ static void ocf_core_volume_submit_io(ocf_io_t io)
|
|||||||
* sequential cutoff info */
|
* sequential cutoff info */
|
||||||
ocf_req_get(req);
|
ocf_req_get(req);
|
||||||
|
|
||||||
if (ocf_core_submit_io_fast(req, cache) == OCF_FAST_PATH_YES) {
|
fastpath = ocf_core_submit_io_fast(req, cache);
|
||||||
ocf_core_seq_cutoff_update(core, req);
|
|
||||||
ocf_req_put(req);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
ocf_req_put(req);
|
|
||||||
ocf_req_clear_map(req);
|
|
||||||
ocf_core_seq_cutoff_update(core, req);
|
ocf_core_seq_cutoff_update(core, req);
|
||||||
|
ocf_req_put(req);
|
||||||
|
|
||||||
|
if (fastpath == OCF_FAST_PATH_YES)
|
||||||
|
return;
|
||||||
|
|
||||||
|
ocf_req_clear_map(req);
|
||||||
|
|
||||||
ret = ocf_engine_hndl_req(req);
|
ret = ocf_engine_hndl_req(req);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
@ -323,7 +322,7 @@ static void ocf_core_volume_submit_io(ocf_io_t io)
|
|||||||
|
|
||||||
err:
|
err:
|
||||||
ocf_io_end_func(io, ret);
|
ocf_io_end_func(io, ret);
|
||||||
ocf_io_put(req);
|
ocf_req_put(req);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ocf_core_volume_submit_flush(ocf_io_t io)
|
static void ocf_core_volume_submit_flush(ocf_io_t io)
|
||||||
@ -349,7 +348,7 @@ static void ocf_core_volume_submit_flush(ocf_io_t io)
|
|||||||
|
|
||||||
req->complete = ocf_req_complete;
|
req->complete = ocf_req_complete;
|
||||||
|
|
||||||
ocf_io_get(io);
|
ocf_req_get(req);
|
||||||
|
|
||||||
if (unlikely(req->d2c)) {
|
if (unlikely(req->d2c)) {
|
||||||
ocf_d2c_flush_fast(req);
|
ocf_d2c_flush_fast(req);
|
||||||
@ -387,7 +386,7 @@ static void ocf_core_volume_submit_discard(ocf_io_t io)
|
|||||||
|
|
||||||
req->complete = ocf_req_complete;
|
req->complete = ocf_req_complete;
|
||||||
|
|
||||||
ocf_io_get(io);
|
ocf_req_get(req);
|
||||||
|
|
||||||
if (unlikely(req->d2c)) {
|
if (unlikely(req->d2c)) {
|
||||||
ocf_d2c_discard_fast(req);
|
ocf_d2c_discard_fast(req);
|
||||||
|
15
src/ocf_io.c
15
src/ocf_io.c
@ -89,7 +89,6 @@ ocf_io_t ocf_io_new(ocf_volume_t volume, ocf_queue_t queue,
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
env_atomic_set(&req->io.ref_count, 1);
|
|
||||||
req->io.volume = volume;
|
req->io.volume = volume;
|
||||||
req->io.io_class = io_class;
|
req->io.io_class = io_class;
|
||||||
req->flags = flags;
|
req->flags = flags;
|
||||||
@ -125,22 +124,10 @@ uint32_t ocf_io_get_offset(ocf_io_t io)
|
|||||||
return req->offset;
|
return req->offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ocf_io_get(ocf_io_t io)
|
|
||||||
{
|
|
||||||
struct ocf_request *req = ocf_io_to_req(io);
|
|
||||||
|
|
||||||
env_atomic_inc_return(&req->io.ref_count);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ocf_io_put(ocf_io_t io)
|
void ocf_io_put(ocf_io_t io)
|
||||||
{
|
{
|
||||||
struct ocf_request *req = ocf_io_to_req(io);
|
struct ocf_request *req = ocf_io_to_req(io);
|
||||||
struct ocf_volume *volume;
|
struct ocf_volume *volume = req->io.volume;
|
||||||
|
|
||||||
if (env_atomic_dec_return(&req->io.ref_count))
|
|
||||||
return;
|
|
||||||
|
|
||||||
volume = req->io.volume;
|
|
||||||
|
|
||||||
ocf_io_allocator_del(&volume->type->allocator, (void *)req);
|
ocf_io_allocator_del(&volume->type->allocator, (void *)req);
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright(c) 2012-2022 Intel Corporation
|
* Copyright(c) 2012-2022 Intel Corporation
|
||||||
* Copyright(c) 2024 Huawei Technologies
|
* Copyright(c) 2024-2025 Huawei Technologies
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -129,11 +129,6 @@ struct ocf_request_io {
|
|||||||
*/
|
*/
|
||||||
uint8_t io_class;
|
uint8_t io_class;
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief OCF IO reference count
|
|
||||||
*/
|
|
||||||
env_atomic ref_count;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Front volume handle
|
* @brief Front volume handle
|
||||||
*/
|
*/
|
||||||
@ -259,6 +254,9 @@ struct ocf_request {
|
|||||||
uint8_t rw : 1;
|
uint8_t rw : 1;
|
||||||
/*!< Indicator of IO direction - Read/Write */
|
/*!< Indicator of IO direction - Read/Write */
|
||||||
|
|
||||||
|
uint8_t alock_rw: 1;
|
||||||
|
/*!< Read/Write mode for alock*/
|
||||||
|
|
||||||
uint8_t d2c : 1;
|
uint8_t d2c : 1;
|
||||||
/**!< request affects metadata cachelines (is not direct-to-core) */
|
/**!< request affects metadata cachelines (is not direct-to-core) */
|
||||||
|
|
||||||
@ -300,9 +298,6 @@ struct ocf_request {
|
|||||||
|
|
||||||
ocf_req_cache_mode_t cache_mode;
|
ocf_req_cache_mode_t cache_mode;
|
||||||
|
|
||||||
uint64_t timestamp;
|
|
||||||
/*!< Tracing timestamp */
|
|
||||||
|
|
||||||
ocf_queue_t io_queue;
|
ocf_queue_t io_queue;
|
||||||
/*!< I/O queue handle for which request should be submitted */
|
/*!< I/O queue handle for which request should be submitted */
|
||||||
|
|
||||||
@ -317,9 +312,6 @@ struct ocf_request {
|
|||||||
|
|
||||||
struct ocf_req_discard_info discard;
|
struct ocf_req_discard_info discard;
|
||||||
|
|
||||||
uint32_t alock_rw;
|
|
||||||
/*!< Read/Write mode for alock*/
|
|
||||||
|
|
||||||
uint8_t *alock_status;
|
uint8_t *alock_status;
|
||||||
/*!< Mapping for locked/unlocked alock entries */
|
/*!< Mapping for locked/unlocked alock entries */
|
||||||
|
|
||||||
|
@ -81,9 +81,6 @@ class Io(Structure):
|
|||||||
def put(self):
|
def put(self):
|
||||||
OcfLib.getInstance().ocf_io_put(byref(self))
|
OcfLib.getInstance().ocf_io_put(byref(self))
|
||||||
|
|
||||||
def get(self):
|
|
||||||
OcfLib.getInstance().ocf_io_get(byref(self))
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@END
|
@END
|
||||||
def c_end(io, priv1, priv2, err):
|
def c_end(io, priv1, priv2, err):
|
||||||
|
Loading…
Reference in New Issue
Block a user