Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1437262 > unrolled thread

Resend: Another 4.4 to 4.5 floppy issue

Started byMark Hounschell <markh@compro.net>
First post2016-07-05 22:30 +0200
Last post2016-07-05 22:30 +0200
Articles 1 — 1 participant

Back to article view | Back to linux.kernel


Contents

  Resend: Another 4.4 to 4.5 floppy issue Mark Hounschell <markh@compro.net> - 2016-07-05 22:30 +0200

#1437262 — Resend: Another 4.4 to 4.5 floppy issue

FromMark Hounschell <markh@compro.net>
Date2016-07-05 22:30 +0200
SubjectResend: Another 4.4 to 4.5 floppy issue
Message-ID<rRF8K-7G3-21@gated-at.bofh.it>
Just rejoined the list due to floppy open problems created from 4.4 to 
4.5. I found the following email that indicates a fix for one of the 
problems.



From: Jiri Kosina <jkosina@suse.cz>

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 # v4.5+
Reported-by: Wim Osterholt <wim@djo.tudelft.nl>
Tested-by: Wim Osterholt <wim@djo.tudelft.nl>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
---

Jens, this should preferably go into 4.7-rcX and to -stable as well.

  drivers/block/floppy.c | 21 +++++++++------------
  1 file changed, 9 insertions(+), 12 deletions(-)

diff --git a/drivers/block/floppy.c b/drivers/block/floppy.c
index 84708a5..a1dcf12 100644
--- a/drivers/block/floppy.c
+++ b/drivers/block/floppy.c
@@ -3663,11 +3663,6 @@ static int floppy_open(struct block_device *bdev, 
fmode_t mode)

  	opened_bdev[drive] = bdev;

-	if (!(mode & (FMODE_READ|FMODE_WRITE))) {
-		res = -EINVAL;
-		goto out;
-	}
-
  	res = -ENXIO;

  	if (!floppy_track_buffer) {
@@ -3711,13 +3706,15 @@ static int floppy_open(struct block_device 
*bdev, fmode_t mode)
  	if (UFDCS->rawcmd == 1)
  		UFDCS->rawcmd = 2;

-	UDRS->last_checked = 0;
-	clear_bit(FD_OPEN_SHOULD_FAIL_BIT, &UDRS->flags);
-	check_disk_change(bdev);
-	if (test_bit(FD_DISK_CHANGED_BIT, &UDRS->flags))
-		goto out;
-	if (test_bit(FD_OPEN_SHOULD_FAIL_BIT, &UDRS->flags))
-		goto out;
+	if (mode & (FMODE_READ|FMODE_WRITE)) {
+		UDRS->last_checked = 0;
+		clear_bit(FD_OPEN_SHOULD_FAIL_BIT, &UDRS->flags);
+		check_disk_change(bdev);
+		if (test_bit(FD_DISK_CHANGED_BIT, &UDRS->flags))
+			goto out;
+		if (test_bit(FD_OPEN_SHOULD_FAIL_BIT, &UDRS->flags))
+			goto out;
+	}

  	res = -EROFS;

-- 
Jiri Kosina
SUSE Labs





But this does not completely fix all the problems induced by the 
original changes from 4.4 to 4.5. The following is what we use to open 
the floppy.

fd = open(device,  O_RDWR | O_NDELAY);

The FMODE_NDELAY check that was removed now prevents one from doing an 
open of the device with no media inserted. It also prevents one from 
doing an open of the device with media inserted that is not already 
formatted in a "standard" format.  I do both of these things a lot. I 
deal with a few very non-standard formats and this change prevents me 
from doing what I've been doing for YEARS. Could we please get the 
original behavior back in the floppy driver.

Thanks and regards
Mark

[toc] | [standalone]


Back to top | Article view | linux.kernel


csiph-web