gpt: add support for bdev_io_wait when no memory
according to commit: bdev: add spdk_bdev_queue_io_wait This patch will make io_wait to support gpt Change-Id: I73795756f232f1b596b65ecbc7e3ba4d990c9fe0 Signed-off-by: Ni Xun <nixun@baidu.com> Signed-off-by: Li Lin <lilin24@baidu.com> Signed-off-by: Zhang Yu <zhangyu31@baidu.com> Reviewed-on: https://review.gerrithub.io/428338 Chandler-Test-Pool: SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
This commit is contained in:
parent
3785a4d83b
commit
08ed55bb1d
@ -51,10 +51,12 @@
|
|||||||
|
|
||||||
static int vbdev_gpt_init(void);
|
static int vbdev_gpt_init(void);
|
||||||
static void vbdev_gpt_examine(struct spdk_bdev *bdev);
|
static void vbdev_gpt_examine(struct spdk_bdev *bdev);
|
||||||
|
static int vbdev_gpt_get_ctx_size(void);
|
||||||
|
|
||||||
static struct spdk_bdev_module gpt_if = {
|
static struct spdk_bdev_module gpt_if = {
|
||||||
.name = "gpt",
|
.name = "gpt",
|
||||||
.module_init = vbdev_gpt_init,
|
.module_init = vbdev_gpt_init,
|
||||||
|
.get_ctx_size = vbdev_gpt_get_ctx_size,
|
||||||
.examine_disk = vbdev_gpt_examine,
|
.examine_disk = vbdev_gpt_examine,
|
||||||
|
|
||||||
};
|
};
|
||||||
@ -79,6 +81,14 @@ struct gpt_channel {
|
|||||||
struct spdk_bdev_part_channel part_ch;
|
struct spdk_bdev_part_channel part_ch;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct gpt_io {
|
||||||
|
struct spdk_io_channel *ch;
|
||||||
|
struct spdk_bdev_io *bdev_io;
|
||||||
|
|
||||||
|
/* for bdev_io_wait */
|
||||||
|
struct spdk_bdev_io_wait_entry bdev_io_wait;
|
||||||
|
};
|
||||||
|
|
||||||
static SPDK_BDEV_PART_TAILQ g_gpt_disks = TAILQ_HEAD_INITIALIZER(g_gpt_disks);
|
static SPDK_BDEV_PART_TAILQ g_gpt_disks = TAILQ_HEAD_INITIALIZER(g_gpt_disks);
|
||||||
|
|
||||||
static bool g_gpt_disabled;
|
static bool g_gpt_disabled;
|
||||||
@ -156,16 +166,49 @@ vbdev_gpt_destruct(void *ctx)
|
|||||||
return spdk_bdev_part_free(&gpt_disk->part);
|
return spdk_bdev_part_free(&gpt_disk->part);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
vbdev_gpt_resubmit_request(void *arg)
|
||||||
|
{
|
||||||
|
struct gpt_io *io = (struct gpt_io *)arg;
|
||||||
|
|
||||||
|
vbdev_gpt_submit_request(io->ch, io->bdev_io);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
vbdev_gpt_queue_io(struct gpt_io *io)
|
||||||
|
{
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
io->bdev_io_wait.bdev = io->bdev_io->bdev;
|
||||||
|
io->bdev_io_wait.cb_fn = vbdev_gpt_resubmit_request;
|
||||||
|
io->bdev_io_wait.cb_arg = io;
|
||||||
|
|
||||||
|
rc = spdk_bdev_queue_io_wait(io->bdev_io->bdev,
|
||||||
|
io->ch, &io->bdev_io_wait);
|
||||||
|
if (rc != 0) {
|
||||||
|
SPDK_ERRLOG("Queue io failed in vbdev_gpt_queue_io, rc=%d.\n", rc);
|
||||||
|
spdk_bdev_io_complete(io->bdev_io, SPDK_BDEV_IO_STATUS_FAILED);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
vbdev_gpt_submit_request(struct spdk_io_channel *_ch, struct spdk_bdev_io *bdev_io)
|
vbdev_gpt_submit_request(struct spdk_io_channel *_ch, struct spdk_bdev_io *bdev_io)
|
||||||
{
|
{
|
||||||
struct gpt_channel *ch = spdk_io_channel_get_ctx(_ch);
|
struct gpt_channel *ch = spdk_io_channel_get_ctx(_ch);
|
||||||
|
struct gpt_io *io = (struct gpt_io *)bdev_io->driver_ctx;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
rc = spdk_bdev_part_submit_request(&ch->part_ch, bdev_io);
|
rc = spdk_bdev_part_submit_request(&ch->part_ch, bdev_io);
|
||||||
if (rc) {
|
if (rc) {
|
||||||
SPDK_ERRLOG("gpt: error on bdev_io submission, rc=%d.\n", rc);
|
if (rc == -ENOMEM) {
|
||||||
spdk_bdev_io_complete(bdev_io, SPDK_BDEV_IO_STATUS_FAILED);
|
SPDK_DEBUGLOG(SPDK_LOG_VBDEV_GPT, "gpt: no memory, queue io\n");
|
||||||
|
io->ch = _ch;
|
||||||
|
io->bdev_io = bdev_io;
|
||||||
|
vbdev_gpt_queue_io(io);
|
||||||
|
} else {
|
||||||
|
SPDK_ERRLOG("gpt: error on bdev_io submission, rc=%d.\n", rc);
|
||||||
|
spdk_bdev_io_complete(bdev_io, SPDK_BDEV_IO_STATUS_FAILED);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -384,6 +427,12 @@ vbdev_gpt_init(void)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
vbdev_gpt_get_ctx_size(void)
|
||||||
|
{
|
||||||
|
return sizeof(struct gpt_io);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
vbdev_gpt_examine(struct spdk_bdev *bdev)
|
vbdev_gpt_examine(struct spdk_bdev *bdev)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user