diff --git a/modules/cas_cache/disk.c b/modules/cas_cache/disk.c index 81b8f5e..801572d 100644 --- a/modules/cas_cache/disk.c +++ b/modules/cas_cache/disk.c @@ -149,9 +149,10 @@ error_kmem: static void __cas_disk_close(struct cas_disk *dsk) { + BUG_ON(dsk->exp_obj); + close_bdev_exclusive(dsk->bd, CAS_DISK_OPEN_FMODE); - cas_exp_obj_free(dsk); kobject_put(&dsk->kobj); } diff --git a/modules/cas_cache/volume/vol_block_dev_top.c b/modules/cas_cache/volume/vol_block_dev_top.c index 679d880..184ce6f 100644 --- a/modules/cas_cache/volume/vol_block_dev_top.c +++ b/modules/cas_cache/volume/vol_block_dev_top.c @@ -582,12 +582,17 @@ static int kcas_volume_destroy_exported_object(ocf_volume_t volume) result = cas_exp_obj_destroy(bvol->dsk); if (result) - goto out; + goto err; bvol->expobj_valid = false; destroy_workqueue(bvol->expobj_wq); -out: + cas_exp_obj_unlock(bvol->dsk); + cas_exp_obj_free(bvol->dsk); + + return 0; + +err: cas_exp_obj_unlock(bvol->dsk); return result;