Re: [PATCH v2 1/5] qla2xxx_nvmet: Add files for FC-NVMe Target support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Anil,

I love your patch! Yet something to improve:

[auto build test ERROR on mkp-scsi/for-next]
[also build test ERROR on v4.19-rc5 next-20180926]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Himanshu-Madhani/qla2xxx-Add-FC-NVMe-Target-support/20180926-132955
base:   https://git.kernel.org/pub/scm/linux/kernel/git/mkp/scsi.git for-next
config: x86_64-randconfig-s0-09270145 (attached as .config)
compiler: gcc-6 (Debian 6.4.0-9) 6.4.0 20171026
reproduce:
        # save the attached .config to linux build tree
        make ARCH=x86_64 

Note: the linux-review/Himanshu-Madhani/qla2xxx-Add-FC-NVMe-Target-support/20180926-132955 HEAD ac552b3775986d6ba46be8dfa15cc47511c2e47c builds fine.
      It only hurts bisectibility.

All errors (new ones prefixed by >>):

   In file included from drivers/scsi//qla2xxx/qla_nvmet.c:14:0:
   drivers/scsi//qla2xxx/qla_nvmet.h:30:25: error: field 'nvme_cmd_iu' has incomplete type
     struct atio7_nvme_cmnd nvme_cmd_iu;
                            ^~~~~~~~~~~
   drivers/scsi//qla2xxx/qla_nvmet.c: In function 'qlt_nvmet_ls_done':
   drivers/scsi//qla2xxx/qla_nvmet.c:48:46: error: 'struct <anonymous>' has no member named 'cmd'
     struct qla_nvmet_cmd *tgt_cmd = nvme->u.nvme.cmd;
                                                 ^
   drivers/scsi//qla2xxx/qla_nvmet.c:58:47: error: 'struct <anonymous>' has no member named 'cmd'
      sp, sp->vha, nvme->u.nvme.desc, nvme->u.nvme.cmd);
                                                  ^
   drivers/scsi//qla2xxx/qla_nvmet.c: In function 'qla_nvmet_ls_rsp':
>> drivers/scsi//qla2xxx/qla_nvmet.c:95:13: error: 'SRB_NVMET_LS' undeclared (first use in this function)
     sp->type = SRB_NVMET_LS;
                ^~~~~~~~~~~~
   drivers/scsi//qla2xxx/qla_nvmet.c:95:13: note: each undeclared identifier is reported only once for each function it appears in
   drivers/scsi//qla2xxx/qla_nvmet.c:103:14: error: 'struct <anonymous>' has no member named 'exchange_address'
     nvme->u.nvme.exchange_address = tgt_cmd->atio.u.pt_ls4.exchange_address;
                 ^
   drivers/scsi//qla2xxx/qla_nvmet.c:103:49: error: 'union <anonymous>' has no member named 'pt_ls4'
     nvme->u.nvme.exchange_address = tgt_cmd->atio.u.pt_ls4.exchange_address;
                                                    ^
   drivers/scsi//qla2xxx/qla_nvmet.c:104:14: error: 'struct <anonymous>' has no member named 'nport_handle'
     nvme->u.nvme.nport_handle = tgt_cmd->atio.u.pt_ls4.nport_handle;
                 ^
   drivers/scsi//qla2xxx/qla_nvmet.c:104:45: error: 'union <anonymous>' has no member named 'pt_ls4'
     nvme->u.nvme.nport_handle = tgt_cmd->atio.u.pt_ls4.nport_handle;
                                                ^
   drivers/scsi//qla2xxx/qla_nvmet.c:105:14: error: 'struct <anonymous>' has no member named 'vp_index'
     nvme->u.nvme.vp_index = tgt_cmd->atio.u.pt_ls4.vp_index;
                 ^
   drivers/scsi//qla2xxx/qla_nvmet.c:105:41: error: 'union <anonymous>' has no member named 'pt_ls4'
     nvme->u.nvme.vp_index = tgt_cmd->atio.u.pt_ls4.vp_index;
                                            ^
   drivers/scsi//qla2xxx/qla_nvmet.c:107:14: error: 'struct <anonymous>' has no member named 'cmd'
     nvme->u.nvme.cmd = tgt_cmd; /* To be freed */
                 ^
   drivers/scsi//qla2xxx/qla_nvmet.c: In function 'qla_nvmet_fcp_abort':
