From 30dbeae891b3a6f087318dd315ac374dfdcd952c Mon Sep 17 00:00:00 2001 From: Seth Howell Date: Tue, 19 Jun 2018 15:08:31 -0700 Subject: [PATCH] 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 Reviewed-on: https://review.gerrithub.io/416054 Tested-by: SPDK Automated Test System Reviewed-by: Jim Harris Reviewed-by: Ben Walker --- include/spdk/bdev_module.h | 18 +++++++++--------- lib/bdev/bdev.c | 20 ++++++++++---------- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/include/spdk/bdev_module.h b/include/spdk/bdev_module.h index af195e67c..e11819f8a 100644 --- a/include/spdk/bdev_module.h +++ b/include/spdk/bdev_module.h @@ -398,15 +398,6 @@ struct spdk_bdev_io { } nvme_passthru; } 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. */ TAILQ_ENTRY(spdk_bdev_io) link; @@ -417,6 +408,15 @@ struct spdk_bdev_io { * must not read or write to these 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. */ STAILQ_ENTRY(spdk_bdev_io) buf_link; } internal; diff --git a/lib/bdev/bdev.c b/lib/bdev/bdev.c index a1de0ea0a..3003ac654 100644 --- a/lib/bdev/bdev.c +++ b/lib/bdev/bdev.c @@ -380,14 +380,14 @@ spdk_bdev_get_by_name(const char *bdev_name) static void 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(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_len = bdev_io->buf_len; - bdev_io->get_buf_cb(bdev_io->ch->channel, bdev_io); + bdev_io->u.bdev.iovs[0].iov_len = bdev_io->internal.buf_len; + bdev_io->internal.get_buf_cb(bdev_io->ch->channel, bdev_io); } static void @@ -401,10 +401,10 @@ spdk_bdev_io_put_buf(struct spdk_bdev_io *bdev_io) assert(bdev_io->u.bdev.iovcnt == 1); - buf = bdev_io->buf; + buf = bdev_io->internal.buf; 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; stailq = &ch->need_buf_small; } 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); mgmt_ch = bdev_io->ch->shared_resource->mgmt_ch; - bdev_io->buf_len = len; - bdev_io->get_buf_cb = cb; + bdev_io->internal.buf_len = len; + bdev_io->internal.get_buf_cb = cb; if (len <= SPDK_BDEV_SMALL_BUF_MAX_SIZE) { pool = g_bdev_mgr.buf_small_pool; 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->status != SPDK_BDEV_IO_STATUS_PENDING); - if (bdev_io->buf != NULL) { + if (bdev_io->internal.buf != NULL) { 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->status = SPDK_BDEV_IO_STATUS_PENDING; bdev_io->in_submit_request = false; - bdev_io->buf = NULL; + bdev_io->internal.buf = NULL; bdev_io->io_submit_ch = NULL; }