bdev: Factor out bdev_io_get_buf_complete

Next patches enable memory domains async pull/push
functionality.
Previously buffer from internal bdev pool was passed
as func argument to bdev_io_get_buf_complete. Now
since bdev_io_get_buf_complete can be called
asynchronously, this buffer is stored in
bdev_io->internal.buf
Also move bdev_io_get_buf_complete up in file
to minimize changes in next patches

Signed-off-by: Alexey Marchuk <alexeymar@mellanox.com>
Change-Id: I6e9d3b35dc85e0e88703dd24a4b4da837adc5b74
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/11165
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com>
Community-CI: Mellanox Build Bot
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Shuhei Matsumoto <smatsumoto@nvidia.com>
This commit is contained in:
Alexey Marchuk 2022-01-19 17:34:41 +03:00 committed by Jim Harris
parent 44f337e3ce
commit a33d4af6b1

View File

@ -832,6 +832,24 @@ _copy_buf_to_iovs(struct iovec *iovs, int iovcnt, void *buf, size_t buf_len)
}
}
static void
bdev_io_get_buf_complete(struct spdk_bdev_io *bdev_io, bool status)
{
struct spdk_io_channel *ch = spdk_bdev_io_get_io_channel(bdev_io);
void *buf;
if (spdk_unlikely(bdev_io->internal.get_aux_buf_cb != NULL)) {
buf = bdev_io->internal.buf;
bdev_io->internal.buf = NULL;
bdev_io->internal.get_aux_buf_cb(ch, bdev_io, buf);
bdev_io->internal.get_aux_buf_cb = NULL;
} else {
assert(bdev_io->internal.get_buf_cb != NULL);
bdev_io->internal.get_buf_cb(ch, bdev_io, status);
bdev_io->internal.get_buf_cb = NULL;
}
}
static void
_bdev_io_set_bounce_buf(struct spdk_bdev_io *bdev_io, void *buf, size_t len)
{
@ -863,22 +881,6 @@ _bdev_io_set_bounce_md_buf(struct spdk_bdev_io *bdev_io, void *md_buf, size_t le
}
}
static void
bdev_io_get_buf_complete(struct spdk_bdev_io *bdev_io, void *buf, bool status)
{
struct spdk_io_channel *ch = spdk_bdev_io_get_io_channel(bdev_io);
if (spdk_unlikely(bdev_io->internal.get_aux_buf_cb != NULL)) {
bdev_io->internal.get_aux_buf_cb(ch, bdev_io, buf);
bdev_io->internal.get_aux_buf_cb = NULL;
} else {
assert(bdev_io->internal.get_buf_cb != NULL);
bdev_io->internal.buf = buf;
bdev_io->internal.get_buf_cb(ch, bdev_io, status);
bdev_io->internal.get_buf_cb = NULL;
}
}
static void
_bdev_io_set_buf(struct spdk_bdev_io *bdev_io, void *buf, uint64_t len)
{
@ -887,8 +889,10 @@ _bdev_io_set_buf(struct spdk_bdev_io *bdev_io, void *buf, uint64_t len)
uint64_t md_len, alignment;
void *aligned_buf;
bdev_io->internal.buf = buf;
if (spdk_unlikely(bdev_io->internal.get_aux_buf_cb != NULL)) {
bdev_io_get_buf_complete(bdev_io, buf, true);
bdev_io_get_buf_complete(bdev_io, true);
return;
}
@ -914,7 +918,7 @@ _bdev_io_set_buf(struct spdk_bdev_io *bdev_io, void *buf, uint64_t len)
spdk_bdev_io_set_md_buf(bdev_io, aligned_buf, md_len);
}
}
bdev_io_get_buf_complete(bdev_io, buf, true);
bdev_io_get_buf_complete(bdev_io, true);
}
static void
@ -1060,7 +1064,7 @@ bdev_io_get_buf(struct spdk_bdev_io *bdev_io, uint64_t len)
SPDK_BDEV_POOL_ALIGNMENT) {
SPDK_ERRLOG("Length + alignment %" PRIu64 " is larger than allowed\n",
len + alignment);
bdev_io_get_buf_complete(bdev_io, NULL, false);
bdev_io_get_buf_complete(bdev_io, false);
return;
}