>> drivers/scsi//qla2xxx/qla_nvmet.c:178:13: error: 'SRB_NVMET_SEND_ABTS' undeclared (first use in this function)
     sp->type = SRB_NVMET_SEND_ABTS;
                ^~~~~~~~~~~~~~~~~~~
   drivers/scsi//qla2xxx/qla_nvmet.c: In function 'qla_nvmet_create_targetport':
>> drivers/scsi//qla2xxx/qla_nvmet.c:240:9: error: 'ql_dbg_nvme' undeclared (first use in this function)
     ql_dbg(ql_dbg_nvme, vha, 0xe081,
            ^~~~~~~~~~~
   drivers/scsi//qla2xxx/qla_nvmet.c:250:10: error: 'struct scsi_qla_host' has no member named 'targetport'
         &vha->targetport);
             ^~
   drivers/scsi//qla2xxx/qla_nvmet.c:257:41: error: 'struct scsi_qla_host' has no member named 'targetport'
     tport = (struct qla_nvmet_tgtport *)vha->targetport->private;
                                            ^~
   drivers/scsi//qla2xxx/qla_nvmet.c: In function 'qla_nvmet_delete':
   drivers/scsi//qla2xxx/qla_nvmet.c:276:17: error: 'volatile struct <anonymous>' has no member named 'nvmet_enabled'; did you mean 'nvme_enabled'?
     if (!vha->flags.nvmet_enabled)
                    ^
   drivers/scsi//qla2xxx/qla_nvmet.c:278:9: error: 'struct scsi_qla_host' has no member named 'targetport'
     if (vha->targetport) {
            ^~
   drivers/scsi//qla2xxx/qla_nvmet.c:279:42: error: 'struct scsi_qla_host' has no member named 'targetport'
      tport = (struct qla_nvmet_tgtport *)vha->targetport->private;
                                             ^~
   drivers/scsi//qla2xxx/qla_nvmet.c:281:10: error: 'ql_dbg_nvme' undeclared (first use in this function)
      ql_dbg(ql_dbg_nvme, vha, 0xe083,
             ^~~~~~~~~~~
   drivers/scsi//qla2xxx/qla_nvmet.c:284:37: error: 'struct scsi_qla_host' has no member named 'targetport'
      nvmet_fc_unregister_targetport(vha->targetport);
                                        ^~
>> drivers/scsi//qla2xxx/qla_nvmet.c:287:3: error: implicit declaration of function 'nvmet_release_sessions' [-Werror=implicit-function-declaration]
      nvmet_release_sessions(vha);
      ^~~~~~~~~~~~~~~~~~~~~~
   drivers/scsi//qla2xxx/qla_nvmet.c: In function 'qla_nvmet_handle_ls':
>> drivers/scsi//qla2xxx/qla_nvmet.c:316:9: error: implicit declaration of function 'qla_nvmet_find_sess_by_s_id' [-Werror=implicit-function-declaration]
     sess = qla_nvmet_find_sess_by_s_id(vha, look_up_sid);
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/scsi//qla2xxx/qla_nvmet.c:316:7: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
     sess = qla_nvmet_find_sess_by_s_id(vha, look_up_sid);
          ^
   drivers/scsi//qla2xxx/qla_nvmet.c:330:25: error: 'union <anonymous>' has no member named 'pt_ls4'
     memcpy(&tgt_cmd->atio.u.pt_ls4, pt_ls4, sizeof(struct pt_ls4_rx_unsol));
                            ^
   drivers/scsi//qla2xxx/qla_nvmet.c:341:31: error: 'struct scsi_qla_host' has no member named 'targetport'
     ret = nvmet_fc_rcv_ls_req(vha->targetport,
                                  ^~
   drivers/scsi//qla2xxx/qla_nvmet.c: In function 'qla_nvmet_process_cmd':
   drivers/scsi//qla2xxx/qla_nvmet.c:373:32: error: 'struct scsi_qla_host' has no member named 'targetport'
     ret = nvmet_fc_rcv_fcp_req(vha->targetport, &tgt_cmd->cmd.fcp_req,
                                   ^~
   drivers/scsi//qla2xxx/qla_nvmet.c: In function 'qla_nvmet_handle_abts':
   drivers/scsi//qla2xxx/qla_nvmet.c:414:28: error: 'struct scsi_qla_host' has no member named 'targetport'
     nvmet_fc_rcv_fcp_abort(vha->targetport, &cmd->cmd.fcp_req);
                               ^~
   drivers/scsi//qla2xxx/qla_nvmet.c: In function 'qla_nvmet_send_resp_ctio':
   drivers/scsi//qla2xxx/qla_nvmet.c:472:34: error: 'union <anonymous>' has no member named 'nvme_isp27'
     struct fcp_hdr *fchdr = &atio->u.nvme_isp27.fcp_hdr;
                                     ^
>> drivers/scsi//qla2xxx/qla_nvmet.c:493:13: error: 'SRB_NVMET_FCP' undeclared (first use in this function)
     sp->type = SRB_NVMET_FCP;
                ^~~~~~~~~~~~~
   drivers/scsi//qla2xxx/qla_nvmet.c:497:23: error: 'struct <anonymous>' has no member named 'cmd'
     sp->u.iocb_cmd.u.nvme.cmd = cmd;
                          ^
   drivers/scsi//qla2xxx/qla_nvmet.c:501:10: error: 'ql_dbg_nvme' undeclared (first use in this function)
      ql_dbg(ql_dbg_nvme, vha, 0x3067,
             ^~~~~~~~~~~
   drivers/scsi//qla2xxx/qla_nvmet.c:517:31: error: 'union <anonymous>' has no member named 'nvme_isp27'
     ctio->exchange_addr = atio->u.nvme_isp27.exchange_addr;
                                  ^
   drivers/scsi//qla2xxx/qla_nvmet.c:521:19: error: 'union <anonymous>' has no member named 'nvme_isp27'
     c_flags = atio->u.nvme_isp27.attr << 9;
                      ^
   drivers/scsi//qla2xxx/qla_nvmet.c: In function 'qla_nvmet_send_abts_ctio':
>> drivers/scsi//qla2xxx/qla_nvmet.c:747:13: error: 'SRB_NVMET_ABTS' undeclared (first use in this function)
     sp->type = SRB_NVMET_ABTS;
                ^~~~~~~~~~~~~~
   drivers/scsi//qla2xxx/qla_nvmet.c:753:10: error: 'ql_dbg_nvme' undeclared (first use in this function)
      ql_dbg(ql_dbg_nvme, vha, 0x3067,
             ^~~~~~~~~~~
   cc1: some warnings being treated as errors

vim +/SRB_NVMET_LS +95 drivers/scsi//qla2xxx/qla_nvmet.c

    36	
    37	/*
    38	 * qlt_nvmet_ls_done -
    39	 * Invoked by the firmware interface to indicate the completion
    40	 * of an LS cmd
    41	 * Free all associated resources of the LS cmd
    42	 */
    43	static void qlt_nvmet_ls_done(void *ptr, int res)
    44	{
    45		struct srb *sp = ptr;
    46		struct srb_iocb   *nvme = &sp->u.iocb_cmd;
    47		struct nvmefc_tgt_ls_req *rsp = nvme->u.nvme.desc;
  > 48		struct qla_nvmet_cmd *tgt_cmd = nvme->u.nvme.cmd;
    49	
    50		if (!IS_ENABLED(CONFIG_NVME_TARGET_FC))
    51			return;
    52	
    53		ql_log(ql_log_info, sp->vha, 0x11000,
    54			"Done with NVME LS4 req\n");
    55	
    56		ql_log(ql_log_info, sp->vha, 0x11001,
    57			"sp: %p vha: %p, rsp: %p, cmd: %p\n",
    58			sp, sp->vha, nvme->u.nvme.desc, nvme->u.nvme.cmd);
    59	
    60		rsp->done(rsp);
    61		/* Free tgt_cmd */
    62		kfree(tgt_cmd->buf);
    63		kfree(tgt_cmd);
    64		qla2x00_rel_sp(sp);
    65	}
    66	
    67	/*
    68	 * qla_nvmet_ls_rsp -
    69	 * Invoked by the nvme-t to complete the LS req.
    70	 * Prepare and send a response CTIO to the firmware.
    71	 */
    72	static int
    73	qla_nvmet_ls_rsp(struct nvmet_fc_target_port *tgtport,
    74				struct nvmefc_tgt_ls_req *rsp)
    75	{
    76		struct qla_nvmet_cmd *tgt_cmd =
    77			container_of(rsp, struct qla_nvmet_cmd, cmd.ls_req);
    78		struct scsi_qla_host *vha = tgt_cmd->vha;
    79		struct srb_iocb   *nvme;
    80		int     rval = QLA_FUNCTION_FAILED;
    81		srb_t *sp;
    82	
    83		ql_log(ql_log_info, vha, 0x11002,
    84			"Dumping the NVMET-LS response buffer\n");
    85		ql_dump_buffer(ql_dbg_disc + ql_dbg_buffer, vha, 0x2075,
    86			(uint8_t *)rsp->rspbuf, rsp->rsplen);
    87	
    88		/* Alloc SRB structure */
    89		sp = qla2x00_get_sp(vha, NULL, GFP_ATOMIC);
    90		if (!sp) {
    91			ql_log(ql_log_info, vha, 0x11003, "Failed to allocate SRB\n");
    92			return -ENOMEM;
    93		}
    94	
  > 95		sp->type = SRB_NVMET_LS;
    96		sp->done = qlt_nvmet_ls_done;
    97		sp->vha = vha;
    98		sp->fcport = tgt_cmd->fcport;
    99	
   100		nvme = &sp->u.iocb_cmd;
   101		nvme->u.nvme.rsp_dma = rsp->rspdma;
   102		nvme->u.nvme.rsp_len = rsp->rsplen;
   103		nvme->u.nvme.exchange_address = tgt_cmd->atio.u.pt_ls4.exchange_address;
   104		nvme->u.nvme.nport_handle = tgt_cmd->atio.u.pt_ls4.nport_handle;
 > 105		nvme->u.nvme.vp_index = tgt_cmd->atio.u.pt_ls4.vp_index;
   106	
 > 107		nvme->u.nvme.cmd = tgt_cmd; /* To be freed */
   108		nvme->u.nvme.desc = rsp; /* Call back to nvmet */
   109	
   110		rval = qla2x00_start_sp(sp);
   111		if (rval != QLA_SUCCESS) {
   112			ql_log(ql_log_warn, vha, 0x11004,
   113				"qla2x00_start_sp failed = %d\n", rval);
   114			return rval;
   115		}
   116	
   117		return 0;
   118	}
   119	
   120	/*
   121	 * qla_nvmet_fcp_op -
   122	 * Invoked by the nvme-t to complete the IO.
   123	 * Prepare and send a response CTIO to the firmware.
   124	 */
   125	static int
   126	qla_nvmet_fcp_op(struct nvmet_fc_target_port *tgtport,
   127				struct nvmefc_tgt_fcp_req *rsp)
   128	{
   129		struct qla_nvmet_cmd *tgt_cmd =
   130			container_of(rsp, struct qla_nvmet_cmd, cmd.fcp_req);
   131		struct scsi_qla_host *vha = tgt_cmd->vha;
   132	
   133		if (!IS_ENABLED(CONFIG_NVME_TARGET_FC))
   134			return 0;
   135	
   136		/* Prepare and send CTIO 82h */
   137		qla_nvmet_send_resp_ctio(vha->qpair, tgt_cmd, rsp);
   138	
   139		return 0;
   140	}
   141	
   142	/*
   143	 * qla_nvmet_fcp_abort_done
   144	 * free up the used resources
   145	 */
   146	static void qla_nvmet_fcp_abort_done(void *ptr, int res)
   147	{
   148		srb_t *sp = ptr;
   149	
   150		qla2x00_rel_sp(sp);
   151	}
   152	
   153	/*
   154	 * qla_nvmet_fcp_abort -
   155	 * Invoked by the nvme-t to abort an IO
   156	 * Send an abort to the firmware
   157	 */
   158	static void
   159	qla_nvmet_fcp_abort(struct nvmet_fc_target_port *tgtport,
   160				struct nvmefc_tgt_fcp_req *req)
   161	{
   162		struct qla_nvmet_cmd *tgt_cmd =
   163			container_of(req, struct qla_nvmet_cmd, cmd.fcp_req);
   164		struct scsi_qla_host *vha = tgt_cmd->vha;
   165		struct qla_hw_data *ha = vha->hw;
   166		srb_t *sp;
   167	
   168		if (!IS_ENABLED(CONFIG_NVME_TARGET_FC))
   169			return;
   170	
   171		/* Alloc SRB structure */
   172		sp = qla2x00_get_sp(vha, NULL, GFP_KERNEL);
   173		if (!sp) {
   174			ql_log(ql_log_info, vha, 0x11005, "Failed to allocate SRB\n");
   175			return;
   176		}
   177	
 > 178		sp->type = SRB_NVMET_SEND_ABTS;
   179		sp->done = qla_nvmet_fcp_abort_done;
   180		sp->vha = vha;
   181		sp->fcport = tgt_cmd->fcport;
   182	
   183		ha->isp_ops->abort_command(sp);
   184	
   185	}
   186	
   187	/*
   188	 * qla_nvmet_fcp_req_release -
   189	 * Delete the cmd from the list and free the cmd
   190	 */
   191	static void
   192	qla_nvmet_fcp_req_release(struct nvmet_fc_target_port *tgtport,
   193				struct nvmefc_tgt_fcp_req *rsp)
   194	{
   195		struct qla_nvmet_cmd *tgt_cmd =
   196			container_of(rsp, struct qla_nvmet_cmd, cmd.fcp_req);
   197		scsi_qla_host_t *vha = tgt_cmd->vha;
   198		unsigned long flags;
   199	
   200		if (!IS_ENABLED(CONFIG_NVME_TARGET_FC))
   201			return;
   202	
   203		spin_lock_irqsave(&vha->cmd_list_lock, flags);
   204		list_del(&tgt_cmd->cmd_list);
   205		spin_unlock_irqrestore(&vha->cmd_list_lock, flags);
   206	
   207		kfree(tgt_cmd);
   208	}
   209	
   210	static struct nvmet_fc_target_template qla_nvmet_fc_transport = {
   211		.targetport_delete	= qla_nvmet_targetport_delete,
   212		.xmt_ls_rsp		= qla_nvmet_ls_rsp,
   213		.fcp_op			= qla_nvmet_fcp_op,
   214		.fcp_abort		= qla_nvmet_fcp_abort,
   215		.fcp_req_release	= qla_nvmet_fcp_req_release,
   216		.max_hw_queues		= 8,
   217		.max_sgl_segments	= 128,
   218		.max_dif_sgl_segments	= 64,
   219		.dma_boundary		= 0xFFFFFFFF,
   220		.target_features	= NVMET_FCTGTFEAT_READDATA_RSP |
   221						NVMET_FCTGTFEAT_CMD_IN_ISR |
   222						NVMET_FCTGTFEAT_OPDONE_IN_ISR,
   223		.target_priv_sz	= sizeof(struct nvme_private),
   224	};
   225	
   226	/*
   227	 * qla_nvmet_create_targetport -
   228	 * Create a targetport. Registers the template with the nvme-t
   229	 * layer
   230	 */
   231	int qla_nvmet_create_targetport(struct scsi_qla_host *vha)
   232	{
   233		struct nvmet_fc_port_info pinfo;
   234		struct qla_nvmet_tgtport *tport;
   235		int error = 0;
   236	
   237		if (!IS_ENABLED(CONFIG_NVME_TARGET_FC))
   238			return 0;
   239	
 > 240		ql_dbg(ql_dbg_nvme, vha, 0xe081,
   241			"Creating target port for :%p\n", vha);
   242	
   243		memset(&pinfo, 0, (sizeof(struct nvmet_fc_port_info)));
   244		pinfo.node_name = wwn_to_u64(vha->node_name);
   245		pinfo.port_name = wwn_to_u64(vha->port_name);
   246		pinfo.port_id	= vha->d_id.b24;
   247	
   248		error = nvmet_fc_register_targetport(&pinfo,
   249		    &qla_nvmet_fc_transport, &vha->hw->pdev->dev,
   250		    &vha->targetport);
   251	
   252		if (error) {
   253			ql_dbg(ql_dbg_nvme, vha, 0xe082,
   254				"Cannot register NVME transport:%d\n", error);
   255			return error;
   256		}
   257		tport = (struct qla_nvmet_tgtport *)vha->targetport->private;
   258		tport->vha = vha;
   259		ql_dbg(ql_dbg_nvme, vha, 0xe082,
   260			" Registered NVME transport:%p WWPN:%llx\n",
   261			tport, pinfo.port_name);
   262		return 0;
   263	}
   264	
   265	/*
   266	 * qla_nvmet_delete -
   267	 * Delete a targetport.
   268	 */
   269	int qla_nvmet_delete(struct scsi_qla_host *vha)
   270	{
   271		struct qla_nvmet_tgtport *tport;
   272	
   273		if (!IS_ENABLED(CONFIG_NVME_TARGET_FC))
   274			return 0;
   275	
   276		if (!vha->flags.nvmet_enabled)
   277			return 0;
   278		if (vha->targetport) {
 > 279			tport = (struct qla_nvmet_tgtport *)vha->targetport->private;
   280	
   281			ql_dbg(ql_dbg_nvme, vha, 0xe083,
   282				"Deleting target port :%p\n", tport);
   283			init_completion(&tport->tport_del);
 > 284			nvmet_fc_unregister_targetport(vha->targetport);
   285			wait_for_completion_timeout(&tport->tport_del, 5);
   286	
 > 287			nvmet_release_sessions(vha);
   288		}
   289		return 0;
   290	}
   291	

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Attachment: .config.gz
Description: application/gzip


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]

  Powered by Linux