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;
|
||||
}
|
||||
|
||||
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++) {
|
||||
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 */
|
||||
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