bdev/aio: Add support for blockdev_aio_get_spdk_running_config().
Change-Id: I7458a89c89b0605e5806768c03ef519fc222bce5 Signed-off-by: Chunyang Hui <Chunyang.hui@intel.com> Reviewed-on: https://review.gerrithub.io/375256 Tested-by: SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by: GangCao <gang.cao@intel.com> Reviewed-by: Changpeng Liu <changpeng.liu@intel.com> Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
This commit is contained in:
parent
3860fa7ef6
commit
116c494fc8
@ -47,6 +47,8 @@
|
|||||||
|
|
||||||
static int bdev_aio_initialize(void);
|
static int bdev_aio_initialize(void);
|
||||||
static void aio_free_disk(struct file_disk *fdisk);
|
static void aio_free_disk(struct file_disk *fdisk);
|
||||||
|
static void bdev_aio_get_spdk_running_config(FILE *fp);
|
||||||
|
static TAILQ_HEAD(, file_disk) g_aio_disk_head;
|
||||||
|
|
||||||
#define SPDK_AIO_QUEUE_DEPTH 128
|
#define SPDK_AIO_QUEUE_DEPTH 128
|
||||||
|
|
||||||
@ -56,7 +58,8 @@ bdev_aio_get_ctx_size(void)
|
|||||||
return sizeof(struct bdev_aio_task);
|
return sizeof(struct bdev_aio_task);
|
||||||
}
|
}
|
||||||
|
|
||||||
SPDK_BDEV_MODULE_REGISTER(aio, bdev_aio_initialize, NULL, NULL, bdev_aio_get_ctx_size, NULL)
|
SPDK_BDEV_MODULE_REGISTER(aio, bdev_aio_initialize, NULL, bdev_aio_get_spdk_running_config,
|
||||||
|
bdev_aio_get_ctx_size, NULL)
|
||||||
|
|
||||||
static int
|
static int
|
||||||
bdev_aio_open(struct file_disk *disk)
|
bdev_aio_open(struct file_disk *disk)
|
||||||
@ -167,6 +170,7 @@ bdev_aio_destruct(void *ctx)
|
|||||||
struct file_disk *fdisk = ctx;
|
struct file_disk *fdisk = ctx;
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
|
|
||||||
|
TAILQ_REMOVE(&g_aio_disk_head, fdisk, link);
|
||||||
rc = bdev_aio_close(fdisk);
|
rc = bdev_aio_close(fdisk);
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
SPDK_ERRLOG("bdev_aio_close() failed\n");
|
SPDK_ERRLOG("bdev_aio_close() failed\n");
|
||||||
@ -397,6 +401,7 @@ create_aio_disk(const char *name, const char *filename, uint32_t block_size)
|
|||||||
SPDK_ERRLOG("Block size could not be auto-detected\n");
|
SPDK_ERRLOG("Block size could not be auto-detected\n");
|
||||||
goto error_return;
|
goto error_return;
|
||||||
}
|
}
|
||||||
|
fdisk->block_size_override = false;
|
||||||
block_size = detected_block_size;
|
block_size = detected_block_size;
|
||||||
} else {
|
} else {
|
||||||
if (block_size < detected_block_size) {
|
if (block_size < detected_block_size) {
|
||||||
@ -409,6 +414,7 @@ create_aio_disk(const char *name, const char *filename, uint32_t block_size)
|
|||||||
"auto-detected block size %" PRIu32 "\n",
|
"auto-detected block size %" PRIu32 "\n",
|
||||||
block_size, detected_block_size);
|
block_size, detected_block_size);
|
||||||
}
|
}
|
||||||
|
fdisk->block_size_override = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (block_size < 512) {
|
if (block_size < 512) {
|
||||||
@ -437,6 +443,8 @@ create_aio_disk(const char *name, const char *filename, uint32_t block_size)
|
|||||||
spdk_io_device_register(&fdisk->fd, bdev_aio_create_cb, bdev_aio_destroy_cb,
|
spdk_io_device_register(&fdisk->fd, bdev_aio_create_cb, bdev_aio_destroy_cb,
|
||||||
sizeof(struct bdev_aio_io_channel));
|
sizeof(struct bdev_aio_io_channel));
|
||||||
spdk_bdev_register(&fdisk->disk);
|
spdk_bdev_register(&fdisk->disk);
|
||||||
|
|
||||||
|
TAILQ_INSERT_TAIL(&g_aio_disk_head, fdisk, link);
|
||||||
return &fdisk->disk;
|
return &fdisk->disk;
|
||||||
|
|
||||||
error_return:
|
error_return:
|
||||||
@ -452,6 +460,7 @@ bdev_aio_initialize(void)
|
|||||||
struct spdk_conf_section *sp;
|
struct spdk_conf_section *sp;
|
||||||
struct spdk_bdev *bdev;
|
struct spdk_bdev *bdev;
|
||||||
|
|
||||||
|
TAILQ_INIT(&g_aio_disk_head);
|
||||||
sp = spdk_conf_find_section(NULL, "AIO");
|
sp = spdk_conf_find_section(NULL, "AIO");
|
||||||
if (!sp) {
|
if (!sp) {
|
||||||
return 0;
|
return 0;
|
||||||
@ -494,4 +503,35 @@ bdev_aio_initialize(void)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
bdev_aio_get_spdk_running_config(FILE *fp)
|
||||||
|
{
|
||||||
|
char *file;
|
||||||
|
char *name;
|
||||||
|
uint32_t block_size;
|
||||||
|
struct file_disk *fdisk;
|
||||||
|
|
||||||
|
fprintf(fp,
|
||||||
|
"\n"
|
||||||
|
"# Users must change this section to match the /dev/sdX devices to be\n"
|
||||||
|
"# exported as iSCSI LUNs. The devices are accessed using Linux AIO.\n"
|
||||||
|
"# The format is:\n"
|
||||||
|
"# AIO <file name> <bdev name> [<block size>]\n"
|
||||||
|
"# The file name is the backing device\n"
|
||||||
|
"# The bdev name can be referenced from elsewhere in the configuration file.\n"
|
||||||
|
"# Block size may be omitted to automatically detect the block size of a disk.\n"
|
||||||
|
"[AIO]\n");
|
||||||
|
|
||||||
|
TAILQ_FOREACH(fdisk, &g_aio_disk_head, link) {
|
||||||
|
file = fdisk->filename;
|
||||||
|
name = fdisk->disk.name;
|
||||||
|
block_size = fdisk->disk.blocklen;
|
||||||
|
fprintf(fp, " AIO %s %s ", file, name);
|
||||||
|
if (fdisk->block_size_override)
|
||||||
|
fprintf(fp, "%d", block_size);
|
||||||
|
fprintf(fp, "\n");
|
||||||
|
}
|
||||||
|
fprintf(fp, "\n");
|
||||||
|
}
|
||||||
|
|
||||||
SPDK_LOG_REGISTER_TRACE_FLAG("aio", SPDK_TRACE_AIO)
|
SPDK_LOG_REGISTER_TRACE_FLAG("aio", SPDK_TRACE_AIO)
|
||||||
|
@ -58,6 +58,8 @@ struct file_disk {
|
|||||||
struct spdk_bdev disk;
|
struct spdk_bdev disk;
|
||||||
char *filename;
|
char *filename;
|
||||||
int fd;
|
int fd;
|
||||||
|
TAILQ_ENTRY(file_disk) link;
|
||||||
|
bool block_size_override;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct spdk_bdev *create_aio_disk(const char *name, const char *filename, uint32_t block_size);
|
struct spdk_bdev *create_aio_disk(const char *name, const char *filename, uint32_t block_size);
|
||||||
|
Loading…
Reference in New Issue
Block a user