nvmf: don't submit FLUSH command to backend which can't support it
As for NVMeoF controller, SPDK always set volatile write cache to present, so OS may submit FLUSH command to backend block device, while here, return success for those block devices which can't support FLUSH command. Change-Id: Ib764503f1986e7e0a38a1751a91d6c11e1b78865 Signed-off-by: Changpeng Liu <changpeng.liu@intel.com> Reviewed-on: https://review.gerrithub.io/402653 Tested-by: SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
parent
faf87b0ccd
commit
14a18cca32
@ -264,6 +264,16 @@ nvmf_bdev_ctrlr_flush_cmd(struct spdk_bdev *bdev, struct spdk_bdev_desc *desc,
|
|||||||
{
|
{
|
||||||
struct spdk_nvme_cpl *response = &req->rsp->nvme_cpl;
|
struct spdk_nvme_cpl *response = &req->rsp->nvme_cpl;
|
||||||
|
|
||||||
|
/* As for NVMeoF controller, SPDK always set volatile write
|
||||||
|
* cache bit to 1, return success for those block devices
|
||||||
|
* which can't support FLUSH command.
|
||||||
|
*/
|
||||||
|
if (!spdk_bdev_io_type_supported(bdev, SPDK_BDEV_IO_TYPE_FLUSH)) {
|
||||||
|
response->status.sct = SPDK_NVME_SCT_GENERIC;
|
||||||
|
response->status.sc = SPDK_NVME_SC_SUCCESS;
|
||||||
|
return SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE;
|
||||||
|
}
|
||||||
|
|
||||||
if (spdk_bdev_flush_blocks(desc, ch, 0, spdk_bdev_get_num_blocks(bdev),
|
if (spdk_bdev_flush_blocks(desc, ch, 0, spdk_bdev_get_num_blocks(bdev),
|
||||||
nvmf_bdev_ctrlr_complete_cmd, req)) {
|
nvmf_bdev_ctrlr_complete_cmd, req)) {
|
||||||
response->status.sc = SPDK_NVME_SC_INTERNAL_DEVICE_ERROR;
|
response->status.sc = SPDK_NVME_SC_INTERNAL_DEVICE_ERROR;
|
||||||
|
Loading…
Reference in New Issue
Block a user