if (!ns) {
                pr_err("Could not find namespace id : %d\n",
                                le32_to_cpu(req->cmd->get_log_page.nsid));
+               req->error_loc = offsetof(struct nvme_rw_command, nsid);
                return NVME_SC_INVALID_NS;
        }
 
        u16 status = 0;
 
        if (le32_to_cpu(req->cmd->identify.nsid) == NVME_NSID_ALL) {
+               req->error_loc = offsetof(struct nvme_identify, nsid);
                status = NVME_SC_INVALID_NS | NVME_SC_DNR;
                goto out;
        }
 
        ns = nvmet_find_namespace(req->sq->ctrl, req->cmd->identify.nsid);
        if (!ns) {
+               req->error_loc = offsetof(struct nvme_identify, nsid);
                status = NVME_SC_INVALID_NS | NVME_SC_DNR;
                goto out;
        }
        u16 status = NVME_SC_FEATURE_NOT_CHANGEABLE;
 
        req->ns = nvmet_find_namespace(req->sq->ctrl, req->cmd->rw.nsid);
-       if (unlikely(!req->ns))
+       if (unlikely(!req->ns)) {
+               req->error_loc = offsetof(struct nvme_common_command, nsid);
                return status;
+       }
 
        mutex_lock(&subsys->lock);
        switch (write_protect) {
 {
        u32 val32 = le32_to_cpu(req->cmd->common.cdw11);
 
-       if (val32 & ~mask)
+       if (val32 & ~mask) {
+               req->error_loc = offsetof(struct nvme_common_command, cdw11);
                return NVME_SC_INVALID_FIELD | NVME_SC_DNR;
+       }
 
        WRITE_ONCE(req->sq->ctrl->aen_enabled, val32);
        nvmet_set_result(req, val32);
                status = nvmet_set_feat_write_protect(req);
                break;
        default:
+               req->error_loc = offsetof(struct nvme_common_command, cdw10);
                status = NVME_SC_INVALID_FIELD | NVME_SC_DNR;
                break;
        }
        u32 result;
 
        req->ns = nvmet_find_namespace(req->sq->ctrl, req->cmd->common.nsid);
-       if (!req->ns)
+       if (!req->ns)  {
+               req->error_loc = offsetof(struct nvme_common_command, nsid);
                return NVME_SC_INVALID_NS | NVME_SC_DNR;
-
+       }
        mutex_lock(&subsys->lock);
        if (req->ns->readonly == true)
                result = NVME_NS_WRITE_PROTECT;
        case NVME_FEAT_HOST_ID:
                /* need 128-bit host identifier flag */
                if (!(req->cmd->common.cdw11 & cpu_to_le32(1 << 0))) {
+                       req->error_loc =
+                               offsetof(struct nvme_common_command, cdw11);
                        status = NVME_SC_INVALID_FIELD | NVME_SC_DNR;
                        break;
                }
                status = nvmet_get_feat_write_protect(req);
                break;
        default:
+               req->error_loc =
+                       offsetof(struct nvme_common_command, cdw10);
                status = NVME_SC_INVALID_FIELD | NVME_SC_DNR;
                break;
        }
 
        pr_err("unhandled cmd %d on qid %d\n", cmd->common.opcode,
               req->sq->qid);
+       req->error_loc = offsetof(struct nvme_common_command, opcode);
        return NVME_SC_INVALID_OPCODE | NVME_SC_DNR;
 }