lkml.org 
[lkml]   [2005]   [Nov]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: floppy regression from "[PATCH] fix floppy.c to store correct ..."
    On Sat, 19 Nov 2005, Jon Masters wrote:

    > On Wed, Nov 16, 2005 at 12:59:58AM -0800, Andrew Morton wrote:
    >
    > > hmm, yes, when floppy_open() does its test we haven't yet gone and
    > > determined the state of FD_DISK_WRITABLE. On later opens, we have done, so
    > > things work OK.
    >
    > I stuck a test in for first use and had floppy_release free up policy
    > too. But there are a bunch of problems in the floppy driver I've noticed
    > in going through it tonight (and there's only so much of that I can take
    > at 03:43 on a Saturday morning). I'll hopefully followup again.

    This patch fixes it for me. If you cook up anything else I'll give it a go
    as well. Thanks Jon.

    > diff -urN linux-2.6.14/drivers/block/floppy.c linux-2.6.14_new/drivers/block/floppy.c
    > --- linux-2.6.14/drivers/block/floppy.c 2005-10-28 01:02:08.000000000 +0100
    > +++ linux-2.6.14_new/drivers/block/floppy.c 2005-11-19 03:17:08.000000000 +0000
    > @@ -1610,10 +1610,11 @@
    > DPRINT("wp=%x\n", ST3 & 0x40);
    > }
    > #endif
    > - if (!(ST3 & 0x40))
    > + if (!(ST3 & 0x40)) {
    > SETF(FD_DISK_WRITABLE);
    > - else
    > + } else {
    > CLEARF(FD_DISK_WRITABLE);
    > + }
    > }
    > }
    >
    > @@ -3677,15 +3678,19 @@
    > int drive = (long)inode->i_bdev->bd_disk->private_data;
    >
    > down(&open_lock);
    > +
    > if (UDRS->fd_ref < 0)
    > UDRS->fd_ref = 0;
    > else if (!UDRS->fd_ref--) {
    > DPRINT("floppy_release with fd_ref == 0");
    > UDRS->fd_ref = 0;
    > }
    > - if (!UDRS->fd_ref)
    > + if (!UDRS->fd_ref) {
    > + opened_bdev[drive]->bd_disk->policy = 0;
    > opened_bdev[drive] = NULL;
    > + }
    > floppy_release_irq_and_dma();
    > +
    > up(&open_lock);
    > return 0;
    > }
    > @@ -3714,6 +3719,13 @@
    > USETF(FD_VERIFY);
    > }
    >
    > + /* set underlying gendisk policy to reflect device ro/rw status */
    > + if (UDRS->first_read_date && !(UTESTF(FD_DISK_WRITABLE))) {
    > + inode->i_bdev->bd_disk->policy = 1;
    > + } else {
    > + inode->i_bdev->bd_disk->policy = 0;
    > + }
    > +
    > if (UDRS->fd_ref == -1 || (UDRS->fd_ref && (filp->f_flags & O_EXCL)))
    > goto out2;
    >
    > @@ -3788,6 +3800,7 @@
    > if ((filp->f_mode & 2) && !(UTESTF(FD_DISK_WRITABLE)))
    > goto out;
    > }
    > +
    > up(&open_lock);
    > return 0;
    > out:
    >

    --
    Phishing, pharming; n.: Ways to obtain phood. -- The Devil's Infosec Dictionary

    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2005-11-21 04:41    [W:0.041 / U:31.976 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site