Thread (18 messages) 18 messages, 6 authors, 2021-02-04

Re: [PATCH] floppy: reintroduce O_NDELAY fix

From: Denis Efremov <efremov@linux.com>
Date: 2021-01-26 12:49:41
Also in: lkml


On 1/26/21 12:31 PM, Kurt Garloff wrote:
Hi Denis, Jiri, Jens,

Am 26.01.21 um 09:21 schrieb Denis Efremov:
quoted
On 1/22/21 2:13 PM, Jiri Kosina wrote:
quoted
From: Jiri Kosina <redacted>

This issue was originally fixed in 09954bad4 ("floppy: refactor open() 
flags handling").

The fix as a side-effect, however, introduce issue for open(O_ACCMODE) 
that is being used for ioctl-only open. I wrote a fix for that, but 
instead of it being merged, full revert of 09954bad4 was performed, 
re-introducing the O_NDELAY / O_NONBLOCK issue, and it strikes again.

This is a forward-port of the original fix to current codebase; the 
original submission had the changelog below:

====
Commit 09954bad4 ("floppy: refactor open() flags handling"), as a
side-effect, causes open(/dev/fdX, O_ACCMODE) to fail. It turns out that
this is being used setfdprm userspace for ioctl-only open().

Reintroduce back the original behavior wrt !(FMODE_READ|FMODE_WRITE) 
modes, while still keeping the original O_NDELAY bug fixed.

Cc: stable@vger.kernel.org
Reported-by: Wim Osterholt <redacted>
Tested-by: Wim Osterholt <redacted>
Reported-and-tested-by: Kurt Garloff <redacted>
Fixes: 09954bad4 ("floppy: refactor open() flags handling")
Fixes: f2791e7ead ("Revert "floppy: refactor open() flags handling"")
Signed-off-by: Jiri Kosina <redacted>
Applied. I'll send it to Jens soon with a couple of cleanup patches.

https://github.com/evdenis/linux-floppy/commit/e32f6163c47efbdbad06258560aa00d1c7e5b699
Great, thanks.

Due to libblkid (rightfully) using O_NONBLOCK these days when probing
devices, the floppy driver does spit loads of
[    9.533513] floppy0: disk absent or changed during operation
[    9.534989] blk_update_request: I/O error, dev fd0, sector 0 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0
[    9.537206] Buffer I/O error on dev fd0, logical block 0, async page read
[    9.546837] floppy0: disk absent or changed during operation
[    9.548389] blk_update_request: I/O error, dev fd0, sector 0 op 0x0:(READ) flags 0x80700 phys_seg 1
and fails a mount prior to being opened without O_NONBLOCK at least once.
(Reproduction is easy with qemu-kvm.)

The patch addresses it and I would suggest it to also be backported and
applied to the active stable kernel trees.
Yes, it will be backported to all stable trees including v4.4

Thanks,
Denis
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help