bdev/raid: Process only the first call of destroy_raid_bdev RPC
We have to process only the first call of destroy_raid_bdev RPC
for the same RAID bdev.
The existing flag destruct_called cannot be used for that purpose
because of the following reason.
destruct_called is set to true in both of
- destroy_raid_bdev RPC
- hot removal of any base bdev.
If destruct_called is set in destroy_raid_bdev RPC, destroy_raid_bdev
RPC must return immediately, but if destruct_called is set in hot
removal of any base bdev, destroy_raid_bdev RPC must go forward
with the current logic.
Hence add another flag destroy_started to struct raid_bdev and
use it.
Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/450885 (master)
(cherry picked from commit 0d9a2b504a
)
Change-Id: Ifeefcaa1d289499342d8bb9bc162ded65e0368dd
Signed-off-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com>
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/457560
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com>
This commit is contained in:
parent
de271dbe13
commit
30c4390ea0
@ -1848,6 +1848,17 @@ raid_bdev_remove_base_devices(struct raid_bdev_config *raid_cfg,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (raid_bdev->destroy_started) {
|
||||||
|
SPDK_DEBUGLOG(SPDK_LOG_BDEV_RAID, "destroying raid bdev %s is already started\n",
|
||||||
|
raid_cfg->name);
|
||||||
|
if (cb_fn) {
|
||||||
|
cb_fn(cb_arg, -EALREADY);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
raid_bdev->destroy_started = true;
|
||||||
|
|
||||||
for (i = 0; i < raid_bdev->num_base_bdevs; i++) {
|
for (i = 0; i < raid_bdev->num_base_bdevs; i++) {
|
||||||
info = &raid_bdev->base_bdev_info[i];
|
info = &raid_bdev->base_bdev_info[i];
|
||||||
|
|
||||||
|
@ -127,6 +127,9 @@ struct raid_bdev {
|
|||||||
|
|
||||||
/* Set to true if destruct is called for this raid bdev */
|
/* Set to true if destruct is called for this raid bdev */
|
||||||
bool destruct_called;
|
bool destruct_called;
|
||||||
|
|
||||||
|
/* Set to true if destroy of this raid bdev is started. */
|
||||||
|
bool destroy_started;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
Reference in New Issue
Block a user