Commit 30dbeae8 authored by Seth Howell's avatar Seth Howell Committed by Jim Harris
Browse files

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: default avatarSeth Howell <seth.howell@intel.com>
Reviewed-on: https://review.gerrithub.io/416054


Tested-by: default avatarSPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
parent c5b861fc
Loading
Loading
Loading
Loading
+9 −9
Original line number Diff line number Diff line
@@ -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;
+10 −10
Original line number Diff line number Diff line
@@ -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;
}