Received: by 10.192.165.156 with SMTP id m28csp1352603imm; Wed, 11 Apr 2018 17:55:08 -0700 (PDT) X-Google-Smtp-Source: AIpwx48+ykABWjg/5tOTpNahm5BVSnr1sLpNBcK65akdto8ZoDCQcQflX/8IalH0qo2nNyBuILwF X-Received: by 10.101.76.129 with SMTP id m1mr4998967pgt.90.1523494508153; Wed, 11 Apr 2018 17:55:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1523494508; cv=none; d=google.com; s=arc-20160816; b=rLsIklIUA2eDjbJSjZFL9wW7Y7VdmDusoW/jfc+lUaSDePMQ5IhIOFKYYCCtkXK9hi IyYxRhkmTdIl+GFmrBqrY+//u78wYiIQOwAvTTJgjlafuOea77wcHXxpxndMZ1HOVDqv cyYJRPzUrRa5pxII0I954YueufLnC58HfyOjN6px1MZSh0AX8V1gAzT72aitjci4J19q yV4oegZmfPln414bpVvjT3GsN6yPndJjs1n2YThN0ZAUAt+69tsqMCtD98UYB/+L788T 6wj55aa5U8J/85KonLN8nNZagA7Mw2b10j0T5bIsI44SZTU8Zh7Px7BF4t15ZFzkWDwQ D3LQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:date:subject:from:references:in-reply-to :message-id:cc:to:arc-authentication-results; bh=9LsZKuINOyqe4dov1IiV+iodoll1Okf+DaKTafK9zvw=; b=0XLBLvNsoBGcT0cV8qzlc+hfua+YnxkS6WcZFQtSDOtJMokYwmt+1qzQIIHxAt4wFE ykRUFYgX2OrvFQZKDyVmCZctnl9hzdG6asOEXt+PFmJ05Asx1NayEfrehqDApmkh63aD kMUamZmBl56CCGy3pVtxAnCER1PwT/yuNVf2VNjXDKb4c5qdCiKSQnAVrMD1hS+XMofr Gtox0lk67euxTVDonvNv8c3UK56k1zYVFc7pCmfUKs0gfNtJ7GTGpc8NU/KyDU2jECCH wVBs2Z9Ab/TjpR3PNyx5H4ro9uBEcrnQ1JlyD3GOK/CCUZSULixx+yRdjzW0CKXFf9YS 1JPg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id z73si1497296pgz.559.2018.04.11.17.54.31; Wed, 11 Apr 2018 17:55:08 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752711AbeDLAuX (ORCPT + 99 others); Wed, 11 Apr 2018 20:50:23 -0400 Received: from kvm5.telegraphics.com.au ([98.124.60.144]:39862 "EHLO kvm5.telegraphics.com.au" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752639AbeDLAuU (ORCPT ); Wed, 11 Apr 2018 20:50:20 -0400 Received: by kvm5.telegraphics.com.au (Postfix, from userid 502) id AC649299E5; Wed, 11 Apr 2018 20:50:14 -0400 (EDT) To: Geert Uytterhoeven Cc: Jens Axboe , Laurent Vivier , linux-m68k@lists.linux-m68k.org, linux-kernel@vger.kernel.org, linux-block@vger.kernel.org, stable@vger.kernel.org Message-Id: <8f7474079aab3a47a4534bec7463ed52d0e5a652.1523493475.git.fthain@telegraphics.com.au> In-Reply-To: References: From: Finn Thain Subject: [PATCH v2 09/10] block/swim: Fix IO error at end of medium Date: Wed, 11 Apr 2018 20:50:14 -0400 (EDT) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 Cc: Jens Axboe Cc: stable@vger.kernel.org # v4.14+ Tested-by: Stan Johnson Signed-off-by: Finn Thain Acked-by: Laurent Vivier --- 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 c8c8b9da3edd..2c75761b61e8 100644 --- a/drivers/block/swim.c +++ b/drivers/block/swim.c @@ -612,7 +612,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 @@ -620,6 +619,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; @@ -656,6 +658,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; @@ -808,10 +812,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