admin-cmd.c (ab5d0b38c0475d6ff59f1a6ccf7c668b9ec2e0a4) admin-cmd.c (aaf2e048af2704da5869f27b508b288f36d5c7b7)
1// SPDX-License-Identifier: GPL-2.0
2/*
3 * NVMe admin command implementation.
4 * Copyright (c) 2015-2016 HGST, a Western Digital Company.
5 */
6#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
7#include <linux/module.h>
8#include <linux/rculist.h>

--- 165 unchanged lines hidden (view full) ---

174
175 log->iocs[nvme_cmd_read] = cpu_to_le32(1 << 0);
176 log->iocs[nvme_cmd_write] = cpu_to_le32(1 << 0);
177 log->iocs[nvme_cmd_flush] = cpu_to_le32(1 << 0);
178 log->iocs[nvme_cmd_dsm] = cpu_to_le32(1 << 0);
179 log->iocs[nvme_cmd_write_zeroes] = cpu_to_le32(1 << 0);
180}
181
1// SPDX-License-Identifier: GPL-2.0
2/*
3 * NVMe admin command implementation.
4 * Copyright (c) 2015-2016 HGST, a Western Digital Company.
5 */
6#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
7#include <linux/module.h>
8#include <linux/rculist.h>

--- 165 unchanged lines hidden (view full) ---

