lvol: removed lvol_req nesting on error path
There is no need to nest requests inside eachother. This patch removes those instances in lvol create error path. Change-Id: Ieffcbb44957ad2aa1ac59dd41d2aec81c4edeeb3 Signed-off-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com> Reviewed-on: https://review.gerrithub.io/396939 Reviewed-by: Maciej Szwed <maciej.szwed@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Tested-by: SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
parent
9ed6bedd3e
commit
036d33abc3
@ -794,8 +794,7 @@ end:
|
|||||||
static void
|
static void
|
||||||
_spdk_lvol_delete_blob_cb(void *cb_arg, int lvolerrno)
|
_spdk_lvol_delete_blob_cb(void *cb_arg, int lvolerrno)
|
||||||
{
|
{
|
||||||
struct spdk_lvol_with_handle_req *req = cb_arg;
|
struct spdk_lvol_req *req = cb_arg;
|
||||||
struct spdk_lvol_req *lvol_req = req->cb_arg;
|
|
||||||
struct spdk_lvol *lvol = req->lvol;
|
struct spdk_lvol *lvol = req->lvol;
|
||||||
|
|
||||||
if (lvolerrno < 0) {
|
if (lvolerrno < 0) {
|
||||||
@ -819,25 +818,22 @@ _spdk_lvol_delete_blob_cb(void *cb_arg, int lvolerrno)
|
|||||||
free(lvol);
|
free(lvol);
|
||||||
|
|
||||||
end:
|
end:
|
||||||
lvol_req->cb_fn(lvol_req->cb_arg, lvolerrno);
|
req->cb_fn(req->cb_arg, lvolerrno);
|
||||||
free(lvol_req);
|
|
||||||
free(req);
|
free(req);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_spdk_lvol_destroy_cb(void *cb_arg, int lvolerrno)
|
_spdk_lvol_destroy_cb(void *cb_arg, int lvolerrno)
|
||||||
{
|
{
|
||||||
struct spdk_lvol_with_handle_req *req = cb_arg;
|
struct spdk_lvol_req *req = cb_arg;
|
||||||
struct spdk_lvol_req *lvol_req = req->cb_arg;
|
|
||||||
struct spdk_lvol *lvol = req->lvol;
|
struct spdk_lvol *lvol = req->lvol;
|
||||||
struct spdk_blob_store *bs = lvol->lvol_store->blobstore;
|
struct spdk_blob_store *bs = lvol->lvol_store->blobstore;
|
||||||
|
|
||||||
if (lvolerrno < 0) {
|
if (lvolerrno < 0) {
|
||||||
SPDK_ERRLOG("Could not delete blob on lvol\n");
|
SPDK_ERRLOG("Could not close blob on lvol\n");
|
||||||
free(lvol->unique_id);
|
free(lvol->unique_id);
|
||||||
free(lvol);
|
free(lvol);
|
||||||
lvol_req->cb_fn(lvol_req->cb_arg, lvolerrno);
|
req->cb_fn(req->cb_arg, lvolerrno);
|
||||||
free(lvol_req);
|
|
||||||
free(req);
|
free(req);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -854,10 +850,10 @@ _spdk_lvol_sync_cb(void *cb_arg, int lvolerrno)
|
|||||||
struct spdk_lvol *lvol = req->lvol;
|
struct spdk_lvol *lvol = req->lvol;
|
||||||
|
|
||||||
if (lvolerrno != 0) {
|
if (lvolerrno != 0) {
|
||||||
spdk_blob_close(lvol->blob, _spdk_lvol_delete_blob_cb, lvol);
|
spdk_blob_close(lvol->blob, _spdk_lvol_destroy_cb, req);
|
||||||
} else {
|
return;
|
||||||
lvol->ref_count++;
|
|
||||||
}
|
}
|
||||||
|
lvol->ref_count++;
|
||||||
|
|
||||||
assert(req->cb_fn != NULL);
|
assert(req->cb_fn != NULL);
|
||||||
req->cb_fn(req->cb_arg, req->lvol, lvolerrno);
|
req->cb_fn(req->cb_arg, req->lvol, lvolerrno);
|
||||||
@ -874,45 +870,38 @@ _spdk_lvol_create_open_cb(void *cb_arg, struct spdk_blob *blob, int lvolerrno)
|
|||||||
|
|
||||||
if (lvolerrno < 0) {
|
if (lvolerrno < 0) {
|
||||||
free(lvol);
|
free(lvol);
|
||||||
goto invalid;
|
req->cb_fn(req->cb_arg, NULL, lvolerrno);
|
||||||
|
free(req);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
lvol->blob = blob;
|
lvol->blob = blob;
|
||||||
lvol->blob_id = blob_id;
|
lvol->blob_id = blob_id;
|
||||||
|
|
||||||
|
TAILQ_INSERT_TAIL(&lvol->lvol_store->lvols, lvol, link);
|
||||||
|
|
||||||
uuid_unparse(lvol->lvol_store->uuid, uuid);
|
uuid_unparse(lvol->lvol_store->uuid, uuid);
|
||||||
lvol->unique_id = spdk_sprintf_alloc("%s_%"PRIu64, uuid, (uint64_t)blob_id);
|
lvol->unique_id = spdk_sprintf_alloc("%s_%"PRIu64, uuid, (uint64_t)blob_id);
|
||||||
if (!lvol->unique_id) {
|
if (!lvol->unique_id) {
|
||||||
spdk_blob_close(blob, _spdk_lvol_delete_blob_cb, lvol);
|
|
||||||
SPDK_ERRLOG("Cannot alloc memory for lvol name\n");
|
SPDK_ERRLOG("Cannot alloc memory for lvol name\n");
|
||||||
lvolerrno = -ENOMEM;
|
spdk_blob_close(blob, _spdk_lvol_destroy_cb, req);
|
||||||
free(lvol);
|
return;
|
||||||
goto invalid;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
lvolerrno = spdk_blob_resize(blob, lvol->num_clusters);
|
lvolerrno = spdk_blob_resize(blob, lvol->num_clusters);
|
||||||
if (lvolerrno < 0) {
|
if (lvolerrno < 0) {
|
||||||
spdk_blob_close(blob, _spdk_lvol_destroy_cb, lvol);
|
spdk_blob_close(blob, _spdk_lvol_destroy_cb, req);
|
||||||
goto invalid;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
lvolerrno = spdk_blob_set_xattr(blob, "name", lvol->name,
|
lvolerrno = spdk_blob_set_xattr(blob, "name", lvol->name,
|
||||||
strnlen(lvol->name, SPDK_LVOL_NAME_MAX) + 1);
|
strnlen(lvol->name, SPDK_LVOL_NAME_MAX) + 1);
|
||||||
if (lvolerrno < 0) {
|
if (lvolerrno < 0) {
|
||||||
spdk_blob_close(blob, _spdk_lvol_destroy_cb, lvol);
|
spdk_blob_close(blob, _spdk_lvol_destroy_cb, req);
|
||||||
goto invalid;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
TAILQ_INSERT_TAIL(&lvol->lvol_store->lvols, lvol, link);
|
|
||||||
|
|
||||||
spdk_blob_sync_md(blob, _spdk_lvol_sync_cb, req);
|
spdk_blob_sync_md(blob, _spdk_lvol_sync_cb, req);
|
||||||
|
|
||||||
return;
|
|
||||||
|
|
||||||
invalid:
|
|
||||||
assert(req->cb_fn != NULL);
|
|
||||||
req->cb_fn(req->cb_arg, NULL, lvolerrno);
|
|
||||||
free(req);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -1065,8 +1054,7 @@ invalid:
|
|||||||
void
|
void
|
||||||
spdk_lvol_destroy(struct spdk_lvol *lvol, spdk_lvol_op_complete cb_fn, void *cb_arg)
|
spdk_lvol_destroy(struct spdk_lvol *lvol, spdk_lvol_op_complete cb_fn, void *cb_arg)
|
||||||
{
|
{
|
||||||
struct spdk_lvol_with_handle_req *req;
|
struct spdk_lvol_req *req;
|
||||||
struct spdk_lvol_req *lvol_req;
|
|
||||||
struct spdk_blob_store *bs = lvol->lvol_store->blobstore;
|
struct spdk_blob_store *bs = lvol->lvol_store->blobstore;
|
||||||
|
|
||||||
assert(cb_fn != NULL);
|
assert(cb_fn != NULL);
|
||||||
@ -1092,17 +1080,8 @@ spdk_lvol_destroy(struct spdk_lvol *lvol, spdk_lvol_op_complete cb_fn, void *cb_
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
lvol_req = calloc(1, sizeof(*lvol_req));
|
req->cb_fn = cb_fn;
|
||||||
if (!lvol_req) {
|
req->cb_arg = cb_arg;
|
||||||
SPDK_ERRLOG("Cannot alloc memory for lvol request pointer\n");
|
|
||||||
cb_fn(cb_arg, -ENOMEM);
|
|
||||||
free(req);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
lvol_req->cb_fn = cb_fn;
|
|
||||||
lvol_req->cb_arg = cb_arg;
|
|
||||||
req->cb_arg = lvol_req;
|
|
||||||
req->lvol = lvol;
|
req->lvol = lvol;
|
||||||
|
|
||||||
spdk_bs_delete_blob(bs, lvol->blob_id, _spdk_lvol_delete_blob_cb, req);
|
spdk_bs_delete_blob(bs, lvol->blob_id, _spdk_lvol_delete_blob_cb, req);
|
||||||
|
Loading…
Reference in New Issue
Block a user