From 236f84dae76e945aa8c73dd31f1331b7fbfc2d71 Mon Sep 17 00:00:00 2001 From: Maciej Szwed Date: Mon, 4 Dec 2017 11:38:24 +0100 Subject: [PATCH] lvol: don't return lvs_bdev if it's being destroyed During hot remove of lvol store some lvols can already be in a process of removal. We should not start another removal process for lvol that is already being removed. Signed-off-by: Maciej Szwed Change-Id: Ifc91e4cee11ee63af04eac3729d014d7c04ff98b Reviewed-on: https://review.gerrithub.io/390217 Reviewed-by: Tomasz Zawadzki Reviewed-by: Jim Harris Reviewed-by: Daniel Verkamp Tested-by: SPDK Automated Test System Reviewed-by: Ben Walker --- lib/bdev/lvol/vbdev_lvol.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/bdev/lvol/vbdev_lvol.c b/lib/bdev/lvol/vbdev_lvol.c index f7e34c544..9a70c390b 100644 --- a/lib/bdev/lvol/vbdev_lvol.c +++ b/lib/bdev/lvol/vbdev_lvol.c @@ -73,7 +73,12 @@ vbdev_get_lvs_bdev_by_bdev(struct spdk_bdev *bdev_orig) while (lvs_bdev != NULL) { if (lvs_bdev->bdev == bdev_orig) { - return lvs_bdev; + if (lvs_bdev->req != NULL) { + /* We do not allow access to lvs that are being destroyed */ + return NULL; + } else { + return lvs_bdev; + } } lvs_bdev = vbdev_lvol_store_next(lvs_bdev); }