From e734bb9f9fb798be2bbe77b4a3cb9fdf42170456 Mon Sep 17 00:00:00 2001 From: Jim Harris Date: Tue, 12 Dec 2017 13:42:56 -0700 Subject: [PATCH] blob: change spdk_blob_close parameter to spdk_blob * Using the ** paradigm is a bit problematic for asynchronous routines that could fail. Currently we were inconsistent in that some error paths would zero the pointer while others did not. So make this just a plain pointer, which simplifies the API and its implementation. Signed-off-by: Jim Harris Change-Id: I67147931c6e8350896a4505022a6a314655de3d3 Reviewed-on: https://review.gerrithub.io/391482 Tested-by: SPDK Automated Test System Reviewed-by: Ben Walker Reviewed-by: Daniel Verkamp --- CHANGELOG.md | 3 + examples/blob/cli/blobcli.c | 14 ++-- examples/blob/hello_world/hello_blob.c | 2 +- include/spdk/blob.h | 2 +- lib/bdev/lvol/vbdev_lvol.c | 2 +- lib/blob/blobstore.c | 20 +++--- lib/blobfs/blobfs.c | 13 ++-- lib/lvol/lvol.c | 22 +++--- .../lib/bdev/vbdev_lvol.c/vbdev_lvol_ut.c | 2 +- test/unit/lib/blob/blob.c/blob_ut.c | 69 +++++++++---------- test/unit/lib/lvol/lvol.c/lvol_ut.c | 6 +- 11 files changed, 77 insertions(+), 78 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 20321d564..388fbdfa9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -56,6 +56,9 @@ spdk_bs_md_delete_blob => spdk_bs_delete_blob spdk_bs_md_iter_first => spdk_bs_iter_first spdk_bs_md_iter_next => spdk_bs_iter_next +The function signature of spdk_blob_close has changed. It now takes a struct spdk_blob * argument +rather than struct spdk_blob **. + ## v17.10: Logical Volumes ### New dependencies diff --git a/examples/blob/cli/blobcli.c b/examples/blob/cli/blobcli.c index 916d20863..631793cdb 100644 --- a/examples/blob/cli/blobcli.c +++ b/examples/blob/cli/blobcli.c @@ -286,7 +286,7 @@ sync_cb(void *arg1, int bserrno) return; } - spdk_blob_close(&cli_context->blob, close_cb, cli_context); + spdk_blob_close(cli_context->blob, close_cb, cli_context); } /* @@ -602,7 +602,7 @@ read_dump_cb(void *arg1, int bserrno) /* done reading */ printf("\nFile write complete (to %s).\n", cli_context->file); fclose(cli_context->fp); - spdk_blob_close(&cli_context->blob, close_cb, cli_context); + spdk_blob_close(cli_context->blob, close_cb, cli_context); } } @@ -650,7 +650,7 @@ write_imp_cb(void *arg1, int bserrno) /* done writing */ printf("\nBlob import complete (from %s).\n", cli_context->file); fclose(cli_context->fp); - spdk_blob_close(&cli_context->blob, close_cb, cli_context); + spdk_blob_close(cli_context->blob, close_cb, cli_context); } } @@ -680,7 +680,7 @@ dump_imp_open_cb(void *cb_arg, struct spdk_blob *blob, int bserrno) ALIGN_4K, NULL); if (cli_context->buff == NULL) { printf("Error in allocating memory\n"); - spdk_blob_close(&cli_context->blob, close_cb, cli_context); + spdk_blob_close(cli_context->blob, close_cb, cli_context); return; } printf("Working"); @@ -690,7 +690,7 @@ dump_imp_open_cb(void *cb_arg, struct spdk_blob *blob, int bserrno) cli_context->fp = fopen(cli_context->file, "w"); if (cli_context->fp == NULL) { printf("Error in opening file\n"); - spdk_blob_close(&cli_context->blob, close_cb, cli_context); + spdk_blob_close(cli_context->blob, close_cb, cli_context); return; } @@ -702,7 +702,7 @@ dump_imp_open_cb(void *cb_arg, struct spdk_blob *blob, int bserrno) cli_context->fp = fopen(cli_context->file, "r"); if (cli_context->fp == NULL) { printf("Error in opening file\n"); - spdk_blob_close(&cli_context->blob, close_cb, cli_context); + spdk_blob_close(cli_context->blob, close_cb, cli_context); return; } @@ -750,7 +750,7 @@ write_cb(void *arg1, int bserrno) } else { /* done writing */ printf("\nBlob fill complete (with 0x%x).\n", cli_context->fill_value); - spdk_blob_close(&cli_context->blob, close_cb, cli_context); + spdk_blob_close(cli_context->blob, close_cb, cli_context); } } diff --git a/examples/blob/hello_world/hello_blob.c b/examples/blob/hello_world/hello_blob.c index 4a22191c2..f2cf2f264 100644 --- a/examples/blob/hello_world/hello_blob.c +++ b/examples/blob/hello_world/hello_blob.c @@ -168,7 +168,7 @@ read_complete(void *arg1, int bserrno) } /* Now let's close it and delete the blob in the callback. */ - spdk_blob_close(&hello_context->blob, delete_blob, hello_context); + spdk_blob_close(hello_context->blob, delete_blob, hello_context); } /* diff --git a/include/spdk/blob.h b/include/spdk/blob.h index 4cfb5c05a..d11807562 100644 --- a/include/spdk/blob.h +++ b/include/spdk/blob.h @@ -232,7 +232,7 @@ int spdk_blob_resize(struct spdk_blob *blob, size_t sz); void spdk_blob_sync_md(struct spdk_blob *blob, spdk_blob_op_complete cb_fn, void *cb_arg); /* Close a blob. This will automatically sync. */ -void spdk_blob_close(struct spdk_blob **blob, spdk_blob_op_complete cb_fn, void *cb_arg); +void spdk_blob_close(struct spdk_blob *blob, spdk_blob_op_complete cb_fn, void *cb_arg); struct spdk_io_channel *spdk_bs_alloc_io_channel(struct spdk_blob_store *bs); diff --git a/lib/bdev/lvol/vbdev_lvol.c b/lib/bdev/lvol/vbdev_lvol.c index ad82c51bb..65ee6e0cd 100644 --- a/lib/bdev/lvol/vbdev_lvol.c +++ b/lib/bdev/lvol/vbdev_lvol.c @@ -840,7 +840,7 @@ _vbdev_lvs_examine_finish(void *cb_arg, struct spdk_lvol *lvol, int lvolerrno) SPDK_ERRLOG("Cannot create bdev for lvol %s\n", lvol->old_name); TAILQ_REMOVE(&lvs->lvols, lvol, link); lvs->lvol_count--; - spdk_blob_close(&lvol->blob, _vbdev_lvol_close_cb, lvs); + spdk_blob_close(lvol->blob, _vbdev_lvol_close_cb, lvs); SPDK_INFOLOG(SPDK_LOG_VBDEV_LVOL, "Opening lvol %s failed\n", lvol->old_name); free(lvol->old_name); free(lvol); diff --git a/lib/blob/blobstore.c b/lib/blob/blobstore.c index 1788faed4..4ae318229 100644 --- a/lib/blob/blobstore.c +++ b/lib/blob/blobstore.c @@ -2828,26 +2828,24 @@ spdk_blob_sync_md(struct spdk_blob *_blob, spdk_blob_op_complete cb_fn, void *cb static void _spdk_blob_close_cpl(spdk_bs_sequence_t *seq, void *cb_arg, int bserrno) { - struct spdk_blob_data **blob = cb_arg; + struct spdk_blob_data *blob = cb_arg; - if ((*blob)->open_ref == 0) { - TAILQ_REMOVE(&(*blob)->bs->blobs, (*blob), link); - _spdk_blob_free((*blob)); + if (blob->open_ref == 0) { + TAILQ_REMOVE(&blob->bs->blobs, blob, link); + _spdk_blob_free(blob); } - *blob = NULL; - spdk_bs_sequence_finish(seq, bserrno); } -void spdk_blob_close(struct spdk_blob **b, spdk_blob_op_complete cb_fn, void *cb_arg) +void spdk_blob_close(struct spdk_blob *b, spdk_blob_op_complete cb_fn, void *cb_arg) { struct spdk_bs_cpl cpl; struct spdk_blob_data *blob; spdk_bs_sequence_t *seq; assert(b != NULL); - blob = __blob_to_data(*b); + blob = __blob_to_data(b); assert(blob != NULL); SPDK_DEBUGLOG(SPDK_LOG_BLOB, "Closing blob %lu\n", blob->id); @@ -2873,12 +2871,12 @@ void spdk_blob_close(struct spdk_blob **b, spdk_blob_op_complete cb_fn, void *cb } if (blob->state == SPDK_BLOB_STATE_CLEAN) { - _spdk_blob_close_cpl(seq, b, 0); + _spdk_blob_close_cpl(seq, blob, 0); return; } /* Sync metadata */ - _spdk_blob_persist(seq, blob, _spdk_blob_close_cpl, b); + _spdk_blob_persist(seq, blob, _spdk_blob_close_cpl, blob); } /* END spdk_blob_close */ @@ -3022,7 +3020,7 @@ spdk_bs_iter_next(struct spdk_blob_store *bs, struct spdk_blob **b, ctx->cb_arg = cb_arg; /* Close the existing blob */ - spdk_blob_close(b, _spdk_bs_iter_close_cpl, ctx); + spdk_blob_close(*b, _spdk_bs_iter_close_cpl, ctx); } int diff --git a/lib/blobfs/blobfs.c b/lib/blobfs/blobfs.c index e4f4c47fc..d02c1d070 100644 --- a/lib/blobfs/blobfs.c +++ b/lib/blobfs/blobfs.c @@ -857,12 +857,11 @@ fs_create_blob_open_cb(void *ctx, struct spdk_blob *blob, int bserrno) struct spdk_file *f = args->file; uint64_t length = 0; - f->blob = blob; spdk_blob_resize(blob, 1); spdk_blob_set_xattr(blob, "name", f->name, strlen(f->name) + 1); spdk_blob_set_xattr(blob, "length", &length, sizeof(length)); - spdk_blob_close(&f->blob, fs_create_blob_close_cb, args); + spdk_blob_close(blob, fs_create_blob_close_cb, args); } static void @@ -1128,12 +1127,10 @@ fs_rename_blob_open_cb(void *ctx, struct spdk_blob *blob, int bserrno) { struct spdk_fs_request *req = ctx; struct spdk_fs_cb_args *args = &req->args; - struct spdk_file *f = args->file; const char *new_name = args->op.rename.new_name; - f->blob = blob; spdk_blob_set_xattr(blob, "name", new_name, strlen(new_name) + 1); - spdk_blob_close(&f->blob, fs_rename_blob_close_cb, req); + spdk_blob_close(blob, fs_rename_blob_close_cb, req); } static void @@ -2353,6 +2350,8 @@ __file_close_async_done(void *ctx, int bserrno) static void __file_close_async(struct spdk_file *file, struct spdk_fs_request *req) { + struct spdk_blob *blob; + pthread_spin_lock(&file->lock); if (file->ref_count == 0) { pthread_spin_unlock(&file->lock); @@ -2369,7 +2368,9 @@ __file_close_async(struct spdk_file *file, struct spdk_fs_request *req) pthread_spin_unlock(&file->lock); - spdk_blob_close(&file->blob, __file_close_async_done, req); + blob = file->blob; + file->blob = NULL; + spdk_blob_close(blob, __file_close_async_done, req); } static void diff --git a/lib/lvol/lvol.c b/lib/lvol/lvol.c index 884faa089..090a25e20 100644 --- a/lib/lvol/lvol.c +++ b/lib/lvol/lvol.c @@ -285,14 +285,14 @@ _spdk_lvs_read_uuid(void *cb_arg, struct spdk_blob *blob, int lvolerrno) if (rc != 0 || value_len != UUID_STRING_LEN || attr[UUID_STRING_LEN - 1] != '\0') { SPDK_INFOLOG(SPDK_LOG_LVOL, "missing or incorrect UUID\n"); req->lvserrno = -EINVAL; - spdk_blob_close(&blob, _spdk_close_super_blob_with_error_cb, req); + spdk_blob_close(blob, _spdk_close_super_blob_with_error_cb, req); return; } if (uuid_parse(attr, lvs->uuid)) { SPDK_INFOLOG(SPDK_LOG_LVOL, "incorrect UUID '%s'\n", attr); req->lvserrno = -EINVAL; - spdk_blob_close(&blob, _spdk_close_super_blob_with_error_cb, req); + spdk_blob_close(blob, _spdk_close_super_blob_with_error_cb, req); return; } @@ -300,7 +300,7 @@ _spdk_lvs_read_uuid(void *cb_arg, struct spdk_blob *blob, int lvolerrno) if (rc != 0 || value_len > SPDK_LVS_NAME_MAX) { SPDK_INFOLOG(SPDK_LOG_LVOL, "missing or invalid name\n"); req->lvserrno = -EINVAL; - spdk_blob_close(&blob, _spdk_close_super_blob_with_error_cb, req); + spdk_blob_close(blob, _spdk_close_super_blob_with_error_cb, req); return; } @@ -310,13 +310,13 @@ _spdk_lvs_read_uuid(void *cb_arg, struct spdk_blob *blob, int lvolerrno) if (rc) { SPDK_INFOLOG(SPDK_LOG_LVOL, "lvolstore with name %s already exists\n", lvs->name); req->lvserrno = -EEXIST; - spdk_blob_close(&blob, _spdk_close_super_blob_with_error_cb, req); + spdk_blob_close(blob, _spdk_close_super_blob_with_error_cb, req); return; } lvs->super_blob_id = spdk_blob_get_id(blob); - spdk_blob_close(&blob, _spdk_close_super_cb, req); + spdk_blob_close(blob, _spdk_close_super_cb, req); } static void @@ -429,7 +429,7 @@ _spdk_super_blob_set_cb(void *cb_arg, int lvolerrno) return; } - spdk_blob_close(&blob, _spdk_super_create_close_cb, req); + spdk_blob_close(blob, _spdk_super_create_close_cb, req); } static void @@ -844,7 +844,7 @@ _spdk_lvol_sync_cb(void *cb_arg, int lvolerrno) struct spdk_lvol *lvol = req->lvol; if (lvolerrno != 0) { - spdk_blob_close(&lvol->blob, _spdk_lvol_delete_blob_cb, lvol); + spdk_blob_close(lvol->blob, _spdk_lvol_delete_blob_cb, lvol); } else { lvol->ref_count++; } @@ -873,7 +873,7 @@ _spdk_lvol_create_open_cb(void *cb_arg, struct spdk_blob *blob, int lvolerrno) uuid_unparse(lvol->lvol_store->uuid, uuid); lvol->old_name = spdk_sprintf_alloc("%s_%"PRIu64, uuid, (uint64_t)blob_id); if (!lvol->old_name) { - spdk_blob_close(&blob, _spdk_lvol_delete_blob_cb, lvol); + spdk_blob_close(blob, _spdk_lvol_delete_blob_cb, lvol); SPDK_ERRLOG("Cannot alloc memory for lvol name\n"); lvolerrno = -ENOMEM; free(lvol); @@ -882,14 +882,14 @@ _spdk_lvol_create_open_cb(void *cb_arg, struct spdk_blob *blob, int lvolerrno) lvolerrno = spdk_blob_resize(blob, lvol->num_clusters); if (lvolerrno < 0) { - spdk_blob_close(&blob, _spdk_lvol_destroy_cb, lvol); + spdk_blob_close(blob, _spdk_lvol_destroy_cb, lvol); goto invalid; } lvolerrno = spdk_blob_set_xattr(blob, "name", lvol->name, strnlen(lvol->name, SPDK_LVOL_NAME_MAX) + 1); if (lvolerrno < 0) { - spdk_blob_close(&blob, _spdk_lvol_destroy_cb, lvol); + spdk_blob_close(blob, _spdk_lvol_destroy_cb, lvol); goto invalid; } @@ -1129,7 +1129,7 @@ spdk_lvol_close(struct spdk_lvol *lvol, spdk_lvol_op_complete cb_fn, void *cb_ar req->cb_arg = cb_arg; req->lvol = lvol; - spdk_blob_close(&(lvol->blob), _spdk_lvol_close_blob_cb, req); + spdk_blob_close(lvol->blob, _spdk_lvol_close_blob_cb, req); } struct spdk_io_channel * diff --git a/test/unit/lib/bdev/vbdev_lvol.c/vbdev_lvol_ut.c b/test/unit/lib/bdev/vbdev_lvol.c/vbdev_lvol_ut.c index 5b9f7e072..3662788d8 100644 --- a/test/unit/lib/bdev/vbdev_lvol.c/vbdev_lvol_ut.c +++ b/test/unit/lib/bdev/vbdev_lvol.c/vbdev_lvol_ut.c @@ -71,7 +71,7 @@ spdk_lvol_open(struct spdk_lvol *lvol, spdk_lvol_op_with_handle_complete cb_fn, } void -spdk_blob_close(struct spdk_blob **b, spdk_blob_op_complete cb_fn, void *cb_arg) +spdk_blob_close(struct spdk_blob *b, spdk_blob_op_complete cb_fn, void *cb_arg) { } diff --git a/test/unit/lib/blob/blob.c/blob_ut.c b/test/unit/lib/blob/blob.c/blob_ut.c index 379761e5c..8cd6c044f 100644 --- a/test/unit/lib/blob/blob.c/blob_ut.c +++ b/test/unit/lib/blob/blob.c/blob_ut.c @@ -237,16 +237,15 @@ blob_open(void) CU_ASSERT(g_bserrno == 0); CU_ASSERT(blob == g_blob); - spdk_blob_close(&blob, blob_op_complete, NULL); + spdk_blob_close(blob, blob_op_complete, NULL); CU_ASSERT(g_bserrno == 0); - CU_ASSERT(blob == NULL); /* * Close the file a second time, releasing the second reference. This * should succeed. */ blob = g_blob; - spdk_blob_close(&blob, blob_op_complete, NULL); + spdk_blob_close(blob, blob_op_complete, NULL); CU_ASSERT(g_bserrno == 0); /* @@ -258,7 +257,7 @@ blob_open(void) CU_ASSERT(g_blob != NULL); blob = g_blob; - spdk_blob_close(&blob, blob_op_complete, NULL); + spdk_blob_close(blob, blob_op_complete, NULL); CU_ASSERT(g_bserrno == 0); spdk_bs_unload(g_bs, bs_op_complete, NULL); @@ -356,7 +355,7 @@ blob_resize(void) CU_ASSERT(rc == 0); CU_ASSERT((free_clusters - 10) == spdk_bs_free_cluster_count(bs)); - spdk_blob_close(&blob, blob_op_complete, NULL); + spdk_blob_close(blob, blob_op_complete, NULL); CU_ASSERT(g_bserrno == 0); spdk_bs_delete_blob(bs, blobid, blob_op_complete, NULL); @@ -453,7 +452,7 @@ blob_write(void) blob_op_complete, NULL); CU_ASSERT(g_bserrno == -EINVAL); - spdk_blob_close(&blob, blob_op_complete, NULL); + spdk_blob_close(blob, blob_op_complete, NULL); CU_ASSERT(g_bserrno == 0); spdk_bs_free_io_channel(channel); @@ -525,7 +524,7 @@ blob_read(void) blob_op_complete, NULL); CU_ASSERT(g_bserrno == -EINVAL); - spdk_blob_close(&blob, blob_op_complete, NULL); + spdk_blob_close(blob, blob_op_complete, NULL); CU_ASSERT(g_bserrno == 0); spdk_bs_free_io_channel(channel); @@ -579,7 +578,7 @@ blob_rw_verify(void) CU_ASSERT(g_bserrno == 0); CU_ASSERT(memcmp(payload_write, payload_read, 4 * 4096) == 0); - spdk_blob_close(&blob, blob_op_complete, NULL); + spdk_blob_close(blob, blob_op_complete, NULL); CU_ASSERT(g_bserrno == 0); spdk_bs_free_io_channel(channel); @@ -669,7 +668,7 @@ blob_rw_verify_iov(void) CU_ASSERT(memcmp(buf, &g_dev_buffer[512 * 4096], 256 * 4096) == 0); free(buf); - spdk_blob_close(&blob, blob_op_complete, NULL); + spdk_blob_close(blob, blob_op_complete, NULL); CU_ASSERT(g_bserrno == 0); spdk_bs_free_io_channel(channel); @@ -747,7 +746,7 @@ blob_rw_verify_iov_nomem(void) CU_ASSERT(req_count == bs_channel_get_req_count(channel)); MOCK_SET(calloc, void *, (void *)MOCK_PASS_THRU); - spdk_blob_close(&blob, blob_op_complete, NULL); + spdk_blob_close(blob, blob_op_complete, NULL); CU_ASSERT(g_bserrno == 0); spdk_bs_free_io_channel(channel); @@ -808,7 +807,7 @@ blob_rw_iov_read_only(void) spdk_bs_io_readv_blob(blob, channel, &iov_read, 1, 0, 1, blob_op_complete, NULL); CU_ASSERT(g_bserrno == 0); - spdk_blob_close(&blob, blob_op_complete, NULL); + spdk_blob_close(blob, blob_op_complete, NULL); CU_ASSERT(g_bserrno == 0); spdk_bs_free_io_channel(channel); @@ -945,7 +944,7 @@ blob_xattr(void) rc = spdk_blob_remove_xattr(blob, "foobar"); CU_ASSERT(rc == -ENOENT); - spdk_blob_close(&blob, blob_op_complete, NULL); + spdk_blob_close(blob, blob_op_complete, NULL); spdk_bs_unload(g_bs, bs_op_complete, NULL); CU_ASSERT(g_bserrno == 0); @@ -1009,7 +1008,7 @@ bs_load(void) rc = spdk_blob_resize(blob, 10); CU_ASSERT(rc == 0); - spdk_blob_close(&blob, blob_op_complete, NULL); + spdk_blob_close(blob, blob_op_complete, NULL); CU_ASSERT(g_bserrno == 0); blob = NULL; g_blob = NULL; @@ -1054,7 +1053,7 @@ bs_load(void) CU_ASSERT(spdk_blob_get_num_clusters(blob) == 10); - spdk_blob_close(&blob, blob_op_complete, NULL); + spdk_blob_close(blob, blob_op_complete, NULL); CU_ASSERT(g_bserrno == 0); blob = NULL; g_blob = NULL; @@ -1237,9 +1236,8 @@ bs_unload(void) /* Close the blob, then successfully unload blobstore */ g_bserrno = -1; - spdk_blob_close(&blob, blob_op_complete, NULL); + spdk_blob_close(blob, blob_op_complete, NULL); CU_ASSERT(g_bserrno == 0); - CU_ASSERT(blob == NULL); g_bserrno = -1; spdk_bs_unload(g_bs, bs_op_complete, NULL); @@ -1380,7 +1378,7 @@ bs_usable_clusters(void) CU_ASSERT(rc == 0); g_bserrno = -1; - spdk_blob_close(&g_blob, blob_op_complete, NULL); + spdk_blob_close(g_blob, blob_op_complete, NULL); CU_ASSERT(g_bserrno == 0); CU_ASSERT(spdk_bs_total_data_cluster_count(g_bs) == clusters); @@ -1464,7 +1462,7 @@ bs_resize_md(void) CU_ASSERT(g_bserrno == 0); CU_ASSERT(g_blob != NULL); g_bserrno = -1; - spdk_blob_close(&g_blob, blob_op_complete, NULL); + spdk_blob_close(g_blob, blob_op_complete, NULL); CU_ASSERT(g_bserrno == 0); } @@ -1574,7 +1572,7 @@ blob_serialize(void) /* Close the blobs */ for (i = 0; i < 2; i++) { - spdk_blob_close(&blob[i], blob_op_complete, NULL); + spdk_blob_close(blob[i], blob_op_complete, NULL); CU_ASSERT(g_bserrno == 0); } @@ -1603,7 +1601,7 @@ blob_serialize(void) CU_ASSERT(spdk_blob_get_num_clusters(blob[i]) == 3); - spdk_blob_close(&blob[i], blob_op_complete, NULL); + spdk_blob_close(blob[i], blob_op_complete, NULL); CU_ASSERT(g_bserrno == 0); } @@ -1640,9 +1638,8 @@ blob_crc(void) CU_ASSERT(g_blob != NULL); blob = g_blob; - spdk_blob_close(&blob, blob_op_complete, NULL); + spdk_blob_close(blob, blob_op_complete, NULL); CU_ASSERT(g_bserrno == 0); - CU_ASSERT(blob == NULL); page_num = _spdk_bs_blobid_to_page(blobid); index = DEV_BUFFER_BLOCKLEN * (bs->md_start + page_num); @@ -1754,7 +1751,7 @@ blob_dirty_shutdown(void) rc = spdk_blob_resize(blob, 10); CU_ASSERT(rc == 0); - spdk_blob_close(&blob, blob_op_complete, NULL); + spdk_blob_close(blob, blob_op_complete, NULL); blob = NULL; g_blob = NULL; g_blobid = SPDK_BLOBID_INVALID; @@ -1786,7 +1783,7 @@ blob_dirty_shutdown(void) rc = spdk_blob_resize(blob, 20); CU_ASSERT(rc == 0); - spdk_blob_close(&blob, blob_op_complete, NULL); + spdk_blob_close(blob, blob_op_complete, NULL); CU_ASSERT(g_bserrno == 0); blob = NULL; g_blob = NULL; @@ -1808,7 +1805,7 @@ blob_dirty_shutdown(void) blob = g_blob; CU_ASSERT(spdk_blob_get_num_clusters(blob) == 20); - spdk_blob_close(&blob, blob_op_complete, NULL); + spdk_blob_close(blob, blob_op_complete, NULL); CU_ASSERT(g_bserrno == 0); blob = NULL; g_blob = NULL; @@ -1837,7 +1834,7 @@ blob_dirty_shutdown(void) rc = spdk_blob_resize(blob, 10); CU_ASSERT(rc == 0); - spdk_blob_close(&blob, blob_op_complete, NULL); + spdk_blob_close(blob, blob_op_complete, NULL); blob = NULL; g_blob = NULL; g_blobid = SPDK_BLOBID_INVALID; @@ -1865,7 +1862,7 @@ blob_dirty_shutdown(void) CU_ASSERT(value_len == 8); CU_ASSERT(spdk_blob_get_num_clusters(blob) == 10); - spdk_blob_close(&blob, blob_op_complete, NULL); + spdk_blob_close(blob, blob_op_complete, NULL); CU_ASSERT(g_bserrno == 0); spdk_bs_delete_blob(g_bs, blobid2, blob_op_complete, NULL); CU_ASSERT(g_bserrno == 0); @@ -1885,7 +1882,7 @@ blob_dirty_shutdown(void) spdk_bs_open_blob(g_bs, blobid1, blob_op_with_handle_complete, NULL); CU_ASSERT(g_bserrno == 0); CU_ASSERT(g_blob != NULL); - spdk_blob_close(&g_blob, blob_op_complete, NULL); + spdk_blob_close(g_blob, blob_op_complete, NULL); CU_ASSERT(g_bserrno == 0); spdk_bs_unload(g_bs, bs_op_complete, NULL); @@ -1923,7 +1920,7 @@ blob_dirty_shutdown(void) rc = spdk_blob_set_xattr(blob, "length", &length, sizeof(length)); CU_ASSERT(rc == 0); - spdk_blob_close(&blob, blob_op_complete, NULL); + spdk_blob_close(blob, blob_op_complete, NULL); blob = NULL; g_blob = NULL; g_blobid = SPDK_BLOBID_INVALID; @@ -1941,7 +1938,7 @@ blob_dirty_shutdown(void) rc = spdk_blob_set_xattr(blob, "length", &length, sizeof(length)); CU_ASSERT(rc == 0); - spdk_blob_close(&blob, blob_op_complete, NULL); + spdk_blob_close(blob, blob_op_complete, NULL); blob = NULL; g_blob = NULL; g_blobid = SPDK_BLOBID_INVALID; @@ -1971,7 +1968,7 @@ blob_dirty_shutdown(void) CU_ASSERT(g_blob != NULL); blob = g_blob; - spdk_blob_close(&blob, blob_op_complete, NULL); + spdk_blob_close(blob, blob_op_complete, NULL); blob = NULL; g_blob = NULL; g_blobid = SPDK_BLOBID_INVALID; @@ -2046,15 +2043,15 @@ blob_flags(void) CU_ASSERT(g_bserrno == 0); g_bserrno = -1; - spdk_blob_close(&blob_invalid, blob_op_complete, NULL); + spdk_blob_close(blob_invalid, blob_op_complete, NULL); CU_ASSERT(g_bserrno == 0); blob_invalid = NULL; g_bserrno = -1; - spdk_blob_close(&blob_data_ro, blob_op_complete, NULL); + spdk_blob_close(blob_data_ro, blob_op_complete, NULL); CU_ASSERT(g_bserrno == 0); blob_data_ro = NULL; g_bserrno = -1; - spdk_blob_close(&blob_md_ro, blob_op_complete, NULL); + spdk_blob_close(blob_md_ro, blob_op_complete, NULL); CU_ASSERT(g_bserrno == 0); blob_md_ro = NULL; @@ -2097,9 +2094,9 @@ blob_flags(void) CU_ASSERT(__blob_to_data(blob_md_ro)->data_ro == false); CU_ASSERT(__blob_to_data(blob_md_ro)->md_ro == true); - spdk_blob_close(&blob_data_ro, blob_op_complete, NULL); + spdk_blob_close(blob_data_ro, blob_op_complete, NULL); CU_ASSERT(g_bserrno == 0); - spdk_blob_close(&blob_md_ro, blob_op_complete, NULL); + spdk_blob_close(blob_md_ro, blob_op_complete, NULL); CU_ASSERT(g_bserrno == 0); spdk_bs_unload(g_bs, bs_op_complete, NULL); diff --git a/test/unit/lib/lvol/lvol.c/lvol_ut.c b/test/unit/lib/lvol/lvol.c/lvol_ut.c index 6a2746b8d..c12906711 100644 --- a/test/unit/lib/lvol/lvol.c/lvol_ut.c +++ b/test/unit/lib/lvol/lvol.c/lvol_ut.c @@ -303,11 +303,11 @@ spdk_bs_get_cluster_size(struct spdk_blob_store *bs) return BS_CLUSTER_SIZE; } -void spdk_blob_close(struct spdk_blob **b, spdk_blob_op_complete cb_fn, void *cb_arg) +void spdk_blob_close(struct spdk_blob *b, spdk_blob_op_complete cb_fn, void *cb_arg) { - (*b)->ref--; + b->ref--; - cb_fn(cb_arg, (*b)->close_status); + cb_fn(cb_arg, b->close_status); } int