thread: Move get/put calls into .c file
This will make it much easier to mock this library for use in unit tests. Change-Id: I7dc835865f75f9e29e8b709a634d30053ada2055 Signed-off-by: Ben Walker <benjamin.walker@intel.com> Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/16296 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Aleksey Marchuk <alexeymar@nvidia.com> Community-CI: Mellanox Build Bot Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
parent
9aa709e25a
commit
03e4522ed3
@ -1103,39 +1103,8 @@ void spdk_iobuf_entry_abort(struct spdk_iobuf_channel *ch, struct spdk_iobuf_ent
|
|||||||
*
|
*
|
||||||
* \return pointer to a buffer or NULL if no buffers are currently available.
|
* \return pointer to a buffer or NULL if no buffers are currently available.
|
||||||
*/
|
*/
|
||||||
static inline void *
|
void *spdk_iobuf_get(struct spdk_iobuf_channel *ch, uint64_t len, struct spdk_iobuf_entry *entry,
|
||||||
spdk_iobuf_get(struct spdk_iobuf_channel *ch, uint64_t len,
|
spdk_iobuf_get_cb cb_fn);
|
||||||
struct spdk_iobuf_entry *entry, spdk_iobuf_get_cb cb_fn)
|
|
||||||
{
|
|
||||||
struct spdk_iobuf_pool *pool;
|
|
||||||
void *buf;
|
|
||||||
|
|
||||||
assert(spdk_io_channel_get_thread(ch->parent) == spdk_get_thread());
|
|
||||||
if (len <= ch->small.bufsize) {
|
|
||||||
pool = &ch->small;
|
|
||||||
} else {
|
|
||||||
assert(len <= ch->large.bufsize);
|
|
||||||
pool = &ch->large;
|
|
||||||
}
|
|
||||||
|
|
||||||
buf = (void *)STAILQ_FIRST(&pool->cache);
|
|
||||||
if (buf) {
|
|
||||||
STAILQ_REMOVE_HEAD(&pool->cache, stailq);
|
|
||||||
assert(pool->cache_count > 0);
|
|
||||||
pool->cache_count--;
|
|
||||||
} else {
|
|
||||||
buf = spdk_mempool_get(pool->pool);
|
|
||||||
if (!buf) {
|
|
||||||
STAILQ_INSERT_TAIL(pool->queue, entry, stailq);
|
|
||||||
entry->module = ch->module;
|
|
||||||
entry->cb_fn = cb_fn;
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return (char *)buf;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Release a buffer back to the iobuf pool. If there are outstanding requests waiting for a buffer,
|
* Release a buffer back to the iobuf pool. If there are outstanding requests waiting for a buffer,
|
||||||
@ -1145,32 +1114,7 @@ spdk_iobuf_get(struct spdk_iobuf_channel *ch, uint64_t len,
|
|||||||
* \param buf Buffer to release
|
* \param buf Buffer to release
|
||||||
* \param len Length of the buffer (must be the exact same value as specified in `spdk_iobuf_get()`).
|
* \param len Length of the buffer (must be the exact same value as specified in `spdk_iobuf_get()`).
|
||||||
*/
|
*/
|
||||||
static inline void
|
void spdk_iobuf_put(struct spdk_iobuf_channel *ch, void *buf, uint64_t len);
|
||||||
spdk_iobuf_put(struct spdk_iobuf_channel *ch, void *buf, uint64_t len)
|
|
||||||
{
|
|
||||||
struct spdk_iobuf_entry *entry;
|
|
||||||
struct spdk_iobuf_pool *pool;
|
|
||||||
|
|
||||||
assert(spdk_io_channel_get_thread(ch->parent) == spdk_get_thread());
|
|
||||||
if (len <= ch->small.bufsize) {
|
|
||||||
pool = &ch->small;
|
|
||||||
} else {
|
|
||||||
pool = &ch->large;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (STAILQ_EMPTY(pool->queue)) {
|
|
||||||
if (pool->cache_count < pool->cache_size) {
|
|
||||||
STAILQ_INSERT_HEAD(&pool->cache, (struct spdk_iobuf_buffer *)buf, stailq);
|
|
||||||
pool->cache_count++;
|
|
||||||
} else {
|
|
||||||
spdk_mempool_put(pool->pool, buf);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
entry = STAILQ_FIRST(pool->queue);
|
|
||||||
STAILQ_REMOVE_HEAD(pool->queue, stailq);
|
|
||||||
entry->cb_fn(entry, buf);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
@ -347,3 +347,64 @@ spdk_iobuf_entry_abort(struct spdk_iobuf_channel *ch, struct spdk_iobuf_entry *e
|
|||||||
|
|
||||||
STAILQ_REMOVE(pool->queue, entry, spdk_iobuf_entry, stailq);
|
STAILQ_REMOVE(pool->queue, entry, spdk_iobuf_entry, stailq);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void *
|
||||||
|
spdk_iobuf_get(struct spdk_iobuf_channel *ch, uint64_t len,
|
||||||
|
struct spdk_iobuf_entry *entry, spdk_iobuf_get_cb cb_fn)
|
||||||
|
{
|
||||||
|
struct spdk_iobuf_pool *pool;
|
||||||
|
void *buf;
|
||||||
|
|
||||||
|
assert(spdk_io_channel_get_thread(ch->parent) == spdk_get_thread());
|
||||||
|
if (len <= ch->small.bufsize) {
|
||||||
|
pool = &ch->small;
|
||||||
|
} else {
|
||||||
|
assert(len <= ch->large.bufsize);
|
||||||
|
pool = &ch->large;
|
||||||
|
}
|
||||||
|
|
||||||
|
buf = (void *)STAILQ_FIRST(&pool->cache);
|
||||||
|
if (buf) {
|
||||||
|
STAILQ_REMOVE_HEAD(&pool->cache, stailq);
|
||||||
|
assert(pool->cache_count > 0);
|
||||||
|
pool->cache_count--;
|
||||||
|
} else {
|
||||||
|
buf = spdk_mempool_get(pool->pool);
|
||||||
|
if (!buf) {
|
||||||
|
STAILQ_INSERT_TAIL(pool->queue, entry, stailq);
|
||||||
|
entry->module = ch->module;
|
||||||
|
entry->cb_fn = cb_fn;
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return (char *)buf;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
spdk_iobuf_put(struct spdk_iobuf_channel *ch, void *buf, uint64_t len)
|
||||||
|
{
|
||||||
|
struct spdk_iobuf_entry *entry;
|
||||||
|
struct spdk_iobuf_pool *pool;
|
||||||
|
|
||||||
|
assert(spdk_io_channel_get_thread(ch->parent) == spdk_get_thread());
|
||||||
|
if (len <= ch->small.bufsize) {
|
||||||
|
pool = &ch->small;
|
||||||
|
} else {
|
||||||
|
pool = &ch->large;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (STAILQ_EMPTY(pool->queue)) {
|
||||||
|
if (pool->cache_count < pool->cache_size) {
|
||||||
|
STAILQ_INSERT_HEAD(&pool->cache, (struct spdk_iobuf_buffer *)buf, stailq);
|
||||||
|
pool->cache_count++;
|
||||||
|
} else {
|
||||||
|
spdk_mempool_put(pool->pool, buf);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
entry = STAILQ_FIRST(pool->queue);
|
||||||
|
STAILQ_REMOVE_HEAD(pool->queue, stailq);
|
||||||
|
entry->cb_fn(entry, buf);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -72,6 +72,8 @@
|
|||||||
spdk_iobuf_register_module;
|
spdk_iobuf_register_module;
|
||||||
spdk_iobuf_for_each_entry;
|
spdk_iobuf_for_each_entry;
|
||||||
spdk_iobuf_entry_abort;
|
spdk_iobuf_entry_abort;
|
||||||
|
spdk_iobuf_get;
|
||||||
|
spdk_iobuf_put;
|
||||||
|
|
||||||
# internal functions in spdk_internal/thread.h
|
# internal functions in spdk_internal/thread.h
|
||||||
spdk_poller_get_name;
|
spdk_poller_get_name;
|
||||||
|
Loading…
Reference in New Issue
Block a user