Date: Fri, 29 May 2020 02:32:48 +0000 (UTC) From: Alexander Motin <mav@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r361616 - head/sys/cam/ctl Message-ID: <202005290232.04T2WmCd065841@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: mav Date: Fri May 29 02:32:48 2020 New Revision: 361616 URL: https://svnweb.freebsd.org/changeset/base/361616 Log: Move EXPDATASN/R2TSN from PDU to CTL_PRIV_FRONTEND. We any way have per-I/O space in CTL_PRIV_FRONTEND, while for PDU private fields I have better use ideas. Plus to me such use of PDU fields looked a layering violation. MFC after: 2 weeks Sponsored by: iXsystems, Inc. Modified: head/sys/cam/ctl/ctl_frontend_iscsi.c Modified: head/sys/cam/ctl/ctl_frontend_iscsi.c ============================================================================== --- head/sys/cam/ctl/ctl_frontend_iscsi.c Fri May 29 00:46:31 2020 (r361615) +++ head/sys/cam/ctl/ctl_frontend_iscsi.c Fri May 29 02:32:48 2020 (r361616) @@ -143,9 +143,18 @@ SYSCTL_INT(_kern_cam_ctl_iscsi, OID_AUTO, maxtags, CTL #define CONN_SESSION(X) ((struct cfiscsi_session *)(X)->ic_prv0) #define PDU_SESSION(X) CONN_SESSION((X)->ip_conn) -#define PDU_EXPDATASN(X) (X)->ip_prv0 -#define PDU_R2TSN(X) (X)->ip_prv2 +struct cfiscsi_priv { + void *request; + uint32_t expdatasn; + uint32_t r2tsn; +}; +#define PRIV(io) \ + ((struct cfiscsi_priv *)&(io)->io_hdr.ctl_private[CTL_PRIV_FRONTEND]) +#define PRIV_REQUEST(io) PRIV(io)->request +#define PRIV_EXPDATASN(io) PRIV(io)->expdatasn +#define PRIV_R2TSN(io) PRIV(io)->r2tsn + static int cfiscsi_init(void); static int cfiscsi_shutdown(void); static void cfiscsi_online(void *arg); @@ -512,7 +521,7 @@ cfiscsi_pdu_handle_scsi_command(struct icl_pdu *reques } io = ctl_alloc_io(cs->cs_target->ct_port.ctl_pool_ref); ctl_zero_io(io); - io->io_hdr.ctl_private[CTL_PRIV_FRONTEND].ptr = request; + PRIV_REQUEST(io) = request; io->io_hdr.io_type = CTL_IO_SCSI; io->io_hdr.nexus.initid = cs->cs_ctl_initid; io->io_hdr.nexus.targ_port = cs->cs_target->ct_port.targ_port; @@ -568,7 +577,7 @@ cfiscsi_pdu_handle_task_request(struct icl_pdu *reques bhstmr = (struct iscsi_bhs_task_management_request *)request->ip_bhs; io = ctl_alloc_io(cs->cs_target->ct_port.ctl_pool_ref); ctl_zero_io(io); - io->io_hdr.ctl_private[CTL_PRIV_FRONTEND].ptr = request; + PRIV_REQUEST(io) = request; io->io_hdr.io_type = CTL_IO_TASK; io->io_hdr.nexus.initid = cs->cs_ctl_initid; io->io_hdr.nexus.targ_port = cs->cs_target->ct_port.targ_port; @@ -1105,7 +1114,7 @@ cfiscsi_session_terminate_tasks(struct cfiscsi_session return; /* No target yet, so nothing to do. */ io = ctl_alloc_io(cs->cs_target->ct_port.ctl_pool_ref); ctl_zero_io(io); - io->io_hdr.ctl_private[CTL_PRIV_FRONTEND].ptr = cs; + PRIV_REQUEST(io) = cs; io->io_hdr.io_type = CTL_IO_TASK; io->io_hdr.nexus.initid = cs->cs_ctl_initid; io->io_hdr.nexus.targ_port = cs->cs_target->ct_port.targ_port; @@ -2426,7 +2435,7 @@ cfiscsi_datamove_in(union ctl_io *io) const char *sg_addr; int ctl_sg_count, error, i; - request = io->io_hdr.ctl_private[CTL_PRIV_FRONTEND].ptr; + request = PRIV_REQUEST(io); cs = PDU_SESSION(request); bhssc = (const struct iscsi_bhs_scsi_command *)request->ip_bhs; @@ -2495,8 +2504,7 @@ cfiscsi_datamove_in(union ctl_io *io) bhsdi->bhsdi_initiator_task_tag = bhssc->bhssc_initiator_task_tag; bhsdi->bhsdi_target_transfer_tag = 0xffffffff; - bhsdi->bhsdi_datasn = htonl(PDU_EXPDATASN(request)); - PDU_EXPDATASN(request)++; + bhsdi->bhsdi_datasn = htonl(PRIV_EXPDATASN(io)++); bhsdi->bhsdi_buffer_offset = htonl(buffer_offset); } @@ -2640,7 +2648,7 @@ cfiscsi_datamove_out(union ctl_io *io) uint32_t target_transfer_tag; bool done; - request = io->io_hdr.ctl_private[CTL_PRIV_FRONTEND].ptr; + request = PRIV_REQUEST(io); cs = PDU_SESSION(request); bhssc = (const struct iscsi_bhs_scsi_command *)request->ip_bhs; @@ -2753,8 +2761,7 @@ cfiscsi_datamove_out(union ctl_io *io) * be running concurrently on several CPUs for a given * command. */ - bhsr2t->bhsr2t_r2tsn = htonl(PDU_R2TSN(request)); - PDU_R2TSN(request)++; + bhsr2t->bhsr2t_r2tsn = htonl(PRIV_R2TSN(io)++); /* * This is the offset within the current SCSI command; * i.e. for the first call of datamove(), it will be 0, @@ -2799,7 +2806,7 @@ cfiscsi_scsi_command_done(union ctl_io *io) struct cfiscsi_session *cs; uint16_t sense_length; - request = io->io_hdr.ctl_private[CTL_PRIV_FRONTEND].ptr; + request = PRIV_REQUEST(io); cs = PDU_SESSION(request); bhssc = (struct iscsi_bhs_scsi_command *)request->ip_bhs; KASSERT((bhssc->bhssc_opcode & ~ISCSI_BHS_OPCODE_IMMEDIATE) == @@ -2856,7 +2863,7 @@ cfiscsi_scsi_command_done(union ctl_io *io) bhssr->bhssr_response = BHSSR_RESPONSE_COMMAND_COMPLETED; bhssr->bhssr_status = io->scsiio.scsi_status; bhssr->bhssr_initiator_task_tag = bhssc->bhssc_initiator_task_tag; - bhssr->bhssr_expdatasn = htonl(PDU_EXPDATASN(request)); + bhssr->bhssr_expdatasn = htonl(PRIV_EXPDATASN(io)); if (io->scsiio.sense_len > 0) { #if 0 @@ -2886,7 +2893,7 @@ cfiscsi_task_management_done(union ctl_io *io) struct cfiscsi_softc *softc; int cold_reset = 0; - request = io->io_hdr.ctl_private[CTL_PRIV_FRONTEND].ptr; + request = PRIV_REQUEST(io); cs = PDU_SESSION(request); bhstmr = (struct iscsi_bhs_task_management_request *)request->ip_bhs; KASSERT((bhstmr->bhstmr_opcode & ~ISCSI_BHS_OPCODE_IMMEDIATE) == @@ -2982,7 +2989,7 @@ cfiscsi_done(union ctl_io *io) /* * Implicit task termination has just completed; nothing to do. */ - cs = io->io_hdr.ctl_private[CTL_PRIV_FRONTEND].ptr; + cs = PRIV_REQUEST(io); cs->cs_tasks_aborted = true; refcount_release(&cs->cs_outstanding_ctl_pdus); wakeup(__DEVOLATILE(void *, &cs->cs_outstanding_ctl_pdus)); @@ -2990,7 +2997,7 @@ cfiscsi_done(union ctl_io *io) return; } - request = io->io_hdr.ctl_private[CTL_PRIV_FRONTEND].ptr; + request = PRIV_REQUEST(io); cs = PDU_SESSION(request); switch (request->ip_bhs->bhs_opcode & ~ISCSI_BHS_OPCODE_IMMEDIATE) {
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202005290232.04T2WmCd065841>