Received: by 2002:a05:6a10:22f:0:0:0:0 with SMTP id 15csp3290191pxk; Mon, 21 Sep 2020 09:49:02 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwesUXA4NmlB4UhAGcG2Xx9Z9d09WpyAbv906YSy9AQuL9AmRz0sfgvhOiVLNPIVusCloKh X-Received: by 2002:a17:906:4993:: with SMTP id p19mr331154eju.277.1600706942403; Mon, 21 Sep 2020 09:49:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1600706942; cv=none; d=google.com; s=arc-20160816; b=R1HzTRaOrwOwH92qQcOpEgsiSODPEVhxlP9wvKecXEA6/iMNHCnDQXZVOqbhifk/6A 6md9UuF25wgDbimxjQnXopHe7xtW6WFOA/uDWAof2PIDdqgf9iN1gS5+5ekGSEU4xnwJ 7zM1SN5lP5U4jLETiz5MC+4LoVyz6wzgGwjClOJRSTCRKJB/KaTMl9XWrRcPj9URjGCm 0e9XbZk0qu6zOHysOKosiY8Sg0eH1StLFle9ZrCuT94ove7Y+7uMnvozOXMGJfHRg/oY MkVhZOSp0nkW8upiTnjv3qT3G8bwlDehtfZh54aIZxtAv6YXy8cNV/Wfhc0TjkpxyMya 6PIQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=K/Anb0XMoFQoNBRUlk4TON16/djR5PuXD68MO5DrZ+U=; b=abooxef1V+UonhgcHcB0EuUztNnzLukczJ9kA0MglahibKmELNnlNbWt9GA5/cPNto 2avY/Kdil1h4PFaY60mpebx1kZqeGD+ts7ZUJ8WTGtotDbrbOhA+m3blmE1hc5LJpsEY xw0vqE0Nc2QACUw67poEIpwRT3p17NjGDeGrUi1YqNTO2XZ45J8ulaz9J5fD+kuqygz5 tO6Shp3wuIodBBpDeTvq0/2DZOrSCZIqAcGXeaPo3E3FnfHjcWRV/vspu4xfwrNlkKim dDNDmGMaYd+6VF3ukWvLCnlKqFWbIOnqNXwhBWHbsuWDcK2qc8KvEaFDS0DxryIjiKUD mVMA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=qEk6VCf4; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id lk17si8664498ejb.188.2020.09.21.09.48.39; Mon, 21 Sep 2020 09:49:02 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=qEk6VCf4; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729801AbgIUQrt (ORCPT + 99 others); Mon, 21 Sep 2020 12:47:49 -0400 Received: from mail.kernel.org ([198.145.29.99]:54834 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728669AbgIUQrr (ORCPT ); Mon, 21 Sep 2020 12:47:47 -0400 Received: from localhost (83-86-74-64.cable.dynamic.v4.ziggo.nl [83.86.74.64]) (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 B874820874; Mon, 21 Sep 2020 16:47:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1600706866; bh=LIlwq97RYKpjoA7GnwEpLDHMzxCCJqryTtrt0PN+AMI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=qEk6VCf4nEpDXvAtOxmf1ElHVKkG/jQrmT5H2QAQPWZSUU43gt6jmTZozhwMl42cD i5nTAoZy/CsGQHK3JcxGoUovyxJnxDup5/kbk13Q6N8Ebs+XtAlXm58lbMf2qSjP7W Xk9b7q+h5RAmaVuwxW/B4MLPnUA4M1ccIR8oq7V8= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Oliver Neukum Subject: [PATCH 5.8 087/118] USB: UAS: fix disconnect by unplugging a hub Date: Mon, 21 Sep 2020 18:28:19 +0200 Message-Id: <20200921162040.395257799@linuxfoundation.org> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20200921162036.324813383@linuxfoundation.org> References: <20200921162036.324813383@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Oliver Neukum commit 325b008723b2dd31de020e85ab9d2e9aa4637d35 upstream. The SCSI layer can go into an ugly loop if you ignore that a device is gone. You need to report an error in the command rather than in the return value of the queue method. We need to specifically check for ENODEV. The issue goes back to the introduction of the driver. Fixes: 115bb1ffa54c3 ("USB: Add UAS driver") Signed-off-by: Oliver Neukum Cc: stable Link: https://lore.kernel.org/r/20200916094026.30085-2-oneukum@suse.com Signed-off-by: Greg Kroah-Hartman --- drivers/usb/storage/uas.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) --- a/drivers/usb/storage/uas.c +++ b/drivers/usb/storage/uas.c @@ -662,8 +662,7 @@ static int uas_queuecommand_lck(struct s if (devinfo->resetting) { cmnd->result = DID_ERROR << 16; cmnd->scsi_done(cmnd); - spin_unlock_irqrestore(&devinfo->lock, flags); - return 0; + goto zombie; } /* Find a free uas-tag */ @@ -699,6 +698,16 @@ static int uas_queuecommand_lck(struct s cmdinfo->state &= ~(SUBMIT_DATA_IN_URB | SUBMIT_DATA_OUT_URB); err = uas_submit_urbs(cmnd, devinfo); + /* + * in case of fatal errors the SCSI layer is peculiar + * a command that has finished is a success for the purpose + * of queueing, no matter how fatal the error + */ + if (err == -ENODEV) { + cmnd->result = DID_ERROR << 16; + cmnd->scsi_done(cmnd); + goto zombie; + } if (err) { /* If we did nothing, give up now */ if (cmdinfo->state & SUBMIT_STATUS_URB) { @@ -709,6 +718,7 @@ static int uas_queuecommand_lck(struct s } devinfo->cmnd[idx] = cmnd; +zombie: spin_unlock_irqrestore(&devinfo->lock, flags); return 0; }