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 --- |