All of lore.kernel.org
 help / color / mirror / Atom feed
From: Finn Thain <fthain@telegraphics.com.au>
To: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Laurent Vivier <lvivier@redhat.com>, Jens Axboe <axboe@kernel.dk>,
	linux-m68k@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [PATCH 11/12] block/swim: Fix IO error at end of medium
Date: Sat, 31 Mar 2018 21:41:05 -0400 (EDT)	[thread overview]
Message-ID: <eada494d870cf0c71479cf48927b4a95c64a1062.1522546571.git.fthain@telegraphics.com.au> (raw)
In-Reply-To: <cover.1522546571.git.fthain@telegraphics.com.au>

Reading to the end of a 720K disk results in an IO error instead of EOF
because the block layer thinks the disk has 2880 sectors. (Partly this
is a result of inverted logic of the ONEMEG_MEDIA bit that's now fixed.)

Initialize the density and head count in swim_add_floppy() to agree
with the device size passed to set_capacity() during drive probe.

Call set_capacity() again upon device open, after refreshing the density
and head count values.

Cc: Laurent Vivier <lvivier@redhat.com>
Cc: Jens Axboe <axboe@kernel.dk>
Tested-by: Stan Johnson <userm57@yahoo.com>
Signed-off-by: Finn Thain <fthain@telegraphics.com.au>
---
 drivers/block/swim.c | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/drivers/block/swim.c b/drivers/block/swim.c
index 6e3ebf5519e3..c4eb54575574 100644
--- a/drivers/block/swim.c
+++ b/drivers/block/swim.c
@@ -619,7 +619,6 @@ static void setup_medium(struct floppy_state *fs)
 		struct floppy_struct *g;
 		fs->disk_in = 1;
 		fs->write_protected = swim_readbit(base, WRITE_PROT);
-		fs->type = swim_readbit(base, TWOMEG_MEDIA);
 
 		if (swim_track00(base))
 			printk(KERN_ERR
@@ -627,6 +626,9 @@ static void setup_medium(struct floppy_state *fs)
 
 		swim_track00(base);
 
+		fs->type = swim_readbit(base, TWOMEG_MEDIA) ?
+			HD_MEDIA : DD_MEDIA;
+		fs->head_number = swim_readbit(base, SINGLE_SIDED) ? 1 : 2;
 		get_floppy_geometry(fs, 0, &g);
 		fs->total_secs = g->size;
 		fs->secpercyl = g->head * g->sect;
@@ -668,6 +670,8 @@ static int floppy_open(struct block_device *bdev, fmode_t mode)
 		goto out;
 	}
 
+	set_capacity(fs->disk, fs->total_secs);
+
 	if (mode & FMODE_NDELAY)
 		return 0;
 
@@ -820,10 +824,9 @@ static int swim_add_floppy(struct swim_priv *swd, enum drive_location location)
 
 	swim_motor(base, OFF);
 
-	if (swim_readbit(base, SINGLE_SIDED))
-		fs->head_number = 1;
-	else
-		fs->head_number = 2;
+	fs->type = HD_MEDIA;
+	fs->head_number = 2;
+
 	fs->ref_count = 0;
 	fs->ejected = 1;
 
-- 
2.16.1

  parent reply	other threads:[~2018-04-01  1:41 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-04-01  1:41 [PATCH 00/12] SWIM driver fixes Finn Thain
2018-04-01  1:41 ` [PATCH 04/12] m68k/mac: Place ISM IOP in bypass mode Finn Thain
2018-04-05  1:33   ` Sasha Levin
2018-04-01  1:41 ` [PATCH 02/12] m68k/mac: Fix SWIM memory resource end address Finn Thain
2018-04-05  1:33   ` Sasha Levin
2018-04-09 12:51   ` Geert Uytterhoeven
2018-04-01  1:41 ` [PATCH 03/12] m68k/mac: Don't remap SWIM MMIO region Finn Thain
2018-04-05  1:33   ` Sasha Levin
2018-04-09 12:54   ` Geert Uytterhoeven
2018-04-09 15:17     ` Luc Van Oostenryck
2018-04-10  1:35     ` Finn Thain
2018-04-10  2:38     ` Michael Schmitz
2018-04-01  1:41 ` [PATCH 01/12] m68k/mac: Revisit floppy disc controller base addresses Finn Thain
2018-04-05  1:33   ` Sasha Levin
2018-04-01  1:41 ` [PATCH 10/12] block/swim: Check drive type Finn Thain
2018-04-05  1:33   ` Sasha Levin
2018-04-01  1:41 ` Finn Thain [this message]
2018-04-05  1:33   ` [PATCH 11/12] block/swim: Fix IO error at end of medium Sasha Levin
2018-04-01  1:41 ` [PATCH 07/12] block/swim: Remove extra put_disk() call from error path Finn Thain
2018-04-05  1:33   ` Sasha Levin
2018-04-09 13:11   ` Geert Uytterhoeven
2018-04-01  1:41 ` [PATCH 12/12] block/swim: Select appropriate drive on device open Finn Thain
2018-04-05  1:33   ` Sasha Levin
2018-04-01  1:41 ` [PATCH 08/12] block/swim: Don't log an error message for an invalid ioctl Finn Thain
2018-04-05  1:33   ` Sasha Levin
2018-04-09 13:14   ` Geert Uytterhoeven
2018-04-10  1:27     ` Finn Thain
2018-04-01  1:41 ` [PATCH 09/12] block/swim: Rename macros to avoid inconsistent inverted logic Finn Thain
2018-04-01  1:41   ` Finn Thain
2018-04-01  1:41 ` [PATCH 05/12] block/swim: Use HEDSEL bit in ISM mode register Finn Thain
2018-04-05  1:33   ` Sasha Levin
2018-04-01  1:41 ` [PATCH 06/12] block/swim: Fix array bounds check Finn Thain
2018-04-05  1:33   ` Sasha Levin
2018-04-09 13:08   ` Geert Uytterhoeven
2018-04-10  1:10     ` Finn Thain
2018-04-03 19:07 ` [PATCH 00/12] SWIM driver fixes Laurent Vivier
2018-04-03 22:53   ` Finn Thain
2018-04-03 23:32 ` Jens Axboe
2018-04-03 23:33   ` Jens Axboe
2018-04-05  1:33 ` Sasha Levin
2018-04-05  6:30   ` Greg KH
2018-04-05  6:40     ` Sasha Levin
2018-04-05  6:51       ` Greg KH
2018-04-07  0:14   ` Finn Thain

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=eada494d870cf0c71479cf48927b4a95c64a1062.1522546571.git.fthain@telegraphics.com.au \
    --to=fthain@telegraphics.com.au \
    --cc=axboe@kernel.dk \
    --cc=geert@linux-m68k.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-m68k@vger.kernel.org \
    --cc=lvivier@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.