Received: by 2002:a17:90a:88:0:0:0:0 with SMTP id a8csp14362pja; Fri, 22 Nov 2019 02:49:33 -0800 (PST) X-Google-Smtp-Source: APXvYqyq5V1tu400AJGttlzoqjZR1iMz2NH4A73tjehaIK2+8/+bKn3leshPb3uPyuJ5BXfC8ERD X-Received: by 2002:a17:906:f24d:: with SMTP id gy13mr21330722ejb.159.1574419773427; Fri, 22 Nov 2019 02:49:33 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1574419773; cv=none; d=google.com; s=arc-20160816; b=l5AZbPRTMgNBWKwI5LXQK88LPnvKUaTWT1laHJ2B+GRyRs4SvYefGY1Afo5ikKPRLB lQxIk7hWoQ2sBSH8nG8SgpOlzfDcC50UqTz5SKtNkArH43vihQ682KyEZCz53k9wKw0h cwbZkhP6JVcJSVUtLRVH3AI73SC6lu9ermwg9VwZYW4ORdW2SJuQ9YoBPoW5B64g84bz wZxksq7vs9tEkzBbxu+CzxwxFfmUfzlFW1+B2DGThRsKP38TIt48J3TDKf74ZhqLi+4+ Jm50+jX15vr599Det0B65jufSiNRNis0k3v1ifF1pdJKWXqC2xzYTjogzHLro3firJMs 0qGQ== 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=sczR/nvx15t9ixDwTADu51/HLaWq9n2RaP1iDYzRLCw=; b=feM1OnbSLSiS49zcjuuNrG18dZKFLngo+OgZ10bAuon8qPB11e4vtcvt/qcsDv5Jrm FuAZSpnsTByn19UGrjQahi2JMHHLAKy7kUM6Ki8G1c+ea/2BZE/dg8V0pGDwitTGOM/7 w4tm0+tEJ7q188TE3BImwwOixwVqQogQE50lCSps2RHd764BUlvGS/fudNQVIDqAsFP8 YBR1VOjMemijwP3ueQxefOsHk8vnWCJzoYElgw9v2PJgOJVlT8eis6iZKXKWQf8q5Z3g HMJ8iWlGAHrMiSDph7V50seJjJEoHIZjrNvwc12mDBWSIdE+SpI/spJj4xg7Cw0MIpA4 hgTA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=WNNk8ef1; 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 m14si704121edp.78.2019.11.22.02.49.09; Fri, 22 Nov 2019 02:49:33 -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=WNNk8ef1; 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 S1729445AbfKVKpR (ORCPT + 99 others); Fri, 22 Nov 2019 05:45:17 -0500 Received: from mail.kernel.org ([198.145.29.99]:51476 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727978AbfKVKpO (ORCPT ); Fri, 22 Nov 2019 05:45:14 -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 EEE2620718; Fri, 22 Nov 2019 10:45:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1574419513; bh=G6zvpt+DJmKU1FZM1LJkiwHRd+NsLNlOnyjrZk1GsLM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=WNNk8ef1HusK69C/qEOnYD3RWahv0fILsDLpdc/oicu26xze9ySYTeOaI+tM2u/BG SIYHOaz7FHuQRka9KDN+4/vi14Dn48ELmBO7CfzsmZ8qm8ROlcqKvAJWr6UlpUKqhP iupjxyNU8Rw4LKCMPv+cgcyOqOirtBYtLt2asC6E= 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.9 137/222] scsi: NCR5380: Dont clear busy flag when abort fails Date: Fri, 22 Nov 2019 11:27:57 +0100 Message-Id: <20191122100912.781673396@linuxfoundation.org> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20191122100830.874290814@linuxfoundation.org> References: <20191122100830.874290814@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 15c0fff7519be..a4856eeac26f6 100644 --- a/drivers/scsi/NCR5380.c +++ b/drivers/scsi/NCR5380.c @@ -626,8 +626,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); } @@ -1799,6 +1797,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: @@ -1881,6 +1880,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; @@ -2040,6 +2040,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); @@ -2194,13 +2195,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; } @@ -2368,8 +2372,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