Merge pull request #854 from robertbaldyga/request-cleanup

A little cleanup between ocf_request and ocf_io
This commit is contained in:
Robert Baldyga 2025-02-04 15:20:44 +01:00 committed by GitHub
commit 08eb00665c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 18 additions and 52 deletions

View File

@ -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
* *

View File

@ -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);

View File

@ -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);

View File

@ -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 */

View File

@ -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):