vhost/blk: propagate bdev hotremove event to all sessions
This lets us remove the assumption of having only a single session per device and brings us closer towards supporting more. Change-Id: Ibbb7b1ed789ff0690e62c00fb5ed39ce64245028 Signed-off-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com> Reviewed-on: https://review.gerrithub.io/c/438680 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Pawel Wodkowski <pawelx.wodkowski@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
This commit is contained in:
parent
1ccd66db41
commit
e724e9d97e
@ -534,21 +534,41 @@ spdk_vhost_blk_get_dev(struct spdk_vhost_dev *vdev)
|
||||
}
|
||||
|
||||
static int
|
||||
_bdev_remove_cb(struct spdk_vhost_dev *vdev, void *arg)
|
||||
_spdk_vhost_session_bdev_remove_cb(struct spdk_vhost_dev *vdev, struct spdk_vhost_session *vsession,
|
||||
void *ctx)
|
||||
{
|
||||
struct spdk_vhost_blk_dev *bvdev = arg;
|
||||
struct spdk_vhost_blk_session *bvsession = to_blk_session(bvdev->vdev.session);
|
||||
struct spdk_vhost_blk_session *bvsession;
|
||||
|
||||
SPDK_WARNLOG("Controller %s: Hot-removing bdev - all further requests will fail.\n",
|
||||
bvdev->vdev.name);
|
||||
if (bvsession != NULL && bvsession->requestq_poller) {
|
||||
if (vdev == NULL) {
|
||||
/* Nothing to do */
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (vsession == NULL) {
|
||||
/* All sessions have been notified, time to close the bdev */
|
||||
struct spdk_vhost_blk_dev *bvdev = to_blk_dev(vdev);
|
||||
|
||||
spdk_bdev_close(bvdev->bdev_desc);
|
||||
bvdev->bdev_desc = NULL;
|
||||
bvdev->bdev = NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
bvsession = (struct spdk_vhost_blk_session *)vsession;
|
||||
if (bvsession->requestq_poller) {
|
||||
spdk_poller_unregister(&bvsession->requestq_poller);
|
||||
bvsession->requestq_poller = spdk_poller_register(no_bdev_vdev_worker, bvsession, 0);
|
||||
}
|
||||
|
||||
spdk_bdev_close(bvdev->bdev_desc);
|
||||
bvdev->bdev_desc = NULL;
|
||||
bvdev->bdev = NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
_bdev_remove_cb(struct spdk_vhost_dev *vdev, void *arg)
|
||||
{
|
||||
SPDK_WARNLOG("Controller %s: Hot-removing bdev - all further requests will fail.\n",
|
||||
vdev->name);
|
||||
spdk_vhost_dev_foreach_session(vdev, _spdk_vhost_session_bdev_remove_cb, NULL);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user