From 9d73eed8a67ddb07685ee8f37c04acd0b07c7ebd Mon Sep 17 00:00:00 2001 From: Ben Walker Date: Tue, 4 Apr 2017 14:10:00 -0700 Subject: [PATCH] bdev: Consistently pass user context to fn_table calls Some calls were passing bdev->ctxt, some calls just bdev. In most of our implementations those are the same pointer, but they aren't necessarily. Change-Id: If2d19f9eef059aded10a917ffb270c1dc4a8dc41 Signed-off-by: Ben Walker --- include/spdk_internal/bdev.h | 8 ++++---- lib/bdev/aio/blockdev_aio.c | 12 +++++++----- lib/bdev/aio/blockdev_aio.h | 2 +- lib/bdev/bdev.c | 6 +++--- lib/bdev/malloc/blockdev_malloc.c | 10 +++++----- lib/bdev/nvme/blockdev_nvme.c | 16 ++++++++-------- lib/bdev/rbd/blockdev_rbd.c | 8 ++++---- lib/bdev/split/vbdev_split.c | 16 ++++++++-------- 8 files changed, 40 insertions(+), 38 deletions(-) diff --git a/include/spdk_internal/bdev.h b/include/spdk_internal/bdev.h index 295c15ab0..30bc98c82 100644 --- a/include/spdk_internal/bdev.h +++ b/include/spdk_internal/bdev.h @@ -129,16 +129,16 @@ struct spdk_bdev_module_if { */ struct spdk_bdev_fn_table { /** Destroy the backend block device object */ - int (*destruct)(struct spdk_bdev *bdev); + int (*destruct)(void *ctx); /** Process the IO. */ void (*submit_request)(struct spdk_bdev_io *); /** Check if the block device supports a specific I/O type. */ - bool (*io_type_supported)(struct spdk_bdev *bdev, enum spdk_bdev_io_type); + bool (*io_type_supported)(void *ctx, enum spdk_bdev_io_type); /** Get an I/O channel for the specific bdev for the calling thread. */ - struct spdk_io_channel *(*get_io_channel)(struct spdk_bdev *bdev, uint32_t priority); + struct spdk_io_channel *(*get_io_channel)(void *ctx, uint32_t priority); /** * Output driver-specific configuration to a JSON stream. Optional - may be NULL. @@ -147,7 +147,7 @@ struct spdk_bdev_fn_table { * driver should write a name (based on the driver name) followed by a JSON value * (most likely another nested object). */ - int (*dump_config_json)(struct spdk_bdev *bdev, struct spdk_json_write_ctx *w); + int (*dump_config_json)(void *ctx, struct spdk_json_write_ctx *w); }; void spdk_bdev_register(struct spdk_bdev *bdev); diff --git a/lib/bdev/aio/blockdev_aio.c b/lib/bdev/aio/blockdev_aio.c index 03ac2540d..dbe403251 100644 --- a/lib/bdev/aio/blockdev_aio.c +++ b/lib/bdev/aio/blockdev_aio.c @@ -160,9 +160,9 @@ blockdev_aio_flush(struct file_disk *fdisk, struct blockdev_aio_task *aio_task, } static int -blockdev_aio_destruct(struct spdk_bdev *bdev) +blockdev_aio_destruct(void *ctx) { - struct file_disk *fdisk = (struct file_disk *)bdev; + struct file_disk *fdisk = ctx; int rc = 0; rc = blockdev_aio_close(fdisk); @@ -281,7 +281,7 @@ static void blockdev_aio_submit_request(struct spdk_bdev_io *bdev_io) } static bool -blockdev_aio_io_type_supported(struct spdk_bdev *bdev, enum spdk_bdev_io_type io_type) +blockdev_aio_io_type_supported(void *ctx, enum spdk_bdev_io_type io_type) { switch (io_type) { case SPDK_BDEV_IO_TYPE_READ: @@ -320,9 +320,11 @@ blockdev_aio_destroy_cb(void *io_device, void *ctx_buf) } static struct spdk_io_channel * -blockdev_aio_get_io_channel(struct spdk_bdev *bdev, uint32_t priority) +blockdev_aio_get_io_channel(void *ctx, uint32_t priority) { - return spdk_get_io_channel(bdev, priority, false, NULL); + struct file_disk *fdisk = ctx; + + return spdk_get_io_channel(&fdisk->disk, priority, false, NULL); } static const struct spdk_bdev_fn_table aio_fn_table = { diff --git a/lib/bdev/aio/blockdev_aio.h b/lib/bdev/aio/blockdev_aio.h index 0381a12ec..1e09a44ea 100644 --- a/lib/bdev/aio/blockdev_aio.h +++ b/lib/bdev/aio/blockdev_aio.h @@ -56,7 +56,7 @@ struct blockdev_aio_io_channel { }; struct file_disk { - struct spdk_bdev disk; /* this must be first element */ + struct spdk_bdev disk; const char *file; int fd; char disk_name[SPDK_BDEV_MAX_NAME_LENGTH]; diff --git a/lib/bdev/bdev.c b/lib/bdev/bdev.c index 2092a1c7c..566dd8bef 100644 --- a/lib/bdev/bdev.c +++ b/lib/bdev/bdev.c @@ -498,14 +498,14 @@ spdk_bdev_get_child_io(struct spdk_bdev_io *parent, bool spdk_bdev_io_type_supported(struct spdk_bdev *bdev, enum spdk_bdev_io_type io_type) { - return bdev->fn_table->io_type_supported(bdev, io_type); + return bdev->fn_table->io_type_supported(bdev->ctxt, io_type); } int spdk_bdev_dump_config_json(struct spdk_bdev *bdev, struct spdk_json_write_ctx *w) { if (bdev->fn_table->dump_config_json) { - return bdev->fn_table->dump_config_json(bdev, w); + return bdev->fn_table->dump_config_json(bdev->ctxt, w); } return 0; @@ -514,7 +514,7 @@ spdk_bdev_dump_config_json(struct spdk_bdev *bdev, struct spdk_json_write_ctx *w struct spdk_io_channel * spdk_bdev_get_io_channel(struct spdk_bdev *bdev, uint32_t priority) { - return bdev->fn_table->get_io_channel(bdev, priority); + return bdev->fn_table->get_io_channel(bdev->ctxt, priority); } static int diff --git a/lib/bdev/malloc/blockdev_malloc.c b/lib/bdev/malloc/blockdev_malloc.c index 465f6c008..ab39eb0d1 100644 --- a/lib/bdev/malloc/blockdev_malloc.c +++ b/lib/bdev/malloc/blockdev_malloc.c @@ -49,7 +49,7 @@ #define MALLOC_MAX_UNMAP_BDESC 1 struct malloc_disk { - struct spdk_bdev disk; /* this must be the first element */ + struct spdk_bdev disk; void *malloc_buf; struct malloc_disk *next; }; @@ -126,9 +126,9 @@ blockdev_malloc_delete_from_list(struct malloc_disk *malloc_disk) } static int -blockdev_malloc_destruct(struct spdk_bdev *bdev) +blockdev_malloc_destruct(void *ctx) { - struct malloc_disk *malloc_disk = (struct malloc_disk *)bdev; + struct malloc_disk *malloc_disk = ctx; blockdev_malloc_delete_from_list(malloc_disk); spdk_free(malloc_disk->malloc_buf); spdk_free(malloc_disk); @@ -336,7 +336,7 @@ static void blockdev_malloc_submit_request(struct spdk_bdev_io *bdev_io) } static bool -blockdev_malloc_io_type_supported(struct spdk_bdev *bdev, enum spdk_bdev_io_type io_type) +blockdev_malloc_io_type_supported(void *ctx, enum spdk_bdev_io_type io_type) { switch (io_type) { case SPDK_BDEV_IO_TYPE_READ: @@ -352,7 +352,7 @@ blockdev_malloc_io_type_supported(struct spdk_bdev *bdev, enum spdk_bdev_io_type } static struct spdk_io_channel * -blockdev_malloc_get_io_channel(struct spdk_bdev *bdev, uint32_t priority) +blockdev_malloc_get_io_channel(void *ctx, uint32_t priority) { return spdk_copy_engine_get_io_channel(priority); } diff --git a/lib/bdev/nvme/blockdev_nvme.c b/lib/bdev/nvme/blockdev_nvme.c index f9de9fe7e..17b431fc5 100644 --- a/lib/bdev/nvme/blockdev_nvme.c +++ b/lib/bdev/nvme/blockdev_nvme.c @@ -197,9 +197,9 @@ bdev_nvme_poll_adminq(void *arg) } static int -bdev_nvme_destruct(struct spdk_bdev *bdev) +bdev_nvme_destruct(void *ctx) { - struct nvme_bdev *nvme_disk = (struct nvme_bdev *)bdev; + struct nvme_bdev *nvme_disk = ctx; struct nvme_ctrlr *nvme_ctrlr = nvme_disk->nvme_ctrlr; pthread_mutex_lock(&g_bdev_nvme_mutex); @@ -321,9 +321,9 @@ bdev_nvme_submit_request(struct spdk_bdev_io *bdev_io) } static bool -bdev_nvme_io_type_supported(struct spdk_bdev *bdev, enum spdk_bdev_io_type io_type) +bdev_nvme_io_type_supported(void *ctx, enum spdk_bdev_io_type io_type) { - struct nvme_bdev *nbdev = (struct nvme_bdev *)bdev; + struct nvme_bdev *nbdev = ctx; const struct spdk_nvme_ctrlr_data *cdata; switch (io_type) { @@ -369,17 +369,17 @@ bdev_nvme_destroy_cb(void *io_device, void *ctx_buf) } static struct spdk_io_channel * -bdev_nvme_get_io_channel(struct spdk_bdev *bdev, uint32_t priority) +bdev_nvme_get_io_channel(void *ctx, uint32_t priority) { - struct nvme_bdev *nvme_bdev = (struct nvme_bdev *)bdev; + struct nvme_bdev *nvme_bdev = ctx; return spdk_get_io_channel(nvme_bdev->nvme_ctrlr->ctrlr, priority, false, NULL); } static int -bdev_nvme_dump_config_json(struct spdk_bdev *bdev, struct spdk_json_write_ctx *w) +bdev_nvme_dump_config_json(void *ctx, struct spdk_json_write_ctx *w) { - struct nvme_bdev *nvme_bdev = (struct nvme_bdev *)bdev; + struct nvme_bdev *nvme_bdev = ctx; struct nvme_ctrlr *nvme_ctrlr = nvme_bdev->nvme_ctrlr; const struct spdk_nvme_ctrlr_data *cdata; struct spdk_nvme_ns *ns; diff --git a/lib/bdev/rbd/blockdev_rbd.c b/lib/bdev/rbd/blockdev_rbd.c index 1a981cd61..391248755 100644 --- a/lib/bdev/rbd/blockdev_rbd.c +++ b/lib/bdev/rbd/blockdev_rbd.c @@ -254,7 +254,7 @@ blockdev_rbd_flush(struct blockdev_rbd *disk, struct spdk_io_channel *ch, } static int -blockdev_rbd_destruct(struct spdk_bdev *bdev) +blockdev_rbd_destruct(void *ctx) { return 0; } @@ -311,7 +311,7 @@ static void blockdev_rbd_submit_request(struct spdk_bdev_io *bdev_io) } static bool -blockdev_rbd_io_type_supported(struct spdk_bdev *bdev, enum spdk_bdev_io_type io_type) +blockdev_rbd_io_type_supported(void *ctx, enum spdk_bdev_io_type io_type) { switch (io_type) { case SPDK_BDEV_IO_TYPE_READ: @@ -469,9 +469,9 @@ blockdev_rbd_destroy_cb(void *io_device, void *ctx_buf) } static struct spdk_io_channel * -blockdev_rbd_get_io_channel(struct spdk_bdev *bdev, uint32_t priority) +blockdev_rbd_get_io_channel(void *ctx, uint32_t priority) { - struct blockdev_rbd *rbd_bdev = (struct blockdev_rbd *)bdev; + struct blockdev_rbd *rbd_bdev = ctx; return spdk_get_io_channel(rbd_bdev, priority, false, NULL); } diff --git a/lib/bdev/split/vbdev_split.c b/lib/bdev/split/vbdev_split.c index 16718954c..fdfffe99e 100644 --- a/lib/bdev/split/vbdev_split.c +++ b/lib/bdev/split/vbdev_split.c @@ -181,34 +181,34 @@ vbdev_split_free(struct split_disk *split_disk) } static int -vbdev_split_destruct(struct spdk_bdev *bdev) +vbdev_split_destruct(void *ctx) { - struct split_disk *split_disk = (struct split_disk *)bdev; + struct split_disk *split_disk = ctx; vbdev_split_free(split_disk); return 0; } static bool -vbdev_split_io_type_supported(struct spdk_bdev *bdev, enum spdk_bdev_io_type io_type) +vbdev_split_io_type_supported(void *ctx, enum spdk_bdev_io_type io_type) { - struct split_disk *split_disk = (struct split_disk *)bdev; + struct split_disk *split_disk = ctx; return split_disk->base_bdev->fn_table->io_type_supported(split_disk->base_bdev, io_type); } static struct spdk_io_channel * -vbdev_split_get_io_channel(struct spdk_bdev *bdev, uint32_t priority) +vbdev_split_get_io_channel(void *ctx, uint32_t priority) { - struct split_disk *split_disk = (struct split_disk *)bdev; + struct split_disk *split_disk = ctx; return split_disk->base_bdev->fn_table->get_io_channel(split_disk->base_bdev, priority); } static int -vbdev_split_dump_config_json(struct spdk_bdev *bdev, struct spdk_json_write_ctx *w) +vbdev_split_dump_config_json(void *ctx, struct spdk_json_write_ctx *w) { - struct split_disk *split_disk = (struct split_disk *)bdev; + struct split_disk *split_disk = ctx; spdk_json_write_name(w, "split"); spdk_json_write_object_begin(w);