diff options
Diffstat (limited to 'drivers/nvme/target/admin-cmd.c')
| -rw-r--r-- | drivers/nvme/target/admin-cmd.c | 81 | 
1 files changed, 33 insertions, 48 deletions
diff --git a/drivers/nvme/target/admin-cmd.c b/drivers/nvme/target/admin-cmd.c index 80099df37314..39cb570f833d 100644 --- a/drivers/nvme/target/admin-cmd.c +++ b/drivers/nvme/target/admin-cmd.c @@ -668,21 +668,11 @@ out:  	nvmet_req_complete(req, status);  } -static bool nvmet_handle_identify_desclist(struct nvmet_req *req) +static void nvmet_execute_identify_ctrl_nvm(struct nvmet_req *req)  { -	switch (req->cmd->identify.csi) { -	case NVME_CSI_NVM: -		nvmet_execute_identify_desclist(req); -		return true; -	case NVME_CSI_ZNS: -		if (IS_ENABLED(CONFIG_BLK_DEV_ZONED)) { -			nvmet_execute_identify_desclist(req); -			return true; -		} -		return false; -	default: -		return false; -	} +	/* Not supported: return zeroes */ +	nvmet_req_complete(req, +		   nvmet_zero_sgl(req, 0, sizeof(struct nvme_id_ctrl_nvm)));  }  static void nvmet_execute_identify(struct nvmet_req *req) @@ -692,54 +682,49 @@ static void nvmet_execute_identify(struct nvmet_req *req)  	switch (req->cmd->identify.cns) {  	case NVME_ID_CNS_NS: +		nvmet_execute_identify_ns(req); +		return; +	case NVME_ID_CNS_CTRL: +		nvmet_execute_identify_ctrl(req); +		return; +	case NVME_ID_CNS_NS_ACTIVE_LIST: +		nvmet_execute_identify_nslist(req); +		return; +	case NVME_ID_CNS_NS_DESC_LIST: +		nvmet_execute_identify_desclist(req); +		return; +	case NVME_ID_CNS_CS_NS:  		switch (req->cmd->identify.csi) {  		case NVME_CSI_NVM: -			return nvmet_execute_identify_ns(req); -		default: +			/* Not supported */  			break; -		} -		break; -	case NVME_ID_CNS_CS_NS: -		if (IS_ENABLED(CONFIG_BLK_DEV_ZONED)) { -			switch (req->cmd->identify.csi) { -			case NVME_CSI_ZNS: -				return nvmet_execute_identify_cns_cs_ns(req); -			default: -				break; +		case NVME_CSI_ZNS: +			if (IS_ENABLED(CONFIG_BLK_DEV_ZONED)) { +				nvmet_execute_identify_ns_zns(req); +				return;  			} -		} -		break; -	case NVME_ID_CNS_CTRL: -		switch (req->cmd->identify.csi) { -		case NVME_CSI_NVM: -			return nvmet_execute_identify_ctrl(req); +			break;  		}  		break;  	case NVME_ID_CNS_CS_CTRL: -		if (IS_ENABLED(CONFIG_BLK_DEV_ZONED)) { -			switch (req->cmd->identify.csi) { -			case NVME_CSI_ZNS: -				return nvmet_execute_identify_cns_cs_ctrl(req); -			default: -				break; -			} -		} -		break; -	case NVME_ID_CNS_NS_ACTIVE_LIST:  		switch (req->cmd->identify.csi) {  		case NVME_CSI_NVM: -			return nvmet_execute_identify_nslist(req); -		default: +			nvmet_execute_identify_ctrl_nvm(req); +			return; +		case NVME_CSI_ZNS: +			if (IS_ENABLED(CONFIG_BLK_DEV_ZONED)) { +				nvmet_execute_identify_ctrl_zns(req); +				return; +			}  			break;  		}  		break; -	case NVME_ID_CNS_NS_DESC_LIST: -		if (nvmet_handle_identify_desclist(req) == true) -			return; -		break;  	} -	nvmet_req_cns_error_complete(req); +	pr_debug("unhandled identify cns %d on qid %d\n", +	       req->cmd->identify.cns, req->sq->qid); +	req->error_loc = offsetof(struct nvme_identify, cns); +	nvmet_req_complete(req, NVME_SC_INVALID_FIELD | NVME_SC_DNR);  }  /*  |