From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754590AbcGENgl (ORCPT ); Tue, 5 Jul 2016 09:36:41 -0400 Received: from smtp73.iad3a.emailsrvr.com ([173.203.187.73]:55388 "EHLO smtp73.iad3a.emailsrvr.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751427AbcGENgi (ORCPT ); Tue, 5 Jul 2016 09:36:38 -0400 X-Greylist: delayed 484 seconds by postgrey-1.27 at vger.kernel.org; Tue, 05 Jul 2016 09:36:38 EDT X-SMTPDoctor-Processed: csmtpprox beta X-Auth-ID: markh@compro.net X-Sender-Id: markh@compro.net Reply-To: markh@compro.net Cc: Jiri Kosina To: Linux-kernel From: Mark Hounschell Subject: Another 4.4 to 4.5 floppy issue Organization: Compro Computer Svcs. Message-ID: <577BB600.5000603@compro.net> Date: Tue, 5 Jul 2016 09:28:32 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.7.0 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 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 Tested-by: Wim Osterholt Signed-off-by: Jiri Kosina --- 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