From owner-svn-src-all@FreeBSD.ORG Fri Jan 16 12:35:56 2015 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 7E103D3C; Fri, 16 Jan 2015 12:35:56 +0000 (UTC) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 6AD65B78; Fri, 16 Jan 2015 12:35:56 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id t0GCZuqP039459; Fri, 16 Jan 2015 12:35:56 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.9/8.14.9/Submit) id t0GCZuXs039458; Fri, 16 Jan 2015 12:35:56 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201501161235.t0GCZuXs039458@svn.freebsd.org> X-Authentication-Warning: svn.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Fri, 16 Jan 2015 12:35:56 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r277247 - head/sys/cam/ctl X-SVN-Group: head 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.18-1 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: Fri, 16 Jan 2015 12:35:56 -0000 Author: mav Date: Fri Jan 16 12:35:55 2015 New Revision: 277247 URL: https://svnweb.freebsd.org/changeset/base/277247 Log: Don't count status as sent until CTIO completes successfully. If we aggregated status sending with data move and got error, allow status to be updated and resent again separately. Without this command may stuck without status sent at all. MFC after: 2 weeks Modified: head/sys/cam/ctl/scsi_ctl.c Modified: head/sys/cam/ctl/scsi_ctl.c ============================================================================== --- head/sys/cam/ctl/scsi_ctl.c Fri Jan 16 12:16:21 2015 (r277246) +++ head/sys/cam/ctl/scsi_ctl.c Fri Jan 16 12:35:55 2015 (r277247) @@ -891,7 +891,6 @@ ctlfestart(struct cam_periph *periph, un (cmd_info->flags & CTLFE_CMD_PIECEWISE) == 0 && ((io->io_hdr.flags & CTL_FLAG_DMA_QUEUED) == 0 || io->io_hdr.status == CTL_SUCCESS)) { - io->io_hdr.flags |= CTL_FLAG_STATUS_SENT; flags |= CAM_SEND_STATUS; scsi_status = io->scsiio.scsi_status; csio->sense_len = io->scsiio.sense_len; @@ -1265,6 +1264,10 @@ ctlfedone(struct cam_periph *periph, uni break; } + if ((done_ccb->ccb_h.flags & CAM_SEND_STATUS) && + (done_ccb->ccb_h.status & CAM_STATUS_MASK) == CAM_REQ_CMP) + io->io_hdr.flags |= CTL_FLAG_STATUS_SENT; + /* * If we were sending status back to the initiator, free up * resources. If we were doing a datamove, call the