174
175 log->iocs[nvme_cmd_read] = cpu_to_le32(1 << 0);
176 log->iocs[nvme_cmd_write] = cpu_to_le32(1 << 0);
177 log->iocs[nvme_cmd_flush] = cpu_to_le32(1 << 0);
178 log->iocs[nvme_cmd_dsm] = cpu_to_le32(1 << 0);
179 log->iocs[nvme_cmd_write_zeroes] = cpu_to_le32(1 << 0);
180}
181
182static void nvmet_get_cmd_effects_zns(struct nvme_effects_log *log)
183{
184 log->iocs[nvme_cmd_zone_append] = cpu_to_le32(1 << 0);
185 log->iocs[nvme_cmd_zone_mgmt_send] = cpu_to_le32(1 << 0);
186 log->iocs[nvme_cmd_zone_mgmt_recv] = cpu_to_le32(1 << 0);
187}
188
182static void nvmet_execute_get_log_cmd_effects_ns(struct nvmet_req *req)
183{
184 struct nvme_effects_log *log;
185 u16 status = NVME_SC_SUCCESS;
186
187 log = kzalloc(sizeof(*log), GFP_KERNEL);
188 if (!log) {
189 status = NVME_SC_INTERNAL;
190 goto out;
191 }
192
193 switch (req->cmd->get_log_page.csi) {
194 case NVME_CSI_NVM:
195 nvmet_get_cmd_effects_nvm(log);
196 break;
189static void nvmet_execute_get_log_cmd_effects_ns(struct nvmet_req *req)
190{
191 struct nvme_effects_log *log;
192 u16 status = NVME_SC_SUCCESS;
193
194 log = kzalloc(sizeof(*log), GFP_KERNEL);
195 if (!log) {
196 status = NVME_SC_INTERNAL;
197 goto out;
198 }
199
200 switch (req->cmd->get_log_page.csi) {
201 case NVME_CSI_NVM:
202 nvmet_get_cmd_effects_nvm(log);
203 break;
204 case NVME_CSI_ZNS:
205 if (!IS_ENABLED(CONFIG_BLK_DEV_ZONED)) {
206 status = NVME_SC_INVALID_IO_CMD_SET;
207 goto free;
208 }
209 nvmet_get_cmd_effects_nvm(log);
210 nvmet_get_cmd_effects_zns(log);
211 break;
197 default:
198 status = NVME_SC_INVALID_LOG_PAGE;
199 goto free;
200 }
201
202 status = nvmet_copy_to_sgl(req, 0, log, sizeof(*log));
203free:
204 kfree(log);

--- 437 unchanged lines hidden (view full) ---

642}
643
644static bool nvmet_handle_identify_desclist(struct nvmet_req *req)
645{
646 switch (req->cmd->identify.csi) {
647 case NVME_CSI_NVM:
648 nvmet_execute_identify_desclist(req);
649 return true;
212 default:
213 status = NVME_SC_INVALID_LOG_PAGE;
214 goto free;
215 }
216
217 status = nvmet_copy_to_sgl(req, 0, log, sizeof(*log));
218free:
219 kfree(log);

--- 437 unchanged lines hidden (view full) ---

657}
658
659static bool nvmet_handle_identify_desclist(struct nvmet_req *req)
660{
661 switch (req->cmd->identify.csi) {
662 case NVME_CSI_NVM:
663 nvmet_execute_identify_desclist(req);
664 return true;
665 case NVME_CSI_ZNS:
666 if (IS_ENABLED(CONFIG_BLK_DEV_ZONED)) {
667 nvmet_execute_identify_desclist(req);
668 return true;
669 }
670 return false;
650 default:
651 return false;
652 }
653}
654
655static void nvmet_execute_identify(struct nvmet_req *req)
656{
657 if (!nvmet_check_transfer_len(req, NVME_IDENTIFY_DATA_SIZE))
658 return;
659
660 switch (req->cmd->identify.cns) {
661 case NVME_ID_CNS_NS:
662 switch (req->cmd->identify.csi) {
663 case NVME_CSI_NVM:
664 return nvmet_execute_identify_ns(req);
665 default:
666 break;
667 }
668 break;
671 default:
672 return false;
673 }
674}
675
676static void nvmet_execute_identify(struct nvmet_req *req)
677{
678 if (!nvmet_check_transfer_len(req, NVME_IDENTIFY_DATA_SIZE))
679 return;
680
681 switch (req->cmd->identify.cns) {
682 case NVME_ID_CNS_NS:
683 switch (req->cmd->identify.csi) {
684 case NVME_CSI_NVM:
685 return nvmet_execute_identify_ns(req);
686 default:
687 break;
688 }
689 break;
690 case NVME_ID_CNS_CS_NS:
691 if (IS_ENABLED(CONFIG_BLK_DEV_ZONED)) {
692 switch (req->cmd->identify.csi) {
693 case NVME_CSI_ZNS:
694 return nvmet_execute_identify_cns_cs_ns(req);
695 default:
696 break;
697 }
698 }
699 break;
669 case NVME_ID_CNS_CTRL:
670 switch (req->cmd->identify.csi) {
671 case NVME_CSI_NVM:
672 return nvmet_execute_identify_ctrl(req);
673 }
674 break;
700 case NVME_ID_CNS_CTRL:
701 switch (req->cmd->identify.csi) {
702 case NVME_CSI_NVM:
703 return nvmet_execute_identify_ctrl(req);
704 }
705 break;
706 case NVME_ID_CNS_CS_CTRL:
707 if (IS_ENABLED(CONFIG_BLK_DEV_ZONED)) {
708 switch (req->cmd->identify.csi) {
709 case NVME_CSI_ZNS:
710 return nvmet_execute_identify_cns_cs_ctrl(req);
711 default:
712 break;
713 }
714 }
715 break;
675 case NVME_ID_CNS_NS_ACTIVE_LIST:
676 switch (req->cmd->identify.csi) {
677 case NVME_CSI_NVM:
678 return nvmet_execute_identify_nslist(req);
679 default:
680 break;
681 }
682 break;

--- 323 unchanged lines hidden ---
716 case NVME_ID_CNS_NS_ACTIVE_LIST:
717 switch (req->cmd->identify.csi) {
718 case NVME_CSI_NVM:
719 return nvmet_execute_identify_nslist(req);
720 default:
721 break;
722 }
723 break;

--- 323 unchanged lines hidden ---