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:
parent
44f337e3ce
commit
a33d4af6b1
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user