Received: by 2002:a05:6a10:22f:0:0:0:0 with SMTP id 15csp3297430pxk; Mon, 21 Sep 2020 09:59:57 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwApjpZBaEANhfmEWoEM+sLj+nYBixmXkFCWMilD8RYBLzSuRiEUI7du/4ApfPKCtMqjgNn X-Received: by 2002:a17:907:20d0:: with SMTP id qq16mr360185ejb.65.1600707597319; Mon, 21 Sep 2020 09:59:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1600707597; cv=none; d=google.com; s=arc-20160816; b=ZmGjYud5dflmOtbP+Oi9w2kE8Bu9TIdg3q9oDSW4riJL9UOo3/F4mJKl5sw3dxqOjV MQWwH+sQ0IQU9bM/SoaaIIC/00hJjIXAqp3OnccHQmFIjQiu/iyHeBluIG3afYpz+1ls Y4Y96934y9Prx5dyh2oX/LFvq503FPDhjtPnm+e7DeToGKiLCbAZps5lRQx74ZDyabf5 /jY94NtYr7S2Bi9nmkABgnQ4AmMZzALPmRWTQxcNaVf/ZDO8O0JRGxhiyXehx82y4m2I z5gBCVV+EpWpODU62XtD8Bu1qQwT0fH60oC+BjS5+6lUK6qm+ZZurftRxWIQxPTPTytZ ZeyQ== 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=flg6DbCqFS/aIpq4burQt/QBCByRAa5fQql4nys1gCI=; b=oFnvVKgM899vhumZ/P6P5zN7orredzyXSYVClq7mlKhX7LG0hTaG/Um6Zp9C3lZHjJ fppwcJTKjnaW5ggJrnVmwrjQYDzMISy3mv8O+XkZihREqka49RXrNfWjIeftsOJ1FA1H X8w0G2zUtZj1CVW7yr9pkwyPYJdb6pddTC1H4PS8djGi+w6BJOJqzCcbf/XHpEU8iDre dJEeB1fqhOYdZPPZDsxnRnhatKa0erpf2FIym5d+QmkpYr+apfneTJ7lyXuZCNw1Spmq K/XRtdb+96eM6/F+cGGUwgzTVYr9yTu8x1vnKNxCyV3HVT1P6HgdAf3eHT+lX1HJMCZB XPWg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=IPpanMck; 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 q23si8735447ejd.363.2020.09.21.09.59.32; Mon, 21 Sep 2020 09:59:57 -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=IPpanMck; 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 S1730265AbgIUQ6d (ORCPT + 99 others); Mon, 21 Sep 2020 12:58:33 -0400 Received: from mail.kernel.org ([198.145.29.99]:46078 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728566AbgIUQmF (ORCPT ); Mon, 21 Sep 2020 12:42:05 -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 490BC2076B; Mon, 21 Sep 2020 16:42:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1600706524; bh=W9n73qY6qp2I3+5JwnVJVsiwZOK3YAjmSvvyOFDMwWQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=IPpanMckZvSikON7e74VGg077LkYlZ50Ft/DIYDvs2fCcVhOt3DWa6uLf/CRSV3wX 2JWPxZDK6lJCYX9WAWCnu0nRPeqAqSRd5PHXOhyo7WqsRNgXoZ/Ma7M1Px6H15zebZ ohY/TyAC+6DJoryZ0fYVTULxTj99SihZEaeXyanA= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Oliver Neukum Subject: [PATCH 4.19 38/49] USB: UAS: fix disconnect by unplugging a hub Date: Mon, 21 Sep 2020 18:28:22 +0200 Message-Id: <20200921162036.357320629@linuxfoundation.org> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20200921162034.660953761@linuxfoundation.org> References: <20200921162034.660953761@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 @@ -669,8 +669,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 */ @@ -706,6 +705,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) { @@ -716,6 +725,7 @@ static int uas_queuecommand_lck(struct s } devinfo->cmnd[idx] = cmnd; +zombie: spin_unlock_irqrestore(&devinfo->lock, flags); return 0; }