Received: by 2002:a25:7ec1:0:0:0:0:0 with SMTP id z184csp136388ybc; Mon, 18 Nov 2019 21:58:26 -0800 (PST) X-Google-Smtp-Source: APXvYqzWdnmTzlKXzdJ1ReaXrf28TiEMFr8O/4IOyWfIY9zwvVVy4Jtem2zXfIx/I3WoBi49PyEX X-Received: by 2002:a17:906:944d:: with SMTP id z13mr32632519ejx.58.1574143106710; Mon, 18 Nov 2019 21:58:26 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1574143106; cv=none; d=google.com; s=arc-20160816; b=y7f0WYJKeaVnj+Q8+rCAT0AZNpKZoSfHKHUNQ1TkaXsjgErS/ErxA8+mgd+y85aYwj 4301meggnFny4bvUgMISqEA8m6EcYsMYVQHpoWqWeqpwu2kSDb9AVUEc3GggLJlWmaPa QPD9Jag8CAqWTtxx6dS4lNyII4u08M8Y6dNr1V2xpctX1/ywmy8PTLTTeO8OsobAx4ci +UEQkC5MZl14UBC8Pgsx8XS5yJaHpjbOt5CYHRKgANqRjT/sjowDCUU3ODv1CFvsERVE 5e8NPHo340ElmGLv0AYA+9SaMhuavFk9vjojrVYAuIWxODrXhSWFSqUUpbjnooJo3gUN iDcw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=5sKn/owUv4nCpcOUH5lgsuxPUS9x251OuI4Wsj6v+HM=; b=walgpROZZM8tS70WCsbmSThl7LKn1e3df5DY1zdv2ZJ0si9HoyQFwuqLJGtyaMXynw P3aKTOvqezAnx1xfQ/cSx/DFnzaSb4yYsJZmRCkOUS0g1DSW9UAsCElrYjLfsijaKB8S dEu91Ylq+0y4QL7UiQjVkQYxAdelRhZi3WZ9OhTfOKfS7CRFVcFDcE9jh/WvQdm3vdbU S9SRqxrhEY+TXn+njyQY73OIzdxLACLNhjRqT+HYQvrvk0Pq4HH/3/v3yGW4L4zQ91oP hUu2E8UukQWMdWEftgFphoDc5JP0OnSAuxKY/+xWFQwE2CXuD0JLmqfgTyYt+llrxVk7 NC3w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=i4ZJefhF; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id m14si13018417ejr.395.2019.11.18.21.58.01; Mon, 18 Nov 2019 21:58:26 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=i4ZJefhF; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732126AbfKSFyW (ORCPT + 99 others); Tue, 19 Nov 2019 00:54:22 -0500 Received: from mail.kernel.org ([198.145.29.99]:52436 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731251AbfKSFyT (ORCPT ); Tue, 19 Nov 2019 00:54:19 -0500 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id E9AF321D7B; Tue, 19 Nov 2019 05:54:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1574142858; bh=RvkOci5wxm3ek8G7MxFrYQ9LQOiFLDHxp9fhoAu1JfQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=i4ZJefhFiEy4ihmlX7clxXH6MzRIj5/GiERKe2AbhaJcTGT3gZ5Z9qrCIRyiv+2rz AhmTq/FFa3YSIHA5/V0xisgNIHYO3xdpRw7jMWvKJcbodmmX1MqId+fb2k9UdiOJ5B PqxzCZt0NPgzeKW7ENZ+ysID4VEdxSOu8+xILNGk= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Michael Schmitz , Finn Thain , "Martin K. Petersen" , Sasha Levin Subject: [PATCH 4.14 225/239] scsi: NCR5380: Dont clear busy flag when abort fails Date: Tue, 19 Nov 2019 06:20:25 +0100 Message-Id: <20191119051339.919718601@linuxfoundation.org> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20191119051255.850204959@linuxfoundation.org> References: <20191119051255.850204959@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Finn Thain [ Upstream commit 45ddc1b24806cc8f1a09f23dd4e7b6e4a8ae36e1 ] When NCR5380_abort() returns FAILED, the driver forgets that the target is still busy. Hence, further commands may be sent to the target, which may fail during selection and produce the error message, "reselection after won arbitration?". Prevent this by leaving the busy flag set when NCR5380_abort() fails. Tested-by: Michael Schmitz Signed-off-by: Finn Thain Signed-off-by: Martin K. Petersen Signed-off-by: Sasha Levin --- drivers/scsi/NCR5380.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/drivers/scsi/NCR5380.c b/drivers/scsi/NCR5380.c index a290ec632248e..b13290b3e5d38 100644 --- a/drivers/scsi/NCR5380.c +++ b/drivers/scsi/NCR5380.c @@ -522,8 +522,6 @@ static void complete_cmd(struct Scsi_Host *instance, hostdata->sensing = NULL; } - hostdata->busy[scmd_id(cmd)] &= ~(1 << cmd->device->lun); - cmd->scsi_done(cmd); } @@ -1711,6 +1709,7 @@ static void NCR5380_information_transfer(struct Scsi_Host *instance) cmd->result = DID_ERROR << 16; complete_cmd(instance, cmd); hostdata->connected = NULL; + hostdata->busy[scmd_id(cmd)] &= ~(1 << cmd->device->lun); return; #endif case PHASE_DATAIN: @@ -1793,6 +1792,7 @@ static void NCR5380_information_transfer(struct Scsi_Host *instance) cmd, scmd_id(cmd), cmd->device->lun); hostdata->connected = NULL; + hostdata->busy[scmd_id(cmd)] &= ~(1 << cmd->device->lun); cmd->result &= ~0xffff; cmd->result |= cmd->SCp.Status; @@ -1952,6 +1952,7 @@ static void NCR5380_information_transfer(struct Scsi_Host *instance) NCR5380_transfer_pio(instance, &phase, &len, &data); if (msgout == ABORT) { hostdata->connected = NULL; + hostdata->busy[scmd_id(cmd)] &= ~(1 << cmd->device->lun); cmd->result = DID_ERROR << 16; complete_cmd(instance, cmd); maybe_release_dma_irq(instance); @@ -2106,13 +2107,16 @@ static void NCR5380_reselect(struct Scsi_Host *instance) dsprintk(NDEBUG_RESELECTION | NDEBUG_QUEUES, instance, "reselect: removed %p from disconnected queue\n", tmp); } else { + int target = ffs(target_mask) - 1; + shost_printk(KERN_ERR, instance, "target bitmask 0x%02x lun %d not in disconnected queue.\n", target_mask, lun); /* * Since we have an established nexus that we can't do anything * with, we must abort it. */ - do_abort(instance); + if (do_abort(instance) == 0) + hostdata->busy[target] &= ~(1 << lun); return; } @@ -2283,8 +2287,10 @@ static int NCR5380_abort(struct scsi_cmnd *cmd) out: if (result == FAILED) dsprintk(NDEBUG_ABORT, instance, "abort: failed to abort %p\n", cmd); - else + else { + hostdata->busy[scmd_id(cmd)] &= ~(1 << cmd->device->lun); dsprintk(NDEBUG_ABORT, instance, "abort: successfully aborted %p\n", cmd); + } queue_work(hostdata->work_q, &hostdata->main_task); maybe_release_dma_irq(instance); -- 2.20.1