Floppy patch for 5.12

- O_NDELAY/O_NONBLOCK fix for floppy from Jiri Kosina.
   libblkid is using O_NONBLOCK when probing devices.
   This leads to pollution of kernel log with error
   messages from floppy driver. Also the driver fails
   a mount prior to being opened without O_NONBLOCK
   at least once. The patch fixes the issues.
 
 Signed-off-by: Denis Efremov <efremov@linux.com>
 -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCAAdFiEEdlQDNgKUDfGSD+QDtSKVsDNQMB8FAmAbxhIACgkQtSKVsDNQ
 MB+1fRAAjl9yvWmWQdq7wCUpcKk7gL/qPVBVxU8IrI+byJp1tbNkwFlOP16/JBiT
 +K7a8NddJaDtYNTx7BXcyWAlXYdqGo065yQYu2doTwrCco3x84OhA+YJAheYII+0
 DpOKiJGrwgVXst5wlLEmyHfVeVTxQMm4iRCq/nl5U9FCrwcpDwGtNo8DZpHK1ZUp
 Bi5LCnejuYYk4FvSZZjD2WbieQhju8n5q/d4LGnt4pgBpC56JLqD5IJZZtEfApFi
 bYwNLsGUGtb3jZrkjPueHUHuF167bNrnPnyBRBWZuxAZpf7WzzPL7xR3CcX+N8Fc
 u1oUw87Adrs2XfCB/7mR3jBxffd1YoaQ0lu0L4EbGOuBOJmKOAYyYIssn6dgqxRz
 PoZ6ixMYFHqYIx/KFlK3UI7BMEbT34Swwhx2JlJA7i8Etp+dyH5dPlhkCqh/YC+6
 bLncPWQslrR+b3GhlOu2AX3SG2RaIEYhUMA5BcnGF8/j3GECDC2l3Q9drvdNbz78
 bKjsRME+9EKOXc/OJWPRF9WUROYSQnK0wQYVQosP+ufP8IbwOM3R0QwbS9xA3z5x
 vI4PoJ7Sm8xcLYsAKzh1+LLHPVstEPoshzsvD240txamoiyDaWkIQQT8J4GoOR6x
 kdK4UnY7/3SnX4nVkO9okDl6Q2DW4KdEnXhBleLa/26bn2yMMeU=
 =pv9Q
 -----END PGP SIGNATURE-----

Merge tag 'floppy-for-5.12' of https://github.com/evdenis/linux-floppy into for-5.12/drivers

Pull floppy fix from Denis:

"Floppy patch for 5.12

- O_NDELAY/O_NONBLOCK fix for floppy from Jiri Kosina.
  libblkid is using O_NONBLOCK when probing devices.
  This leads to pollution of kernel log with error
  messages from floppy driver. Also the driver fails
  a mount prior to being opened without O_NONBLOCK
  at least once. The patch fixes the issues."

Signed-off-by: Denis Efremov <efremov@linux.com>

* tag 'floppy-for-5.12' of https://github.com/evdenis/linux-floppy:
  floppy: reintroduce O_NDELAY fix
This commit is contained in:
Jens Axboe 2021-02-04 07:36:49 -07:00
commit 1dced56c3a

View File

@ -4121,23 +4121,23 @@ static int floppy_open(struct block_device *bdev, fmode_t mode)
if (fdc_state[FDC(drive)].rawcmd == 1)
fdc_state[FDC(drive)].rawcmd = 2;
if (!(mode & FMODE_NDELAY)) {
if (mode & (FMODE_READ|FMODE_WRITE)) {
drive_state[drive].last_checked = 0;
clear_bit(FD_OPEN_SHOULD_FAIL_BIT,
&drive_state[drive].flags);
if (bdev_check_media_change(bdev))
floppy_revalidate(bdev->bd_disk);
if (test_bit(FD_DISK_CHANGED_BIT, &drive_state[drive].flags))
goto out;
if (test_bit(FD_OPEN_SHOULD_FAIL_BIT, &drive_state[drive].flags))
goto out;
}
res = -EROFS;
if ((mode & FMODE_WRITE) &&
!test_bit(FD_DISK_WRITABLE_BIT, &drive_state[drive].flags))
if (mode & (FMODE_READ|FMODE_WRITE)) {
drive_state[drive].last_checked = 0;
clear_bit(FD_OPEN_SHOULD_FAIL_BIT, &drive_state[drive].flags);
if (bdev_check_media_change(bdev))
floppy_revalidate(bdev->bd_disk);
if (test_bit(FD_DISK_CHANGED_BIT, &drive_state[drive].flags))
goto out;
if (test_bit(FD_OPEN_SHOULD_FAIL_BIT, &drive_state[drive].flags))
goto out;
}
res = -EROFS;
if ((mode & FMODE_WRITE) &&
!test_bit(FD_DISK_WRITABLE_BIT, &drive_state[drive].flags))
goto out;
mutex_unlock(&open_lock);
mutex_unlock(&floppy_mutex);
return 0;