add struct zv2404fs_context_s

This commit is contained in:
king
2024-08-08 13:56:24 +00:00
parent cbb3e62137
commit 55a71164b7

View File

@@ -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");
@@ -206,7 +246,9 @@ int main(int argc, char *argv[]) {
opts.name = "zv2404fs";
opts.json_config_file = argv[1];
spdk_app_start(&opts, zv2404fs_entry, NULL);
zv2404fs_context_t *ctx = calloc(1, sizeof(zv2404fs_context_t));
spdk_app_start(&opts, zv2404fs_entry, ctx);
SPDK_NOTICELOG("hello spdk\n");