Date: Tue, 24 Sep 2013 21:44:23 +0000 (UTC) From: Neel Natu <neel@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r255864 - in projects/bhyve_npt_pmap/sys: amd64/amd64 cam/ctl Message-ID: <201309242144.r8OLiNDn070730@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: neel Date: Tue Sep 24 21:44:23 2013 New Revision: 255864 URL: http://svnweb.freebsd.org/changeset/base/255864 Log: IFC @r255849 Modified: projects/bhyve_npt_pmap/sys/amd64/amd64/pmap.c projects/bhyve_npt_pmap/sys/cam/ctl/ctl_frontend_iscsi.c Directory Properties: projects/bhyve_npt_pmap/ (props changed) projects/bhyve_npt_pmap/sys/ (props changed) Modified: projects/bhyve_npt_pmap/sys/amd64/amd64/pmap.c ============================================================================== --- projects/bhyve_npt_pmap/sys/amd64/amd64/pmap.c Tue Sep 24 21:06:50 2013 (r255863) +++ projects/bhyve_npt_pmap/sys/amd64/amd64/pmap.c Tue Sep 24 21:44:23 2013 (r255864) @@ -5886,13 +5886,13 @@ pmap_clear_modify(vm_page_t m) */ if ((m->aflags & PGA_WRITEABLE) == 0) return; + pvh = pa_to_pvh(VM_PAGE_TO_PHYS(m)); rw_rlock(&pvh_global_lock); lock = VM_PAGE_TO_PV_LIST_LOCK(m); rw_wlock(lock); restart: if ((m->flags & PG_FICTITIOUS) != 0) goto small_mappings; - pvh = pa_to_pvh(VM_PAGE_TO_PHYS(m)); TAILQ_FOREACH_SAFE(pv, &pvh->pv_list, pv_next, next_pv) { pmap = PV_PMAP(pv); if (!PMAP_TRYLOCK(pmap)) { Modified: projects/bhyve_npt_pmap/sys/cam/ctl/ctl_frontend_iscsi.c ============================================================================== --- projects/bhyve_npt_pmap/sys/cam/ctl/ctl_frontend_iscsi.c Tue Sep 24 21:06:50 2013 (r255863) +++ projects/bhyve_npt_pmap/sys/cam/ctl/ctl_frontend_iscsi.c Tue Sep 24 21:44:23 2013 (r255864) @@ -147,7 +147,7 @@ static int cfiscsi_devid(struct ctl_scsi static void cfiscsi_datamove(union ctl_io *io); static void cfiscsi_done(union ctl_io *io); static uint32_t cfiscsi_map_lun(void *arg, uint32_t lun); -static void cfiscsi_pdu_update_cmdsn(const struct icl_pdu *request); +static bool cfiscsi_pdu_update_cmdsn(const struct icl_pdu *request); static void cfiscsi_pdu_handle_nop_out(struct icl_pdu *request); static void cfiscsi_pdu_handle_scsi_command(struct icl_pdu *request); static void cfiscsi_pdu_handle_task_request(struct icl_pdu *request); @@ -182,7 +182,7 @@ cfiscsi_pdu_new_response(struct icl_pdu return (icl_pdu_new_bhs(request->ip_conn, flags)); } -static void +static bool cfiscsi_pdu_update_cmdsn(const struct icl_pdu *request) { const struct iscsi_bhs_scsi_command *bhssc; @@ -206,7 +206,7 @@ cfiscsi_pdu_update_cmdsn(const struct ic */ if ((request->ip_bhs->bhs_opcode & ~ISCSI_BHS_OPCODE_IMMEDIATE) == ISCSI_BHS_OPCODE_SCSI_DATA_OUT) - return; + return (false); /* * We're only using fields common for all the request @@ -226,38 +226,39 @@ cfiscsi_pdu_update_cmdsn(const struct ic #endif /* - * XXX: The target MUST silently ignore any non-immediate command - * outside of this range or non-immediate duplicates within - * the range. + * The target MUST silently ignore any non-immediate command outside + * of this range. + * + * XXX: ... or non-immediate duplicates within the range. */ - if (cmdsn != cs->cs_cmdsn) { + if (cmdsn < cs->cs_cmdsn || cmdsn > cs->cs_cmdsn + maxcmdsn_delta) { + CFISCSI_SESSION_UNLOCK(cs); CFISCSI_SESSION_WARN(cs, "received PDU with CmdSN %d, " "while expected CmdSN was %d", cmdsn, cs->cs_cmdsn); - cs->cs_cmdsn = cmdsn + 1; - CFISCSI_SESSION_UNLOCK(cs); - return; + return (true); } - /* - * XXX: The CmdSN of the rejected command PDU (if it is a non-immediate - * command) MUST NOT be considered received by the target - * (i.e., a command sequence gap must be assumed for the CmdSN) - */ - if ((request->ip_bhs->bhs_opcode & ISCSI_BHS_OPCODE_IMMEDIATE) == 0) cs->cs_cmdsn++; CFISCSI_SESSION_UNLOCK(cs); + + return (false); } static void cfiscsi_pdu_handle(struct icl_pdu *request) { struct cfiscsi_session *cs; + bool ignore; cs = PDU_SESSION(request); - cfiscsi_pdu_update_cmdsn(request); + ignore = cfiscsi_pdu_update_cmdsn(request); + if (ignore) { + icl_pdu_free(request); + return; + } /* * Handle the PDU; this includes e.g. receiving the remaining
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201309242144.r8OLiNDn070730>