From owner-svn-src-all@freebsd.org Tue Jun 9 02:01:10 2020 Return-Path: Delivered-To: svn-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 8190D3433F6; Tue, 9 Jun 2020 02:01:10 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 49gtdL2sKbz4CSR; Tue, 9 Jun 2020 02:01:10 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 5D687DE62; Tue, 9 Jun 2020 02:01:10 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 05921ACC058578; Tue, 9 Jun 2020 02:01:10 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 05921A5A058577; Tue, 9 Jun 2020 02:01:10 GMT (envelope-from mav@FreeBSD.org) Message-Id: <202006090201.05921A5A058577@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Tue, 9 Jun 2020 02:01:10 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r361951 - stable/12/sys/cam/ctl X-SVN-Group: stable-12 X-SVN-Commit-Author: mav X-SVN-Commit-Paths: stable/12/sys/cam/ctl X-SVN-Commit-Revision: 361951 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 09 Jun 2020 02:01:10 -0000 Author: mav Date: Tue Jun 9 02:01:09 2020 New Revision: 361951 URL: https://svnweb.freebsd.org/changeset/base/361951 Log: MFC r361616: 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. Modified: stable/12/sys/cam/ctl/ctl_frontend_iscsi.c Directory Properties: stable/12/ (props changed) Modified: stable/12/sys/cam/ctl/ctl_frontend_iscsi.c ============================================================================== --- stable/12/sys/cam/ctl/ctl_frontend_iscsi.c Tue Jun 9 02:00:36 2020 (r361950) +++ stable/12/sys/cam/ctl/ctl_frontend_iscsi.c Tue Jun 9 02:01:09 2020 (r361951) @@ -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) {