bdev: encapsulate buffer members of spdk_bdev_io
The members of spdk_bdev_io which are associated with the data buffer should only be modified by calling functions in bdev.c Change-Id: Icacb7f7387d626cf6834480b572e2f31b48666e1 Signed-off-by: Seth Howell <seth.howell@intel.com> Reviewed-on: https://review.gerrithub.io/416054 Tested-by: SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
parent
c5b861fcec
commit
30dbeae891
@ -398,15 +398,6 @@ struct spdk_bdev_io {
|
|||||||
} nvme_passthru;
|
} nvme_passthru;
|
||||||
} u;
|
} u;
|
||||||
|
|
||||||
/** bdev allocated memory associated with this request */
|
|
||||||
void *buf;
|
|
||||||
|
|
||||||
/** requested size of the buffer associated with this I/O */
|
|
||||||
uint64_t buf_len;
|
|
||||||
|
|
||||||
/** Callback for when buf is allocated */
|
|
||||||
spdk_bdev_io_get_buf_cb get_buf_cb;
|
|
||||||
|
|
||||||
/** Member used for linking child I/Os together. */
|
/** Member used for linking child I/Os together. */
|
||||||
TAILQ_ENTRY(spdk_bdev_io) link;
|
TAILQ_ENTRY(spdk_bdev_io) link;
|
||||||
|
|
||||||
@ -417,6 +408,15 @@ struct spdk_bdev_io {
|
|||||||
* must not read or write to these fields.
|
* must not read or write to these fields.
|
||||||
*/
|
*/
|
||||||
struct __bdev_io_internal_fields {
|
struct __bdev_io_internal_fields {
|
||||||
|
/** bdev allocated memory associated with this request */
|
||||||
|
void *buf;
|
||||||
|
|
||||||
|
/** requested size of the buffer associated with this I/O */
|
||||||
|
uint64_t buf_len;
|
||||||
|
|
||||||
|
/** 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. */
|
/** Entry to the list need_buf of struct spdk_bdev. */
|
||||||
STAILQ_ENTRY(spdk_bdev_io) buf_link;
|
STAILQ_ENTRY(spdk_bdev_io) buf_link;
|
||||||
} internal;
|
} internal;
|
||||||
|
@ -380,14 +380,14 @@ spdk_bdev_get_by_name(const char *bdev_name)
|
|||||||
static void
|
static void
|
||||||
spdk_bdev_io_set_buf(struct spdk_bdev_io *bdev_io, void *buf)
|
spdk_bdev_io_set_buf(struct spdk_bdev_io *bdev_io, void *buf)
|
||||||
{
|
{
|
||||||
assert(bdev_io->get_buf_cb != NULL);
|
assert(bdev_io->internal.get_buf_cb != NULL);
|
||||||
assert(buf != NULL);
|
assert(buf != NULL);
|
||||||
assert(bdev_io->u.bdev.iovs != NULL);
|
assert(bdev_io->u.bdev.iovs != NULL);
|
||||||
|
|
||||||
bdev_io->buf = buf;
|
bdev_io->internal.buf = buf;
|
||||||
bdev_io->u.bdev.iovs[0].iov_base = (void *)((unsigned long)((char *)buf + 512) & ~511UL);
|
bdev_io->u.bdev.iovs[0].iov_base = (void *)((unsigned long)((char *)buf + 512) & ~511UL);
|
||||||
bdev_io->u.bdev.iovs[0].iov_len = bdev_io->buf_len;
|
bdev_io->u.bdev.iovs[0].iov_len = bdev_io->internal.buf_len;
|
||||||
bdev_io->get_buf_cb(bdev_io->ch->channel, bdev_io);
|
bdev_io->internal.get_buf_cb(bdev_io->ch->channel, bdev_io);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -401,10 +401,10 @@ spdk_bdev_io_put_buf(struct spdk_bdev_io *bdev_io)
|
|||||||
|
|
||||||
assert(bdev_io->u.bdev.iovcnt == 1);
|
assert(bdev_io->u.bdev.iovcnt == 1);
|
||||||
|
|
||||||
buf = bdev_io->buf;
|
buf = bdev_io->internal.buf;
|
||||||
ch = bdev_io->ch->shared_resource->mgmt_ch;
|
ch = bdev_io->ch->shared_resource->mgmt_ch;
|
||||||
|
|
||||||
if (bdev_io->buf_len <= SPDK_BDEV_SMALL_BUF_MAX_SIZE) {
|
if (bdev_io->internal.buf_len <= SPDK_BDEV_SMALL_BUF_MAX_SIZE) {
|
||||||
pool = g_bdev_mgr.buf_small_pool;
|
pool = g_bdev_mgr.buf_small_pool;
|
||||||
stailq = &ch->need_buf_small;
|
stailq = &ch->need_buf_small;
|
||||||
} else {
|
} else {
|
||||||
@ -441,8 +441,8 @@ spdk_bdev_io_get_buf(struct spdk_bdev_io *bdev_io, spdk_bdev_io_get_buf_cb cb, u
|
|||||||
assert(len <= SPDK_BDEV_LARGE_BUF_MAX_SIZE);
|
assert(len <= SPDK_BDEV_LARGE_BUF_MAX_SIZE);
|
||||||
mgmt_ch = bdev_io->ch->shared_resource->mgmt_ch;
|
mgmt_ch = bdev_io->ch->shared_resource->mgmt_ch;
|
||||||
|
|
||||||
bdev_io->buf_len = len;
|
bdev_io->internal.buf_len = len;
|
||||||
bdev_io->get_buf_cb = cb;
|
bdev_io->internal.get_buf_cb = cb;
|
||||||
if (len <= SPDK_BDEV_SMALL_BUF_MAX_SIZE) {
|
if (len <= SPDK_BDEV_SMALL_BUF_MAX_SIZE) {
|
||||||
pool = g_bdev_mgr.buf_small_pool;
|
pool = g_bdev_mgr.buf_small_pool;
|
||||||
stailq = &mgmt_ch->need_buf_small;
|
stailq = &mgmt_ch->need_buf_small;
|
||||||
@ -947,7 +947,7 @@ spdk_bdev_free_io(struct spdk_bdev_io *bdev_io)
|
|||||||
assert(bdev_io != NULL);
|
assert(bdev_io != NULL);
|
||||||
assert(bdev_io->status != SPDK_BDEV_IO_STATUS_PENDING);
|
assert(bdev_io->status != SPDK_BDEV_IO_STATUS_PENDING);
|
||||||
|
|
||||||
if (bdev_io->buf != NULL) {
|
if (bdev_io->internal.buf != NULL) {
|
||||||
spdk_bdev_io_put_buf(bdev_io);
|
spdk_bdev_io_put_buf(bdev_io);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1097,7 +1097,7 @@ spdk_bdev_io_init(struct spdk_bdev_io *bdev_io,
|
|||||||
bdev_io->cb = cb;
|
bdev_io->cb = cb;
|
||||||
bdev_io->status = SPDK_BDEV_IO_STATUS_PENDING;
|
bdev_io->status = SPDK_BDEV_IO_STATUS_PENDING;
|
||||||
bdev_io->in_submit_request = false;
|
bdev_io->in_submit_request = false;
|
||||||
bdev_io->buf = NULL;
|
bdev_io->internal.buf = NULL;
|
||||||
bdev_io->io_submit_ch = NULL;
|
bdev_io->io_submit_ch = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user