mirror of
https://github.com/torvalds/linux.git
synced 2026-11-06 21:58:01 +01:00
swim3: Fix FDEJECT ioctl for exclusive open
The eject command from the util-linux package does not work with the
swim3 driver: the drive doesn't eject anything and the command fails.
Apparently, ioctl(fd, FDEJECT) returns -EBUSY after fd was opened O_EXCL.
Fix this by checking ref_count for either 1 or -1. Either value means that
the caller is the sole user of the disk.
Fixes: 1da177e4c3 ("Linux-2.6.12-rc2")
Tested-by: Stan Johnson <userm57@yahoo.com>
Signed-off-by: Finn Thain <fthain@linux-m68k.org>
Link: https://patch.msgid.link/f4cb43726ee6f1cf159a6208f77b4cceea670a3c.1790641175.git.fthain@linux-m68k.org
Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
c76b93df9a
commit
ce054fbe9a
|
|
@ -887,7 +887,6 @@ static int floppy_locked_ioctl(struct block_device *bdev, blk_mode_t mode,
|
|||
unsigned int cmd, unsigned long param)
|
||||
{
|
||||
struct floppy_state *fs = bdev->bd_disk->private_data;
|
||||
int err;
|
||||
|
||||
if ((cmd & 0x80) && !capable(CAP_SYS_ADMIN))
|
||||
return -EPERM;
|
||||
|
|
@ -898,10 +897,9 @@ static int floppy_locked_ioctl(struct block_device *bdev, blk_mode_t mode,
|
|||
|
||||
switch (cmd) {
|
||||
case FDEJECT:
|
||||
if (fs->ref_count != 1)
|
||||
return -EBUSY;
|
||||
err = fd_eject(fs);
|
||||
return err;
|
||||
if (fs->ref_count == -1 || fs->ref_count == 1)
|
||||
return fd_eject(fs);
|
||||
return -EBUSY;
|
||||
case FDGETPRM:
|
||||
if (copy_to_user((void __user *) param, &floppy_type,
|
||||
sizeof(struct floppy_struct)))
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user