lvol: add lvol reference counter to spdk_lvol_open()

This patch is a continuation of patch https://review.gerrithub.io/#/c/383252/
on which this series should be rebased. This series introduces
spdk_lvol_open function where reference counter should be also used.

Signed-off-by: Maciej Szwed <maciej.szwed@intel.com>
Change-Id: I962db95eaba34c7c18e639076ad86696e8209196

Reviewed-on: https://review.gerrithub.io/383264
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
This commit is contained in:
Maciej Szwed 2017-10-20 16:07:10 +02:00 committed by Daniel Verkamp
parent 70e25b39ac
commit 87a0945c50

View File

@ -82,6 +82,7 @@ _spdk_lvol_open_cb(void *cb_arg, struct spdk_blob *blob, int lvolerrno)
goto end;
}
lvol->ref_count++;
lvol->blob = blob;
end:
req->cb_fn(req->cb_arg, lvol, lvolerrno);
@ -101,6 +102,12 @@ spdk_lvol_open(struct spdk_lvol *lvol, spdk_lvol_op_with_handle_complete cb_fn,
return;
}
if (lvol->ref_count > 0) {
lvol->ref_count++;
cb_fn(cb_arg, lvol, 0);
return;
}
req = calloc(1, sizeof(*req));
if (req == NULL) {
SPDK_ERRLOG("Cannot alloc memory for request structure\n");
@ -988,6 +995,15 @@ spdk_lvol_close(struct spdk_lvol *lvol, spdk_lvol_op_complete cb_fn, void *cb_ar
return;
}
if (lvol->ref_count > 1) {
lvol->ref_count--;
cb_fn(cb_arg, 0);
return;
} else if (lvol->ref_count == 0) {
cb_fn(cb_arg, -EINVAL);
return;
}
req = calloc(1, sizeof(*req));
if (!req) {
SPDK_ERRLOG("Cannot alloc memory for lvol request pointer\n");