bdev: Begin encapsulating spdk_bdev_io
This begins the process of hiding data members in spdk_bdev_io that don't need to be accessed from within bdev modules. One strategy would be to implement accessors for every data member in the structure. However, that may have negative performance effects. Instead, create a new internal structure within the old structure. This new structure will still be visible for now, but at least makes clear which members are accessible and which are not. This patch shifts one data member to the new structure as an example. Change-Id: I68525db995325732fe9f5fc3f45b06920948309b Signed-off-by: Ben Walker <benjamin.walker@intel.com> Reviewed-on: https://review.gerrithub.io/412298 Tested-by: SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com> Reviewed-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Reviewed-by: Changpeng Liu <changpeng.liu@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
parent
c6ae008db5
commit
a94accabff
@ -407,15 +407,17 @@ struct spdk_bdev_io {
|
||||
/** Callback for when buf is allocated */
|
||||
spdk_bdev_io_get_buf_cb get_buf_cb;
|
||||
|
||||
/** Entry to the list need_buf of struct spdk_bdev. */
|
||||
STAILQ_ENTRY(spdk_bdev_io) buf_link;
|
||||
|
||||
/** Member used for linking child I/Os together. */
|
||||
TAILQ_ENTRY(spdk_bdev_io) link;
|
||||
|
||||
/** It may be used by modules to put the bdev_io into its own list. */
|
||||
TAILQ_ENTRY(spdk_bdev_io) module_link;
|
||||
|
||||
struct {
|
||||
/** Entry to the list need_buf of struct spdk_bdev. */
|
||||
STAILQ_ENTRY(spdk_bdev_io) buf_link;
|
||||
} internal;
|
||||
|
||||
/**
|
||||
* Per I/O context for use by the bdev module.
|
||||
*/
|
||||
|
@ -359,7 +359,7 @@ spdk_bdev_io_put_buf(struct spdk_bdev_io *bdev_io)
|
||||
spdk_mempool_put(pool, buf);
|
||||
} else {
|
||||
tmp = STAILQ_FIRST(stailq);
|
||||
STAILQ_REMOVE_HEAD(stailq, buf_link);
|
||||
STAILQ_REMOVE_HEAD(stailq, internal.buf_link);
|
||||
spdk_bdev_io_set_buf(tmp, buf);
|
||||
}
|
||||
}
|
||||
@ -397,7 +397,7 @@ spdk_bdev_io_get_buf(struct spdk_bdev_io *bdev_io, spdk_bdev_io_get_buf_cb cb, u
|
||||
buf = spdk_mempool_get(pool);
|
||||
|
||||
if (!buf) {
|
||||
STAILQ_INSERT_TAIL(stailq, bdev_io, buf_link);
|
||||
STAILQ_INSERT_TAIL(stailq, bdev_io, internal.buf_link);
|
||||
} else {
|
||||
spdk_bdev_io_set_buf(bdev_io, buf);
|
||||
}
|
||||
@ -485,7 +485,7 @@ spdk_bdev_mgmt_channel_destroy(void *io_device, void *ctx_buf)
|
||||
|
||||
while (!STAILQ_EMPTY(&ch->per_thread_cache)) {
|
||||
bdev_io = STAILQ_FIRST(&ch->per_thread_cache);
|
||||
STAILQ_REMOVE_HEAD(&ch->per_thread_cache, buf_link);
|
||||
STAILQ_REMOVE_HEAD(&ch->per_thread_cache, internal.buf_link);
|
||||
ch->per_thread_cache_count--;
|
||||
spdk_mempool_put(g_bdev_mgr.bdev_io_pool, (void *)bdev_io);
|
||||
}
|
||||
@ -820,7 +820,7 @@ spdk_bdev_get_io(struct spdk_bdev_channel *channel)
|
||||
|
||||
if (ch->per_thread_cache_count > 0) {
|
||||
bdev_io = STAILQ_FIRST(&ch->per_thread_cache);
|
||||
STAILQ_REMOVE_HEAD(&ch->per_thread_cache, buf_link);
|
||||
STAILQ_REMOVE_HEAD(&ch->per_thread_cache, internal.buf_link);
|
||||
ch->per_thread_cache_count--;
|
||||
} else {
|
||||
bdev_io = spdk_mempool_get(g_bdev_mgr.bdev_io_pool);
|
||||
@ -844,7 +844,7 @@ spdk_bdev_put_io(struct spdk_bdev_io *bdev_io)
|
||||
|
||||
if (ch->per_thread_cache_count < SPDK_BDEV_IO_CACHE_SIZE) {
|
||||
ch->per_thread_cache_count++;
|
||||
STAILQ_INSERT_TAIL(&ch->per_thread_cache, bdev_io, buf_link);
|
||||
STAILQ_INSERT_TAIL(&ch->per_thread_cache, bdev_io, internal.buf_link);
|
||||
} else {
|
||||
spdk_mempool_put(g_bdev_mgr.bdev_io_pool, (void *)bdev_io);
|
||||
}
|
||||
@ -1161,7 +1161,7 @@ spdk_bdev_channel_create(void *io_device, void *ctx_buf)
|
||||
|
||||
/*
|
||||
* Abort I/O that are waiting on a data buffer. These types of I/O are
|
||||
* linked using the spdk_bdev_io buf_link TAILQ_ENTRY.
|
||||
* linked using the spdk_bdev_io internal.buf_link TAILQ_ENTRY.
|
||||
*/
|
||||
static void
|
||||
_spdk_bdev_abort_buf_io(bdev_io_stailq_t *queue, struct spdk_bdev_channel *ch)
|
||||
@ -1173,11 +1173,11 @@ _spdk_bdev_abort_buf_io(bdev_io_stailq_t *queue, struct spdk_bdev_channel *ch)
|
||||
|
||||
while (!STAILQ_EMPTY(queue)) {
|
||||
bdev_io = STAILQ_FIRST(queue);
|
||||
STAILQ_REMOVE_HEAD(queue, buf_link);
|
||||
STAILQ_REMOVE_HEAD(queue, internal.buf_link);
|
||||
if (bdev_io->ch == ch) {
|
||||
spdk_bdev_io_complete(bdev_io, SPDK_BDEV_IO_STATUS_FAILED);
|
||||
} else {
|
||||
STAILQ_INSERT_TAIL(&tmp, bdev_io, buf_link);
|
||||
STAILQ_INSERT_TAIL(&tmp, bdev_io, internal.buf_link);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user