Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp10400469imu; Sun, 30 Dec 2018 21:50:58 -0800 (PST) X-Google-Smtp-Source: ALg8bN4PxbTUsVmGJHA/BBc3gbhLkFpg17MS3FM1Bao7LN3vQz9EWJgjIdp4BY+3t0yHXpJ5x2q0 X-Received: by 2002:a63:990a:: with SMTP id d10mr6582352pge.279.1546235458601; Sun, 30 Dec 2018 21:50:58 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1546235458; cv=none; d=google.com; s=arc-20160816; b=xAw1G30DzpVtDn6kn/COTcdOA3bZzfUZbb+L0QmZA3Gu0Il9wyssNjRMcw+vxQ0ChG mzDBlgWGRNv7Rt/c4Rnnfiheoj1IQMmdARhSSz+YnkPNlBXxeiWZdYxt792wA1m+TWn/ THzJSRndELfNQNVCsog8jjcxwAIz2N5pYvA9ueGSxdfVzdAXzBjDuJ0yS+RRuR/etIE0 5dkLmewrZZfE6PnIUr8v+rRC5uvlW+kKKjb7pPg4CGKt402sErZO2bksKjjON9K26qiU XDZQv9lmjIRfzeKeIyB2U1CtzKbdDGpMurbnRLAbANfNfvxhOAj8fP4rrWT5L2cz6edZ Nf7Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:date:subject:from:message-id:cc:to; bh=kdIUWp6DXHIjHPADe+NbBZeTq+omZvA7mL5iF7m+bSE=; b=bbk/LxXeDxiWssR0IFkiaZQxBcqoIFviNqXJcj7ZLOsuo3nqNeT76vvwdaDrhVytCI BG1SzpcLSMat+hIDyFbggdh+AbfRUWD13ymkWPCtPUab+f5C5UUAGLX5+8PcuqddSTP4 anVEpxYrHxp7NhlGmXfGtmG5UJ9Qr0Nud9PrbJM/VjNwQVVB84yw83NK+KLKlGICVbj8 O3pUQzPdRWjk5iJ4sU6T1OzTHvt7UESBEuhfjbl3zj6lkUAllVp2ponha5EsFs5Txc8p pbzUpIX150VAVtq65iClXxL6Bbw/QbvTdeniFQSZv912C51bSkmDr5myfA9bAO52A8ga QZoQ== ARC-Authentication-Results: i=1; mx.google.com; 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 h10si9589633pgi.562.2018.12.30.21.50.30; Sun, 30 Dec 2018 21:50:58 -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; 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 S1727049AbeLaFtG (ORCPT + 99 others); Mon, 31 Dec 2018 00:49:06 -0500 Received: from kvm5.telegraphics.com.au ([98.124.60.144]:41916 "EHLO kvm5.telegraphics.com.au" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726226AbeLaFtF (ORCPT ); Mon, 31 Dec 2018 00:49:05 -0500 Received: by kvm5.telegraphics.com.au (Postfix, from userid 502) id AE25E29BD5; Mon, 31 Dec 2018 00:49:02 -0500 (EST) To: Jens Axboe Cc: linuxppc-dev@lists.ozlabs.org, linux-block@vger.kernel.org, linux-kernel@vger.kernel.org Message-Id: <177ead1d637f617792aa5ca2ee294d61e3d0cea2.1546235049.git.fthain@telegraphics.com.au> From: Finn Thain Subject: [PATCH] block/swim3: Fix -EBUSY error when re-opening device after unmount Date: Mon, 31 Dec 2018 16:44:09 +1100 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org When the block device is opened with FMODE_EXCL, ref_count is set to -1. This value doesn't get reset when the device is closed which means the device cannot be opened again. Fix this by checking for refcount <= 0 in the release method. Reported-and-tested-by: Stan Johnson Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") Cc: linuxppc-dev@lists.ozlabs.org Signed-off-by: Finn Thain --- drivers/block/swim3.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/block/swim3.c b/drivers/block/swim3.c index ba1190f1276b..87ca8f207c7c 100644 --- a/drivers/block/swim3.c +++ b/drivers/block/swim3.c @@ -995,7 +995,11 @@ static void floppy_release(struct gendisk *disk, fmode_t mode) struct swim3 __iomem *sw = fs->swim3; mutex_lock(&swim3_mutex); - if (fs->ref_count > 0 && --fs->ref_count == 0) { + if (fs->ref_count > 0) + --fs->ref_count; + else if (fs->ref_count == -1) + fs->ref_count = 0; + if (fs->ref_count == 0) { swim3_action(fs, MOTOR_OFF); out_8(&sw->control_bic, 0xff); swim3_select(fs, RELAX); -- 2.19.2