mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-04 16:15:11 +00:00
block/swim3: Fix -EBUSY error when re-opening device after unmount
[ Upstream commit296dcc40f2
] 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 <userm57@yahoo.com> Fixes:1da177e4c3
("Linux-2.6.12-rc2") Cc: linuxppc-dev@lists.ozlabs.org Signed-off-by: Finn Thain <fthain@telegraphics.com.au> Signed-off-by: Jens Axboe <axboe@kernel.dk> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
b40ef2cced
commit
343962e03d
1 changed files with 5 additions and 1 deletions
|
@ -1027,7 +1027,11 @@ static void floppy_release(struct gendisk *disk, fmode_t mode)
|
||||||
struct swim3 __iomem *sw = fs->swim3;
|
struct swim3 __iomem *sw = fs->swim3;
|
||||||
|
|
||||||
mutex_lock(&swim3_mutex);
|
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);
|
swim3_action(fs, MOTOR_OFF);
|
||||||
out_8(&sw->control_bic, 0xff);
|
out_8(&sw->control_bic, 0xff);
|
||||||
swim3_select(fs, RELAX);
|
swim3_select(fs, RELAX);
|
||||||
|
|
Loading…
Reference in a new issue