From 55a71164b7a4d5b9422f55c8ee092ab617dd697b Mon Sep 17 00:00:00 2001 From: king Date: Thu, 8 Aug 2024 13:56:24 +0000 Subject: [PATCH] add struct zv2404fs_context_s --- zv2404fs.c | 102 +++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 72 insertions(+), 30 deletions(-) diff --git a/zv2404fs.c b/zv2404fs.c index 8404f11..04b79dd 100755 --- a/zv2404fs.c +++ b/zv2404fs.c @@ -13,6 +13,8 @@ #define BUFFER_SIZE 512 +#if 0 + struct spdk_blob_store *blobstore; spdk_blob_id blob_id; struct spdk_blob *blob; @@ -22,27 +24,55 @@ uint8_t *write_buffer; uint8_t *read_buffer; struct spdk_io_channel *channel; +#else + +// +typedef struct zv2404fs_context_s { + + struct spdk_blob_store *blobstore; + spdk_blob_id blob_id; + struct spdk_blob *blob; + uint64_t unit_size; + uint64_t free_cluster_count; + uint64_t num_cluster; + uint8_t *write_buffer; + uint8_t *read_buffer; + struct spdk_io_channel *channel; + +} zv2404fs_context_t; + +#endif + static void zv2404fs_spdk_bs_unload_cb(void *arg, int bserrno) { + zv2404fs_context_t *ctx = (zv2404fs_context_t*)arg; + spdk_app_stop(0); + spdk_free(ctx->write_buffer); + spdk_free(ctx->read_buffer); + free(ctx); } static void zv2404fs_spdk_blob_delete_cb(void *arg, int bserrno) { - if (blobstore) { - if (channel) { - spdk_bs_free_io_channel(channel); + zv2404fs_context_t *ctx = (zv2404fs_context_t*)arg; + + if (ctx->blobstore) { + if (ctx->channel) { + spdk_bs_free_io_channel(ctx->channel); } - spdk_bs_unload(blobstore, zv2404fs_spdk_bs_unload_cb, NULL); + spdk_bs_unload(ctx->blobstore, zv2404fs_spdk_bs_unload_cb, ctx); } } static void zv2404fs_spdk_blob_close_cb(void *arg, int bserrno) { - spdk_bs_delete_blob(blobstore, blob_id, zv2404fs_spdk_blob_delete_cb, NULL); + zv2404fs_context_t *ctx = (zv2404fs_context_t*)arg; + + spdk_bs_delete_blob(ctx->blobstore, ctx->blob_id, zv2404fs_spdk_blob_delete_cb, ctx); } @@ -50,15 +80,19 @@ static void zv2404fs_spdk_blob_close_cb(void *arg, int bserrno) { static void zv2404fs_spdk_blob_read_cb(void *arg, int bserrno) { - SPDK_NOTICELOG("READ BUFFER : %s\n", read_buffer); + zv2404fs_context_t *ctx = (zv2404fs_context_t*)arg; - spdk_blob_close(blob, zv2404fs_spdk_blob_close_cb, NULL); + SPDK_NOTICELOG("READ BUFFER : %s\n", ctx->read_buffer); + + spdk_blob_close(ctx->blob, zv2404fs_spdk_blob_close_cb, ctx); } static void zv2404fs_spdk_blob_write_cb(void *arg, int bserrno) { + zv2404fs_context_t *ctx = (zv2404fs_context_t*)arg; + SPDK_NOTICELOG("WRITE COMPLETE\n"); uint8_t *rbuffer = spdk_malloc(512, 0x1000, NULL, SPDK_ENV_LCORE_ID_ANY, SPDK_MALLOC_DMA); @@ -68,14 +102,16 @@ static void zv2404fs_spdk_blob_write_cb(void *arg, int bserrno) { } memset(rbuffer, 0x0, BUFFER_SIZE); - read_buffer = rbuffer; + ctx->read_buffer = rbuffer; - spdk_blob_io_read(blob, channel, rbuffer, 0, 1, zv2404fs_spdk_blob_read_cb, NULL); + spdk_blob_io_read(ctx->blob, ctx->channel, rbuffer, 0, 1, zv2404fs_spdk_blob_read_cb, ctx); } static void zv2404fs_spdk_blob_sync_cb(void *arg, int bserrno) { + zv2404fs_context_t *ctx = (zv2404fs_context_t*)arg; + uint8_t *wbuffer = spdk_malloc(512, 0x1000, NULL, SPDK_ENV_LCORE_ID_ANY, SPDK_MALLOC_DMA); if (wbuffer == NULL) { spdk_app_stop(0); @@ -84,16 +120,16 @@ static void zv2404fs_spdk_blob_sync_cb(void *arg, int bserrno) { memset(wbuffer, 'A', BUFFER_SIZE); *(wbuffer+BUFFER_SIZE-1) = '\0'; - write_buffer = wbuffer; + ctx->write_buffer = wbuffer; - struct spdk_io_channel *chan = spdk_bs_alloc_io_channel(blobstore); + struct spdk_io_channel *chan = spdk_bs_alloc_io_channel(ctx->blobstore); if (chan == NULL) { spdk_app_stop(0); return ; } - channel = chan; + ctx->channel = chan; - spdk_blob_io_write(blob, channel, wbuffer, 0, 1, zv2404fs_spdk_blob_write_cb, NULL); + spdk_blob_io_write(ctx->blob, ctx->channel, wbuffer, 0, 1, zv2404fs_spdk_blob_write_cb, ctx); } @@ -101,14 +137,14 @@ static void zv2404fs_spdk_blob_sync_cb(void *arg, int bserrno) { static void zv2404fs_spdk_blob_resize_cb(void *arg, int bserrno) { - struct spdk_blob *blb = (struct spdk_blob *)arg; + zv2404fs_context_t *ctx = (zv2404fs_context_t*)arg; - uint64_t total = spdk_blob_get_num_clusters(blb); - num_cluster = total; + uint64_t total = spdk_blob_get_num_clusters(ctx->blob); + ctx->num_cluster = total; SPDK_NOTICELOG("resize blob :%"PRIu64"\n", total); - spdk_blob_sync_md(blb, zv2404fs_spdk_blob_sync_cb, blb); + spdk_blob_sync_md(ctx->blob, zv2404fs_spdk_blob_sync_cb, ctx); } @@ -116,15 +152,15 @@ static void zv2404fs_spdk_blob_resize_cb(void *arg, int bserrno) { static void zv2404fs_spdk_bs_open_blob_cb(void *arg, struct spdk_blob *blb, int bserrno) { - struct spdk_blob_store *bs = (struct spdk_blob_store*)arg; + zv2404fs_context_t *ctx = (zv2404fs_context_t*)arg; - blob = blb; + ctx->blob = blb; - uint64_t free_cluster = spdk_bs_free_cluster_count(bs); // + uint64_t free_cluster = spdk_bs_free_cluster_count(ctx->blobstore); // SPDK_NOTICELOG("free_cluster : %"PRIu64"\n", free_cluster); - free_cluster_count = free_cluster; + ctx->free_cluster_count = free_cluster; - spdk_blob_resize(blb, free_cluster, zv2404fs_spdk_blob_resize_cb, blb); + spdk_blob_resize(blb, free_cluster, zv2404fs_spdk_blob_resize_cb, ctx); } @@ -132,12 +168,12 @@ static void zv2404fs_spdk_bs_open_blob_cb(void *arg, struct spdk_blob *blb, int static void zv2404fs_spdk_bs_create_blob_cb(void *arg, spdk_blob_id blobid, int bserrno) { - struct spdk_blob_store *bs = (struct spdk_blob_store*)arg; + zv2404fs_context_t *ctx = (zv2404fs_context_t*)arg; - blob_id = blobid; + ctx->blob_id = blobid; SPDK_NOTICELOG("blobid : %"PRIu64"\n", blobid); - spdk_bs_open_blob(bs, blobid, zv2404fs_spdk_bs_open_blob_cb, bs); + spdk_bs_open_blob(ctx->blobstore, blobid, zv2404fs_spdk_bs_open_blob_cb, ctx); } @@ -145,12 +181,15 @@ static void zv2404fs_spdk_bs_create_blob_cb(void *arg, spdk_blob_id blobid, int static void zv2404fs_spdk_bs_init_cb(void *arg, struct spdk_blob_store *bs, int bserrno) { + zv2404fs_context_t *ctx = (zv2404fs_context_t*)arg; + uint64_t io_unit_size = spdk_bs_get_io_unit_size(bs); SPDK_NOTICELOG("io_unit_size : %"PRIu64"\n", io_unit_size); - blobstore = bs; + ctx->unit_size = io_unit_size; + ctx ->blobstore = bs; - spdk_bs_create_blob(bs, zv2404fs_spdk_bs_create_blob_cb, bs); + spdk_bs_create_blob(bs, zv2404fs_spdk_bs_create_blob_cb, ctx); } @@ -165,8 +204,9 @@ static void zv2404_spdk_bdev_event_cb(enum spdk_bdev_event_type type, struct spd -static void zv2404fs_entry(void *ctx) { +static void zv2404fs_entry(void *arg) { + zv2404fs_context_t *ctx = (zv2404fs_context_t*)arg; struct spdk_bs_dev *bs_dev = NULL; @@ -178,7 +218,7 @@ static void zv2404fs_entry(void *ctx) { //int *count = malloc(sizeof(int)); //*count = 2404; - spdk_bs_init(bs_dev, NULL, zv2404fs_spdk_bs_init_cb, NULL); + spdk_bs_init(bs_dev, NULL, zv2404fs_spdk_bs_init_cb, ctx); //sleep(10); SPDK_NOTICELOG("zv2404fs_entry\n"); @@ -205,8 +245,10 @@ int main(int argc, char *argv[]) { spdk_app_opts_init(&opts, sizeof(opts)); opts.name = "zv2404fs"; opts.json_config_file = argv[1]; + + zv2404fs_context_t *ctx = calloc(1, sizeof(zv2404fs_context_t)); - spdk_app_start(&opts, zv2404fs_entry, NULL); + spdk_app_start(&opts, zv2404fs_entry, ctx); SPDK_NOTICELOG("hello spdk\n");